当前位置: 首页 > 知识库问答 >
问题:

与Lucene的余弦相似性仅适用于匹配的文档

马冯浩
2023-03-14

Lucene是一个反向索引系统,据我所知,它的强大之处在于它只会将查询与至少匹配令牌的文档进行比较。

与将查询与每个文档进行比较的简单方法相比(即使是那些没有提到查询中存在的任何标记的文档),这是一个很大的好处。

例如,如果我有索引文档:

D1: "Hello world said the guy"
D2: "Hello, what a beautiful world"
D3: "random text"

在我看来,搜索查询:“你好世界”,只会查看索引文档D1和D2,并跳过D3,这节省了时间。

这样做正确吗?

现在,我试图计算文档之间的余弦相似度。输入查询将是一个文档,输出应该是余弦分数。这是一个介于0和1之间的数字。

我已经读过一些计算余弦相似性的方法,但它们都是通过比较每个文档的术语向量来实现的。例如,这篇博客提到了以下内容:

如果确实需要文档之间的余弦相似性,则必须为源字段启用术语向量,并使用它们来计算角度。问题是,这不能很好地缩放,您需要使用几乎所有其他文档计算角度。

所以答案似乎是一样的:

有没有办法只计算与查询匹配的文档的余弦相似性,并将其作为文档的分数返回?

作为旁注,我确实读到了TFIDF的相似性很接近,我相信VSM部分正是我所需要的,然而这部分似乎已经消失在Lucene实用评分函数中。我不确定如何才能“转换”这个相似性类,最终只得到纯余弦相似性。

下面是我问题的总结:

>

  • 我对反向索引如何节省时间的看法正确吗?

    有没有办法只计算实际匹配其中一个标记的文档的余弦相似性,而不是计算所有文档的余弦相似性?

  • 共有1个答案

    冀永寿
    2023-03-14

    这在很大程度上取决于您如何制定查询。如果您制定了布尔查询,您可以指定查询的哪些术语必须在返回的文档中。这是使用布尔子句完成的。发生。必须。

    您可以通过扩展TFIDF相似性来编写自己的相似性,但是您可能注意到Lucene实用评分是基于余弦相似性的。在这个公式中,queryNorm(q)和范数(t,d)构成余弦相似性的分母,求和是查询向量和文档向量的点积。

    提示:您可以形成一个示例查询,并使用explain()查看评分的详细信息。

     类似资料:
    • 本文向大家介绍TF-IDF与余弦相似性的应用(二) 找出相似文章,包括了TF-IDF与余弦相似性的应用(二) 找出相似文章的使用技巧和注意事项,需要的朋友参考一下 上一次,我用TF-IDF算法自动提取关键词。 今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供多条相似的新闻。 为了找出相似的文章,需要用

    • 问题内容: 我计算了两个文档的tf / idf值。以下是tf / idf值: 这些文件就像: 如何使用这些值来计算余弦相似度? 我知道我应该计算点积,然后找到距离并除以点积。如何使用我的值来计算? 还有一个问题: 两个文档的字数相同是否重要? 问题答案: a * b是点积 一些细节: 是。在某种程度上,a和b必须具有相同的长度。但是a和b通常具有稀疏表示,您只需要存储非零条目,就可以更快地计算范数

    • 我试图用余弦相似性来找出两个文本文件的相似性。当我提供文本时,我可以发现这一点。但我想在阅读完电脑中的文本文件后得到结果。

    • 我有一个PySpark数据帧,df1,看起来像: 我有第二个PySpark数据帧,df2 我想得到两个数据帧的余弦相似性。并有类似的东西

    • 问题内容: 假设您在数据库中按以下方式构造了一个表: 为了清楚起见,应输出: 请注意,由于向量存储在数据库中,因此我们仅需要存储非零条目。在此示例中,我们只有两个向量$ v_ {99} =(4,3,4,0)$和$ v_ {1234} =(0,5,2,3)$都在$ \ mathbb {R}中^ 4 $。 这些向量的余弦相似度应为$ \ displaystyle \ frac {23} {\ sqrt

    • 本文向大家介绍TF-IDF与余弦相似性的应用(一) 自动提取关键词,包括了TF-IDF与余弦相似性的应用(一) 自动提取关键词的使用技巧和注意事项,需要的朋友参考一下 TF-IDF与余弦相似性的应用(一):自动提取关键词 这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加