elasticsearch Lucene评分,关于向量空间模型的精度,elasticsearch,lucene,similarity,elasticsearch,Lucene,Similarity" /> elasticsearch Lucene评分,关于向量空间模型的精度,elasticsearch,lucene,similarity,elasticsearch,Lucene,Similarity" />

elasticsearch Lucene评分,关于向量空间模型的精度

elasticsearch Lucene评分,关于向量空间模型的精度,elasticsearch,lucene,similarity,elasticsearch,Lucene,Similarity,我不知道向量空间模型是如何用于lucene评分的 我在这里读到()lucene将一个文档作为每个术语查询的tf-idf之和进行评分(如果我们忽略协调因子、字段长度和提升)。我不明白向量空间模型是如何使用的 空间向量模型可以用来计算文档的tf-idf向量和查询的tf-idf向量之间的相似性。 这将为我们提供查询和文档之间的相似性分数。分数将在0到1之间,因此不同的请求应该很容易比较 为什么不使用lucene分数?lucene使用链接中提到的“实用分数函数”,它是余弦相似性的近似值-扩展为支持“实用

我不知道向量空间模型是如何用于lucene评分的

我在这里读到()lucene将一个文档作为每个术语查询的tf-idf之和进行评分(如果我们忽略协调因子、字段长度和提升)。我不明白向量空间模型是如何使用的

空间向量模型可以用来计算文档的tf-idf向量和查询的tf-idf向量之间的相似性。 这将为我们提供查询和文档之间的相似性分数。分数将在0到1之间,因此不同的请求应该很容易比较


为什么不使用lucene分数?

lucene使用链接中提到的“实用分数函数”,它是余弦相似性的近似值-扩展为支持“实用”功能,如助推器

如果对查询q和文档d采用向量空间余弦相似性公式,则:

s(q, d) = q * d / (||q|| * ||d||)
考虑到q和d是类似于
[tf(t1)*idf(t1),…]
的向量,并且q向量中的tf(t)为1或0,公式变为:

s(q, d) = ∑( tf(t in d) * idf(t)² )(t in q) / (||q|| * ||d||)
根据
queryNorm=1/√平方重量总和

s(q, d) = queryNorm(q) * ∑( tf(t in d) * idf(t)² )(t in q) / ||d||
这与他们在文件中给出的公式非常接近:

score(q, d) = queryNorm(q) * coord(q,d) * 
              ∑ ( tf(t in d) * idf(t)² * t.getBoost() * norm(t,d)) (t in q)  

| | | |
,文档向量的范数在其公式中没有直接的等价项。

这是有意义的,因此
范数(d)
定义为
√numTerms(d)
?不,这不是同一个标准-我已经清理了我答案中的符号||d | |在它们的公式中没有直接的等价项,但它可能包含在坐标(q,d)中。