最近在看搜索引擎相关书籍,在这里整理下几个IR (Information Retrieval) 的相关算法,便于以后详细分析和学习。这篇打算介绍下几个算法的大概,以后的几篇详细介绍每个算法的使用还有中文分词算法等。
什么是Relevance?首先我们知道互联网有数以万计的网页,每张网页都有内容。作为搜索引擎,它的任务就是通过用户输入的关键词,理解用户的意图,找到用户想找的那张网页内容,将用户最可能需要的网页链接排好序呈献给用户,Relevance 表示的就是用户输入的关键词和每张网页的相关程度,这是一项最关乎用户体验的指标,一个搜索引擎的Relevance 做的越好,说明它的搜索结果排序越好,用户往往在第一项或前几项就能找到自己的期望内容,显然用户就更偏向于使用这款搜索引擎。
不仅仅用在搜索结果,通过Relevance 我们还能再搜索结果中插入广告,将广告放在右侧或上面,这就要求广告的内容和搜索关键词相关程度越高越好。需要注意的是搜索引擎厂商不仅仅会考虑每个客户对关键词的出价是多少,还会考虑如果投放这家客户的广告,用户观看、点击这则广告的效果如何,因为首先广告分几个等级,投放后用户观看到了就需要钱,而如果用户点击的话需要更多的钱,用户如果点击这则广告、甚至点击之后出现购买更能使搜索引擎厂商受益。例如一个客户出一万元买了一个关键词“鞋子”,而他这个广告是关于路由器的,而另一个客户只出一千元,但他的广告是关于鞋子的,这个时候用户点击这则广告的概率显然要大的多,而且很可能还通过点击这则广告购买了产品,路由器的基本不会点,搜索引擎反而赚的少了,总体来说这个时候如果出鞋子的广告,不仅用户体验(找到自己想要的)更好,而且搜索引擎赚的更多。
不但如此,我们还可以通过像Google Adsense 的这种平台,发布分享广告,帮助中小网站获利,这个时候更需要Relevance,通过Relevance 算法我们能够找到对应于一张网页的内容最适合这张网页的广告,什么是最适合,和内容相关(当然还要考虑很多其它因素:用户当前通过搜索什么关键词进入到这张网页、用户所在的地区,如果还能结合用户通过社交网络发布的状态、他好友的选择就更好了)!用户看到文章后看到广告能够对广告有印象,甚至去点击。当然也有一些广告无需和内容太相关,例如Nike 的广告,它甚至都不期望用户去点,因为Nike 的广告更多的是希望能对用户产生印象,用户看到Nike 的广告能在下次购买运动品牌的时候更喜欢选择这个品牌。
以上展示了Relevance 的重要性,我们能看到它不仅仅关乎一款搜索引擎的好坏,更关乎这款搜索引擎的盈利,它的重要性可见一斑。
一说到搜索结果排序,可能很多人首先想到的就是PageRank,诚然PageRank 对搜索结果的排序起了非常大的作用,有了Google 这样伟大的公司。根据PageRank,PR值越高代表这张网页质量越高,高质量的网页排在最前面往往符合用户的需求,但是有两点:首先PageRank 是建立在HyperLink 之上的,对于一堆独立出来的,或者说没有HyperLink的文章内容,我们需要其它的算法来判断找出用户最想要的文章;在现代的搜索结果排序中我们不能仅仅依靠PageRank,Relevance 中的很多算法能帮助找出用户之最想要。
基本需求已经确定,看看我们手头有什么数据,从程序输入输出的角度来看我们要做出什么,输入是什么?海量的网页内容,英文的网页包括由单词组成的文章,中文的假设也已经分好词都是由词汇组成的文章,还有就是用户输入的关键词,当然这个关键词也是经过处理好的。输出时什么?尽量多的不遗漏的和关键词相关的网页链接,最重要的是它们和关键词的相关性(前后顺序)。
初始工作,海量的网页内容和用户的输入都有一个初始的修改工作,例如将一些is, are, I 去掉,这些词过于常见,基本每张网页都会出现,不应纳入我们的检索系统。中文的文章比较头痛,需要进行分词操作,因为检索的过程必须是以词汇为单位,例如上段的第一句话“基本需求已经确定”,需要被分解成“基本/需求/已经/确定”,这样当我们搜索“基本”的时候,可能就会出项上述这句话的结果。建立索引,将这些词汇建立一张表,通过这张索引,我们能够很快地找到这篇文章等等。
布尔检索:对用户的输入关键词检索,查看每张网页是否有上述的关键词,如果有那么这篇文章就符合要求,我们就要显示出来,缺点明显,类似于一个Find 工具,区别不出两篇文章都包含用户输入的关键词的差别。
向量空间检索:考虑权值,对于每个关键词,判断这个词在一篇文章中的权值,权值的算法有很多,例如我们可以将权值简单地考虑成出现的次数,还可以考虑一个词的重要性,重要性分数乘以出现的次数,没有这个关键词则权值为0。根据检索的词,判断谁的总分数最高,则它最符合要求。
BM25算法:用公式描述的手段,基于海量的数据,计算每个关键词分数,文档的分数,相应于检索关键词计算它们相关性程度。基本公式
公式1:score(D,Q), 我们所要计算的评分,即为给定搜索关键词Q(Query) 和给定文档D(Document) 的相关程度,分数越高表示相关度越高。f(qi, D):在给定文档D 中,某一个语素qi 出现的频率。n,n 个关键词。|D|:给定文档D 的长度。avgdl,索引中所有文档长度。另外两个参数k1 和b 用来调整精准度,一般情况下我们取k1 = 1.2 ~ 2.0,b = 0.75。
公式2:用来计算公式1中IDF(qi ) 的值。N,索引中文档的总数目。n(qi ),索引中包含语素qi 的文档的总书目。
Query Likelihood Model: 基于一般语言模型的文本检索,一般来说语言模型的研究任务是:已知文本序列中前面(i-1) 个词汇,第i 个词汇为单词w 的可能性有多大。统计语言模型,Ponte 和Croft 最初提出的语言模型检索方法现在经常被称为“查询条件概率模型”。这个模型假设用户头脑中有一个能够满足他的信息需求的理想文档,用户从这个理想文档中抽取词汇作为查询条件,用户所选择的查询条件词汇能够将这个理想文档同文档集合中其他文档区分开来。这样查询条件可以看作是由理想文档生成的能够表征该理想文档的文本序列。由这个假设我们可以看出信息检索系统的任务被转化为判断文档集合中每个文档与理想文档哪个最接近的问题。给定一个文档集合与用户查询条件Q,存在一个未知的相关模型R,相关模型R 为相关文档中出现的词汇赋予一个概率值P(w|R)。这样相关文档被看作是从概率分布P(w|R) 中随机抽样得到的样本。通过词汇的概率分布来分析判断文章的话题,对于话题很重要的词汇通常具有很高的概率值(相对于文章的其他词汇)。
基本可以分为以上几大类,每种类别又分为很多细小的改进等,可以发现,基本上所有都是基于海量的数据进行判断几个因素:关键词的分数、文章关键词的频率、文章质量、语言模型。发展方向肯定是越来越注重文章的内容,希望计算机能够按照人类思考方式来理解文章的内容,通过搜索输入的Query,找到最能符合的文章。
总结来说,做出一款搜索引擎其实不是非常难,但是做一个好的搜索引擎则是一个浩瀚的工程,每个细小的步骤每年都有无数个科学家,无数个会议,无数篇学术报告,paper 来专攻某一领域。像TREC(Text REtrieval Conference) 会议就是文本检索领域人气最旺、最权威的评测会议。相关性的提高有时是枯燥的,几个月的奋斗,提高程度并不明显,用户的体验或许依旧如此,需要考虑的因数不仅仅是关键词与内容相关性,还有地域性,时间等等一系列。涉及的知识领域包括统计、机器学习、数据挖掘等等。
写这篇文章,督促自己深挖掘上述的几个算法和改良的算法,多挖挖相关论文,新年快乐~
References
http://en.wikipedia.org/wiki/Relevance_(information_retrieval)
Search Engines: Information Retrieval in Practice
The PageRank Citation Ranking: Bringing Order to the Web
http://en.wikipedia.org/wiki/Pagerank
http://en.wikipedia.org/wiki/Okapi_BM25
http://summerbell.iteye.com/blog/494227
原创文章,转载请注明: 转载自yongxiu