搜索引擎、推荐系统和在线广告
布尔模型
总体上来看,布尔模型的优点是简单易懂,系统实现的成本也较低。不过,它的弱点就是对相关性的刻画不足。相关与否是个模糊的概念,有的文章和查询条件关系密切,非常符合用户的信息需求,而有些则不尽然。仅仅通过“真”和“假”两个值来表示,不仅过于绝对,也没有办法体现其中的区别。
基于排序的布尔模型
tf
了增强布尔模型,需要考虑如何为匹配上的文档来打分。相关性越高的文档获得的分数就越高。第一个最直观的想法就是:每个词在不同文档里的权重是不一样的,可以通过这个来计算得分。这里介绍一下使用最为普遍的tf-idf机制。假设我们有一个文档集合(Collection),c表示整个集合,d表示其中的一篇文章,t表示一个单词。那么这里的tf就表示词频(Term Frequency),即一个词t在文章d中(或是文章的某个字段中)出现的次数。一般的假设是,某个词在文章中的tf越高,表示该词t对于该文档d而言越重要。当然,篇幅更长的文档可能拥有更高的tf值,我们会在后面Lucene的实现中讨论如何计算可以使得tf更合理。
idf
同时,另外一个常用的频率是idf,它表示逆文档频率(Inverse Document Frequency)。首先,df表示文档频率(Document Frequency),即文档集合c中出现某个词t的文档数量。一般的假设是,某个词t在文档集合c中,出现在越多的文档中,那么其重要性就越低,反之则越高。刚开始可能感觉有点困惑,但是仔细想想不难理解。好比“的,你,我,他,是”这种词经常会出现在文档中,但是不代表什么具体的含义。再举个例子,在讨论美食的文档集合中,“美食”可能会出现在上万篇文章中,但它并不能使得某篇文档变得特殊。相反,如果只有3篇文章讨论到水煮鱼,那么这3篇文章和水煮鱼的相关性就远远高于其他文章。“水煮鱼”这个词在文档集合中就应该拥有更高的权重。对此,通常用df的反比例指标idf来表示,基本公式如下:
分别观察下面的3个词。因为不可能列出所有的文章,假设这里的df统计都是正确的:
至此,我们讨论了两种基本的打分机制,使得布尔模型也能获得不同的相关性得分,最后达到排序的功能。这里还可以结合词的权重和字段的权重
向量空间模型
排序布尔模型是基于加权求和的打分机制,下面将介绍一个比排序布尔模型稍微复杂一点的向量空间模型(Vector Space Model,VSM)
在系统实现的时候,不会直接用单词来代表维度,而是用单词的ID,这点会在5.3节中的倒排索引中提及。如此一来,一个文档集合就会转换为一组向量,每个向量代表一篇文档。这种表示忽略了单词在文章中出现的顺序,可以大大简化很多模型中的计算复杂度,同时保证了相当的准确性,我们通常也将这种处理方式称为词包(Bag Of Word)。同理,用户输入的查询也能转换为一组向量,只是与文档向量相比较,查询向量会非常短。最后,相关性问题就转化为计算查询向量和文档向量之间的相似度了。在实际处理中,最常用的相似性度量方式是余弦距离。因为它正好是一个介于0和1之间的数,如果向量一致就是1,如果正交就是0,符合相似度百分比的特性,具体的计算公式如下:
基于线性代数的简单模型,非常容易理解。词组的权重可以不是二元的,例如采用tf-idf这种机制。允许计算文档和索引之间的连续相似程度和基于此的排序,而不限于布尔模型的“真”、“假”两值。允许关键词的部分匹配。当然,基本的向量空间模型也有很多不足:例如对于很长的文档,相似度的得分不会理想;没有考虑到单词所代表的语义,还是限于精准匹配;没有考虑词在文档中出现的顺序等。
语言模型
贝叶斯定理
搜索引擎
电子商务中的商品排序
搜索引擎架构