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

Java 如何计算查询和文档之间的相似性?,java,Java,我有一套文件,我已经计算过了 术语频率评分 逆频率分数 TF/IDF分数 现在,我需要计算一个特定查询和一个文档之间的相似度,该相似度将生成一个分数,该分数将根据查询的相似度从最高到最低对文档进行排序 我已经搜索了很多信息,但我不了解公式 资料来源: 有人能指引我吗?我只需要知道如何从我目前的进展出发 是一个为您提供所有这些功能的开源库。是一个为您提供所有功能的开源库。Pangea已经给出了正确的答案:不要重新发明轮子,尤其是复杂的轮子状文档。也就是说,如果您打算在该领域工作,那么理解文档相

我有一套文件,我已经计算过了

  • 术语频率评分
  • 逆频率分数
  • TF/IDF分数
现在,我需要计算一个特定查询和一个文档之间的相似度,该相似度将生成一个分数,该分数将根据查询的相似度从最高到最低对文档进行排序

我已经搜索了很多信息,但我不了解公式

资料来源:


有人能指引我吗?我只需要知道如何从我目前的进展出发

是一个为您提供所有这些功能的开源库。

是一个为您提供所有功能的开源库。

Pangea已经给出了正确的答案:不要重新发明轮子,尤其是复杂的轮子状文档。也就是说,如果您打算在该领域工作,那么理解文档相似性是如何计算的是一件有趣且值得做的事情。我看看能不能帮点忙

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

推导N维三角学本身可能是一门数学课程,但如果你理解其基本思想,对于实际计算,你可以信守维基百科公式(如果你愿意,也可以查阅标准文本)。计算步骤(矢量点积和范数)也有很好的单独记录,不太难实现。我确信也有标准的库实现可用

余弦背后的逻辑是,随着文档之间的相似性增加,两个向量之间的角度接近零(因此余弦接近1)。你可以用笛卡尔平面上两个单词组成的宇宙来验证这一点。所有的向量数学都是将相同的概念外推到N维


我希望这能澄清关于这个有趣话题的一些困惑。对于实际实现,我再次向您推荐Pangea使用Lucene的建议。

Pangea已经给出了正确的答案:不要重新发明轮子,尤其是复杂的轮子状文档。也就是说,如果您打算在该领域工作,那么理解文档相似性是如何计算的是一件有趣且值得做的事情。我看看能不能帮点忙

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

推导N维三角学本身可能是一门数学课程,但如果你理解其基本思想,对于实际计算,你可以信守维基百科公式(如果你愿意,也可以查阅标准文本)。计算步骤(矢量点积和范数)也有很好的单独记录,不太难实现。我确信也有标准的库实现可用

余弦背后的逻辑是,随着文档之间的相似性增加,两个向量之间的角度接近零(因此余弦接近1)。你可以用笛卡尔平面上两个单词组成的宇宙来验证这一点。所有的向量数学都是将相同的概念外推到N维

我希望这能澄清关于这个有趣话题的一些困惑。对于实际实现,我再次向您推荐Pangea使用Lucene的建议