Lucene 评分,向量 space 模型的精度
Lucene scoring, precision about vector space model
我不确定如何在 lucene 评分中使用矢量 space 模型。
我在这里读到 (https://www.elastic.co/guide/en/elasticsearch/guide/current/practical-scoring-function.html),lucene 将文档评分为每个术语查询的 tf-idf 的总和(如果我们省略协调因子、字段长度和提升)。我不明白矢量 space 模型是如何使用的。
Space 向量模型可用于计算文档的 tf-idf 向量与查询的 tf-idf 向量之间的相似度。
这应该给我们一个查询和文档之间的 CosSimilarity 分数。分数介于 0 和 1 之间,因此不同的请求应该很容易比较。
为什么不使用 lucene 分数?
Lucene 使用您 link 中提到的 'practical score function',它是余弦相似度的近似值 - 扩展以支持 'practical' 功能,例如提升。
如果对查询 q 和文档 d 采用向量 space 余弦相似度公式,则有:
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||
,然而,文档向量的范数在其公式中没有直接等价物。
我不确定如何在 lucene 评分中使用矢量 space 模型。
我在这里读到 (https://www.elastic.co/guide/en/elasticsearch/guide/current/practical-scoring-function.html),lucene 将文档评分为每个术语查询的 tf-idf 的总和(如果我们省略协调因子、字段长度和提升)。我不明白矢量 space 模型是如何使用的。
Space 向量模型可用于计算文档的 tf-idf 向量与查询的 tf-idf 向量之间的相似度。 这应该给我们一个查询和文档之间的 CosSimilarity 分数。分数介于 0 和 1 之间,因此不同的请求应该很容易比较。
为什么不使用 lucene 分数?
Lucene 使用您 link 中提到的 'practical score function',它是余弦相似度的近似值 - 扩展以支持 'practical' 功能,例如提升。
如果对查询 q 和文档 d 采用向量 space 余弦相似度公式,则有:
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||
,然而,文档向量的范数在其公式中没有直接等价物。