如何计算查询和文档之间的相似性?

时间:2011-03-14 09:19:50

标签: java

我有一组文件,我已经计算了两个

  • Term -Frequency score
  • 反向频率分数
  • TF / IDF得分

现在我需要计算特定查询和文档之间的相似性,该文档将产生一个分数,该分数将文档从最高相似度排序到最低相似度朝向查询。

我搜索了很多信息,但我不理解这个公式。

来源:http://en.wikipedia.org/wiki/Vector_space_model

任何人都可以指导我吗?我只需要知道如何从目前的进展出发。

2 个答案:

答案 0 :(得分:3)

Lucene是一个开源库,可以为您完成所有这些工作。

答案 1 :(得分:1)

Pangea已经给出了正确的答案:不要重新发明轮子,特别是像文件相似的复杂轮子。话虽这么说,理解如何计算文档相似性是一个有趣的,值得做的事情,如果你要在该领域工作。我会看看能不能帮忙。

您链接的Vector空间模型的基本假设是每个文档都可以表示为N维空间中的向量,其中每个维度是文档范围中的不同单词。给定单词的文档值是该文档对相关单词的排名。在该模型中,查询可以被认为是非常短的文档,因此也表示为N空间中的向量。余弦度量只是查询向量和给定文档向量之间角度的余弦。

导出N维三角学本身可能是一门数学课程,但如果您理解基本思想,对于实际计算,您可以根据信仰采用维基百科公式(或者如果您愿意,可以查看标准文本) 。计算步骤(矢量点积和规范)也是单独记录的,并不是非常难以实现。我确信还有可用的标准库实现。

余弦背后的逻辑是,随着文档之间的相似性增加,两个向量之间的角度接近零(因此余弦接近1)。您可以手动验证笛卡尔平面上的两个单词。所有的矢量数学确实将相同的概念外推到N维。

我希望这可以解决这个有趣话题的一些困惑。为了实际实施,我再次向您推荐Pangea建议使用Lucene。