Lucene得分,关于向量空间模型的精确度

时间:2015-06-25 09:24:52

标签: elasticsearch lucene similarity

我不确定如何在lucene得分中使用向量空间模型。

我在这里阅读(https://www.elastic.co/guide/en/elasticsearch/guide/current/practical-scoring-function.html)lucene将文档评分为每个术语查询的tf-idf的总和(如果我们省略了协调因子,字段长度和提升)。我不明白如何使用向量空间模型。

空间矢量模型可用于计算文档的tf-idf向量与查询的tf-idf向量之间的相似性。 这应该为我们提供查询和文档之间的CosSimilarity得分。得分将介于0和1之间,因此不同的请求应该易于比较。

为什么不使用lucene得分?

1 个答案:

答案 0 :(得分:1)

Lucene使用'实用分数功能'在您的链接中提到,这是余弦相似度的近似值 - 扩展到支持“实用”和#39;增强功能等。

如果你为查询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||)

根据||q||的定义1 / queryNorm(q),您可以进一步将queryNorm = 1 / √sumOfSquaredWeights替换为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||
然而,

references.txt,文档向量的规范在其公式方面没有直接的等价物。