Relevancy 3.1 搜索相关性探究

作者Paul Nelson,Search Technologies首席架构师
转载自searchtechnologies,如有侵权请联系shinehiy@foxmail.com


本文是该系列文章的第一篇。我本想把本文命名为“Relevancy101”但是对于已经成为学术研究主要领域的搜索来说太过狭隘。那我们就来开启这个研究生课程吧,打开你的书包,把奇多和汽水都掏出来,我们消停一会,就来说说搜索引擎相关性吧。

我之前写过博客(详见相关性是什么),但是说的多是相关性的理论介绍。本文将深入不同类型的相关性,他们如何计算,他们有何有点。我会尽量少用数学说事。

TF(词频)

目前最为基础的相关度排序标准,以及1970年搜索引擎最先实现的内容,就是“词频”。就是简单的计算文档里的一个query中的词出现的次数。文档中这个词提的越多,就意味着这个文档比那些提这个词较少的文档要更相关。再乘上下述的IDF,就是我们标准的TF-IDF统计量了(见Wiki的非标准化TF-IDF方法 以及 带文档长达标准化的版本 Okapi BM25).

用“frequency”这个词,我感觉纯属用词不当。多数算法都用一个简单的出现次数来计算,所以如果出现两次“frequency”就是2,出现三次就是3。

词频带来了一个普遍的问题,比起短文本它更倾向于较长的文档,原因很简单,长的文档有更多词,提到query中词的可能性就高。

搜索引擎会基于文档的长短调节词频来调整其对长文本的倾向。但是,这会引起短文本方面的问题(词典、分类广告、微博等等),一个词在一个5个词的文档中会比10个词的文档中更重要,然而这两句话在语义上没啥区别。

第二个问题就是TF一点小的变动,对最终的评分结果影响很大。一个词,出现两次的文档要比只出现一次的文档高两倍。排序值如此大的差异倾向于不支持换语言表达,这些附加的功能。

逆文档频率(IDF)

信息理论(aka Shannon’s理论)数据中词所带来的信息量于其出现的次数成反比。出现频繁的词蕴含的信息少。低频词包含了大量的信息。

之前一些搜索引擎设计者担心用户搜索高频词并不会特别有效。”about”、”very”、”contain”,经常在标准英文中出现的词如果出现在了query中,就会造成搜索结果倾斜。不加这些词,搜索结果更加精确。

词T的常用IDF公式如下:

IDF(T)=log(N/dbCount[T])

N是数据库中所有文档数(或是其他大的实数,目的是增大输入值防止出现负的IDF值)以及“dbCount[T]”是所有包含词T的文档。

IDF值往往依赖于查询词T以及数据库中有多少文档,不会因文档不同而不同。因此,IDF在1个词的query上毫无作用。标准的TF-IDF公式是:

TFIDF(T)=TFlog(N/dbCount[T])

我并不喜欢逆文档频率,你可以在 wiki的信息理论中看到包含如下评论:

这些关注点对于重要的信息没有作用。比如,一些比较普遍的文本“Thank you;come again ”看起来和“Call an ambulance! ”一样,但是后面这句在很多情景中就更有意义也更重要。信息理论,并没有考虑信息的重要性或者意义,把这些看做数据质量的问题而不是信息数量和可读性的问题,后面这些由数据的概率就能决定。

这段话明确指出了过度依赖IDF的问题:
1. IDF没有考虑统计样本谁。词数统计来自少量的文本,因为抽样数小并不可靠。换句话说,就是词出现的次数越多置信度就越高。置信度降低的问题并没有在IDF中考虑。
2. 同样,拼错的单词出现频繁,反而会被IDF算的很高,但是根本没什么用。
3. 常用词的组合往往是十分重要的。比如摇滚要对“The Who ” 是由两个常见的词组合而成,但是放在一起却有特殊的含义。
4. 单词数的细微差别,在IDF中却非常明显,但是对用户来说并没有太大差别。比如,100万文档一个词在10篇文档中出现和在100篇文档中出现没有太多意义。
5. 用户输入的信息就是就是最好的评价。过度考虑词质量的算法不可避免的会带来大量query的问题,低估词对于用户的重要性。
6. 如果搜索引擎足够快,如果动态提示开启,那么给出那些较差query词的用户会很快的意识到需要移除的词,减弱IDF给出更好的搜索体验。

