solr是否使用余弦相似度?

问题描述 投票:4回答:3

我已经写了一个小型搜索引擎作为我的每周项目。它基于查询向量和文档向量之间的余弦相似度。向量是使用令牌的tf-idf疮来计算的。我已经了解了Apache Solr,这是一个全文本搜索引擎。我的问题是,在排名搜索结果时,solr是否在内部使用余弦相似度?

solr lucene search-engine
3个回答
5
投票

是的,Solr(在Lucene之上运行)确实使用余弦相似度。从Lucene文档中:

查询d的文档d的VSM分数是加权查询向量V(q)和V(d)

余弦相似度(q,d)= V(q)·V(d)/ | V(q)| | V(d)|

https://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html


7
投票

没有Solr使用相似来进行余弦相似度,但并不完全相同-有一些关键差异。

[如果您访问相同的链接(https://lucene.apache.org/core/4_10_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html)并向下滚动,您会看到“ Lucene概念评分公式”和“ Lucene实用评分公式”,其中提供了更多详细信息。

忽略任何索引/查询时间提升,以下是一些主要区别:

1。不同的文档归一化因子

而不是通过其tf-idf向量的欧几里得范数对每个文档进行归一化,而是使用“ doc-len-norm”。对于默认的相似性度量(DefaultSimilairty),这仅仅是1 / sqrt(文档中的术语数),基本上等于1 / sqrt(sum(tf))-即,其中tf是文档中术语计数的总和-不会像欧几里得范数那样平方,并且每个术语的idf都被忽略。此外,此值舍入为一个字节以节省空间。与余弦相似度所使用的归一化因子相比,该值通常会得出不同的值。

2。额外的“协调”提升

还有一个额外的价值乘以等于:文档中匹配的查询字词数量/查询中的字词总数。

这为匹配更多查询词的字段(文档)提供了额外的提升,并且可能具有可疑的价值。这实际上是将tf-idf向量得分与另一个内部乘积相乘-这些向量的内部乘积转换为布尔向量(如果没有给定项则为0,如果是则为1)与仅由其欧几里得归一化的查询向量规范。


0
投票

如果您正在Solr中寻找实际的矢量相似性,则有两种方法:1)使用定界的有效载荷。已经有一些插件可以实现此功能,例如https://github.com/moshebla/solr-vector-scoringhttps://github.com/saaay71/solr-vector-scoring

2)使用流式表达式,它是开箱即用的:https://lucene.apache.org/solr/guide/8_5/vector-math.html

后者较慢,但更灵活。

© www.soinside.com 2019 - 2024. All rights reserved.