词项权重计算
词项频率(term frequency)
在布尔检索模型中,只考虑了词项在文档中出现与否,给定一个布尔查询,一篇文档要么满足查询要求要么不满足,返回的文档没有排序。对于Web搜索引擎,用户往往需要浏览非常多的网页才能找到需要的信息。如何才能对检索的文档进行评分和排序呢,一个合理的想法是,如果一篇文档包含的查询词的数目越多,那么这篇文档与查询相关的可能性就越高,就意味着更可能是用户所需要的文档。[注:如果只是考虑词频,那么长文本会更可能包含更多的查询词而获得评分优势,我们需要消除文档长度对评分的影响,这也是向量空间模型采用余弦相似度的原因,从而实现文档长度归一化]在向量空间模型中,我们先基于每个查询词项与文档的匹配情况对文档打分,然后对所有查询词项在文档中的得分求和,作为文档对于这个查询的总得分,得分高的文档在返回结果中排在前面。
那么该如何根据相应的查询给文档打分呢?在向量空间模型中,我们根据文档的词项频率(term frequency)给文档打分。一个简单的做法是,对于一个查询(包含一个或者多个查询词),我们将查询词t在文档中出现的次数作为t在文档中的权重,对所有查询词在文档中的权重求和作为文档对于该查询的得分。也就是说,将词项频率(term frequency)作为权重。我们将词项频率(term frequency, 简写tf)记为
tft,d
,意为词项t在文档d中出现的次数。
这种忽略词项在文档中的次序关系,将文档看作词项的集合的模型,称为词袋模型(bag of words model)。
逆文档频率(inverse document frequency)
使用词项频率作为权重有一个严重缺陷,它无区别地对每一个词项计算权重,而事实上,文档中两个词频相同的词极有可能具有不一样的重要性(亦即权重)。例如,在一个人的日记文档集查询“我 AND 小猫”,像上面所说得简单地通过词频来计算权重的话,统计每一篇日记中“我”出现的频率( tf我 )和“小猫”出现的频率( tf小猫 ),然后把这两个权重相加得到每一篇日记的权重得分,得分越高的日记被认为与查询越有关联。然而,不可忽略的事实是,大量的日记中都会出现“我”,而“小猫”则比较少见。这说明“小猫”会比“我”更有区分度。如果一篇日记中出现了三次“我”的话,即使这篇日记一个“小猫”都没有,也会因为“我”的词频得分高而排在出现了一次“我”和一次“小猫”的日记前面。由于词项“我”在大量文档中出现,会导致最终搜索返回的文档中,排在前面的都是仅仅包含多个“我”的日记文档,而包含“小猫”的文档则淹没在这数不清的“我”的文档中了。
为此,需要一种机制来降低这些在大量文档中都出现的词项在查询得分计算中的重要性。也就是说,文档频率(document frequency, 出现词项t的文档数目)较高的词项(导致区分度较低)给予较低的权重,反之,文档集频率较低的词项(由于区分度较高)给予较高的权重。那么一个合理的词项t的权重公式为
Ndft
,其中
N
为所有文档的数量,
tf-idf权重计算
结合tf(词项频率)和idf(逆文档频率),文档d中词项t的权重得分为:
那么,对于查询q,文档d的得分为每个查询词( t∈q )在文档中的得分之和:
向量空间模型
把文档映射为向量
我们可以把文档看作一个向量(vector),假设这个向量有
M
维,把它表示为
假设文档d对应的向量用
V⃗ (d)
表示,每个分量对应一个词项的权重得分(如tf-idf)。为了修正文档长度给相似度计算带来的影响,采用余弦相似度来评估文档
d1
和
d2
的相似度:
通过余弦相似度,我们可以判断两篇文档的近似程度了,搜索引擎可以根据这个给出与用户当前浏览的文档相似的文档,这个在论文或专利搜索系统中特别常见。
我们分析余弦相似度的计算公式:
分母 |V⃗ (d1)| 和 |V⃗ (d2)| 的效果实际上是对向量 V⃗ (d1) 和 V⃗ (d2) 的长度进行归一化,从而得到两个文档向量对应的单位向量: v⃗ (d1)=V⃗ (d1)|V⃗ (d1)| , v⃗ (d2)=V⃗ (d2)|V⃗ (d2)| 。用单位向量的形式,我们把上面计算余弦相似度的公式重写为:
查询向量
用户输入的查询也可以表示为向量。查询向量对应的查询词
qi
分量的计算过程如下:
考虑查询q=“cat dog”。我们将查询语句也看作一篇文档,长度为2,只有两个词(cat和dog,记为
q1
和
q2
),分别都只出现一次,那么可以查询向量计算公式将该查询转化为单位向量。因为词典中其他词都没有在查询中出现,tf为0,对公式计算没有影响,因此不必考虑未出现在查询中的词项。
查询q与文档d的余弦相似度计算:
对于给定的查询,通过计算查询向量与文档向量的余弦相似度来对所有文档进行相似度打分、排名,进而从结果中选择排名靠前的一些文档展示给用户。