布尔查询
- 要么返回,要么不返回(不利于一般用户,难书写)
- 常常不返回,或者返回大量结果
排序检索模型
- 返回一个排序的文档结果
- 不用写布尔查询表达式,写人类语言就可以
- 结果集的大小不是问题,我们可以只返回前 k 个结果。
- 前提:排名算法是有效的
Jaccard 系数
测量两个集合之间的重合度,但是没有考虑term frequency(罕见的词比常见的词包含更多信息)
词袋模型
不考虑词项在文档中出现的次序,但是出现的次数很重要。和布尔检索形成鲜明对比
Term frequency
t f t , d tf_{t,d} tft,d 代表 t t t 在 d d d 中出现的次数
- 一个文档中出现该词十次,比一个出现一个的文档更相关
- 但不是十倍相关(相关性不与 t f tf tf成比例增加)
我们经常采用 log \log log 的形式来计算权重
查询-文档对的得分可以用加和的形式来表示。-查询 q q q 中的所有词在文档 d d d 中的权重和
Document frequency
罕见的词比常见的词包含更多的信息,因此我们应该赋予更大的权重( t f tf tf 认为所有的词是一样重要的)
但是这不是相关性的确切指标(可能对于频繁出现的词项,我们想要比较大的权重)
d f t df_t dft :包含这个词的文档的数目(是信息的反向测量)
i d f f idf_f idff:逆文档频率
idf对于单个词项的查询排序没有效果,查询至少包括两个词才有效果
tf-idf
t f tf tf 和 i d f idf idf 的乘积(两方面综合考虑)
查询-文档对的得分
向量空间模型
默认向量的计算使用 t f _ i d f tf\_idf tf_idf
文档表示成向量
一系列的文档在同一向量空间中的表示被称为向量空间模型。
文档向量:每个分量代表词项在文档中的相对重要性(每个词项对应一个坐标轴,文档是空间中的点)
- 维度很大,且大多数都是零,因此是稀疏向量
查询语句表示成向量
思想:
-
将查询语句看作一篇极短的文档,查找与其相似的文档
-
将查询表示成空间中的向量
-
将文档按照其与查询的相似度进行排序
那么,如何进行相似度计算呢?
-
欧式距离?:不行,对与长度不同的向量,欧式距离很大。 q q q 和 d 2 d_2 d2 距离很大尽管他们比较相似
我们将一篇文档复制为原来的两倍,尽管他们表达的内容一样,但他们之间的距离很大,不过角度差却为0
角度 —> cos:
思想:将向量进行归一化处理
算出来的值越大越相关
-
我们可以按照角度从小到大进行排序
-
也就是按照cos值从大到小进行排序
对于已经归一化后的向量,计算其余弦相似度其实就是点乘
算法流程(以查询中的词项为单位,增加文档的得分) w t , q w_{t,q} wt,q 是词项在查询语句中的权重
文档权重和查询权重机制
向量空间中各种相似度评分方法的不同,主要在于向量中的权重计算机制的不同。文档向量和查询向量权重计算方法的组合字母标识为ddd.qqq(SMART记号)。前三位是文档向量的权重计算方法,后三位是查询向量的权重计算方法
三位字母的含义
-
第一位: t f tf tf 因子
-
第二位: d f df df 因此
-
第三位:归一化方法
总结
- 将查询表示成权重向量
- 将文档表示成权重向量
- 计算查询向量与文档向量的余弦相似度
- 通过得分对文档进行排序
- 返回top K 个