搜索排序算法之BM25

        BM25屬於bag-of-word(詞袋)模型, 是用來計算某一個目標文檔(Document)相對於一個查詢關鍵字(Query)的“相關性”(Relevance)的流程。BM25認爲:詞頻和相關性之間的關係是非線性的,具體來說,每一個詞對於文檔相關性的分數不會超過一個特定的閾值,當詞出現的次數達到一個閾值後,其影響不再線性增長,而這個閾值會跟文檔本身有關。達到的效果是,某一個單詞對最後分數的貢獻不會隨着詞頻的增加而無限增加。

算法按照以下3部分來構建

  • 單詞qiq_i與文檔DD之間的相關性
  • 單詞qiq_i與query之間的相關性
  • 每個單詞qiq_i的權重

單詞和目標文檔的相關性
        tf-idf中,單詞和文檔的相關性用“詞頻”表示(關於tftfidfidf的計算可以參考文章文本特徵提取之TF-IDF),BM25對詞頻進行了標準化處理,公式如下:

score(tfqi,D)=tftd(k1+1)tftd+k1(1b+bDavgdl) score(tf_{q_i, D})=\frac{tf_{td}*(k_1+1)}{tf_{td}+k_1*(1-b+b*\frac{|D|}{avgdl})}
其中,qiq_i爲query中的第ii個詞, tf(qi,D)tf(q_i, D)爲目標文檔中qiq_i的詞頻,D|D|是文檔D的長度,avgdlavgdl是語料庫全部文檔的平均長度,k1k_1bb是參數。

單詞和query的相關性

score(tfqi,Q)=(k2+1)tftqk2+tftq score(tf_{q_i, Q}) = \frac{(k_2+1)*tf_{tq}}{k_2+tf_{tq}}
其中,tftqtf_{tq}是詞項t在查詢q中的權重,從上面的公式中可以看到,當詞頻無限增大時,score(tfqi,D)=k2+1score(tf_{q_i, D})=k_2+1

單詞權重
        單詞的權重最簡單的就是用idf值或是其變種,我們用idf(qi)idf(q_i)表示單詞qiq_i的權重。

合起來公式就是

score(D,Q)=i=1nidf(qi)tftd(k1+1)tftd+k1(1b+bDavgdl)(k2+1)tftqk2+tftq score(D,Q)=\sum_{i=1}^nidf(q_i)*\frac{tf_{td}*(k_1+1)}{tf_{td}+k_1*(1-b+b*\frac{|D|}{avgdl})} * \frac{(k_2+1)*tf_{tq}}{k_2+tf_{tq}}

BM25 在 TF-IDF 的基礎上增加了兩個可調參數: k1k_1bb,分別代表 “詞語頻率飽和度(term frequency saturation)” 和 “字段長度規約(Field-length normalization)

  • 詞語頻率飽和度(term frequency saturation): k1k_1參數的值一般介於 1.2 到 2.0 之間。數值越低則飽和的過程越快速。如果 k1k_1 取 0,則對應 BIM 模型,document term frequency完全沒有影響,如果k1k_1 取較大值,對應使用原始的 term frequency
  • 字段長度歸約(Field-length normalization): 將文檔的長度歸約化到全部文檔的平均長度上。b=1 表示基於文檔長度對 term frequency 進行完全的縮放,b=0 表示歸一化時不考慮文檔長度因素,長文檔更有可能排在前面如果查詢很長,
  • 對於 query term 也可以採用類似的權重計算方法。對查詢長度沒有進行歸一化(相當於b=0)。k2=0k_2=0 表示 term frequency in query 並沒有影響,(apple apple pie) 和 (apple pie) 完全一樣。

參考文檔

可插拔的相似度計算
經典檢索算法
搜索中的權重度量利器: TF-IDF和BM25

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章