最后比较重要的是,IDF经常被视为解决“please find me information on baking a turkey”这类query的良药。但是没有人确实这样搜索。但是用户都是都是输入“bake turkey”大多数因为用户比较懒,不会把字打全。

最终,IDF取决于整个的数据库给搜索引擎架构带了诸多问题。比如,索引从索引中产出“dbCount[]”和“N”很容易,但是仅限于存储在单台机器的单个索引。如果是大量跨机器、多索引的分布式的索引,IDF每台机器、每个索引都会有差别,从而在相关性评分时产生问题。简单的说,就是文档X的相关性评分会由于包含文档的索引不同而不同,这就是IDF带来的副作用。

另外,如果不同的分布式索引上文档的域和类型存在明显的倾斜,这种偏差就更严重了。比如,一个历史文章的索引在人物属性描述上于公司的E-mail服务器存在很大差别。在词的统计上差别较大,这样的系统就很难进行相关性的评分。再举个例子,基于时间的索引文件,会因为大家的用词用语的快速飘移而产生一些显著的统计性差异。

这些问题可能会因为跨机器和索引的随机文档而弱化。但是,随机分配文本会导致索引存储大量的、与时间有关的数据。有一些搜索引擎会实现一个两阶段的query:第一阶段,为query中所有的词跨索引收集IDF值;第二阶段,才是实际的搜搜阶段。但是,这明显会让搜索变慢,让整个搜索过程变得复杂。

其他的词权重技术

上述中提到IDF为词加权的目的是基于对Query中“信息价值”的判定。换句话说,就是常用的词不会像那些不常用的词一样影响相关度。但是IDF并不是唯一决定词权重的方法。有很多其他影响词权重的方法。下述列出了一些常见的有趣的技术:
1. 基于词典的方法:在词典中搜索query中的词,用词典数据来决定词的权重你,例如:
- 形容词和副词比名词权重低
- 名词比动词权重高
- 量词(“the”、“an”等)权重低
- 一词多意的词,意思越多的词比意思少的词权重低
2. 停用词:比整个的词典要小,停用词经常在相关度评分计算中就直接简单的去掉了。
3. 越长的词权重越高比如“computability”比“is”、“go”权重高。
4. 词的粘性:通过分析每个词出现的环境,可以计算出词的粘性,或者说在这个词在一个相似的环境中出现了多少。比如,词和其关联词一起出现,那么就更有凝聚力,对于那些无意义的搜索词来说就更有用。
5. 在Query中出现的位置:词在query开始出现,比在末尾出现更加重要。
6. 在query中出现的频率:query越大,比如从文段中复制粘贴进搜索框或者使用完整的文档作为query来做相似搜索的时候,紧接着一个query中词出现的次数可以帮助决定这个词适当的权重。
7. 商业化:一些早期的搜索引擎(有一个Alta Vista)会给商业词汇通过用户的键入而增加权重。它是假设这些具有代表性的名词比那些搜索的词更为重要。那些全部字母大写的也是一样。

商业搜索引擎已经很少使用上述的技术,有用的词汇比那些不怎么有用的权重高。这就是说那些高权词的文档会被从那些一样多但是低权重词中搜索出来。

因此,大量高权词不会提高单个query查询的搜索结果。无论分配什么权重,一个单个的词汇都能以同样的顺序查询出同样的文档。

第一部分到此结束。
第二部分会介绍一些关键的相似度因素:域权重、完整度、接近程度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值