相似度从字面上理解就是两个事物的相似程度。在信息检索中,相似度表示的是两个文档之间的相似程度或者查询与文档的相似程度。
首先回想一下检索过程:
1:首先用户输入查询词。
2:搜索引擎根据查询词查找相应的文档。
3:搜索引擎把查询结果以一定的方式显示给用户。
那么一篇文档是否满足用户的查询需求可以用文本与查询的相似程度来衡量。而相似度到最后总能够计算成一个实数,所以可以根据文档与查询的相似度进行排序。与查询相似度较高的文档排在前面,较低的排在后面。相似度的计算方式五花八门。比如上一篇文章中,可以简单的利用tf*idf的累加和代表文档与查询的相似程度。当然这种方法看上去没什么理论深度,所以就不讨论了。
对于一件事,研究者常常尽量使用数学理论去解释它,使它模型化,使它变得有理有据。数学包含的内容博大精深,所以解释的方法也不同。有的研究者试图用这种数学理论去解释,有的研究者试图用那种数学理论解释。有些人解释的很成功,当然有一些则失败了。当一个一流研究者找到一个新的解释方法并建立一个模型后,其他的三流研究者就开始对这个模型修修补补。现在就来说说一流研究者提出的一个检索模型:向量空间模型。该模型被用于文档的分类,该模型最初被用于文档的分类,通过文档与类别的特征之间计算来实现文档正确分类,但是该模型也可以用在信息检索中。
向量空间模型就是把查询和文档想象成N维空间向量,N是词典大小。每一维表示一个查询词。向量在每一个维度上的坐标可以通过计算得到。
设查询向量表示成:
Q=[q1,q2,……,qN];
文档向量表示成:
D=[d1,d2,……,dN];
这样查询Q与文档D都能表示成两个向量。
那么我们如何计算其相似度呢?这里常用的就是余弦相似度:
对于这种模型下的余弦相似度的计算有一个非常形象的解释:把每一篇文档想象成N维空间下的点。一个查询可以想象成从原点打出的一束光刺穿了这个N维空间,离光束近的点与查询相似度高,离光束远的点与查询相似度低。
那么查询向量和文档向量每个维度上的坐标该如何计算呢?可以利用tf*idf的值代表。因为查询词一般很少,所以查询向量中大部分的坐标值都是0,与文档向量相乘时,就会掩盖掉文档向量D的一些坐标,可以利用这一点加快计算速度。而向量的长度这些信息可以预先存储在倒排表中,所以整个过程可以在倒排表中快速求得。相似度求得后,就可以根据这个值进行排序了,生成列表返回给用户。
这就是向量空间模型以及余弦相似度计算,这个模型靠的很成功,以至于我看的每本书都会讲到这个模型。对于向量中坐标应该如何计算,也有相应的人去研究,这里就不赘述了。