2015-06-25 48 views
0

我不知道如何在lucene評分中使用向量空間模型。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

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||) 

可以進一步替換||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||,文檔矢量的規範,但是,並沒有在他們的配方中的條款直接等同。

+0

好吧,有道理,所以'norm(d)'定義爲'√numTerms(d)'? – Quentin

+0

不,這是不一樣的規範 - 我已經清理了我答案中的符號。 || d ||在它們的公式中沒有直接的等價術語,但可能包含在coord(q,d)中。 –