Okapi BM25算法


引言

Okapi BM25,一般簡稱 BM25 算法,在 20 世紀 70 年代到 80 年代,由英國一批信息檢索領域的計算機科學家發明。這里的 BM 是“最佳匹配”(Best Match)的縮寫,Okapi 是第一個使用這種方法的信息獲取系統的名稱。在信息檢索領域,BM25 算法是工程實踐中舉足輕重的重要的 Baseline 算法。迄今為止距 BM25 的提出已經過去三十多年,但是這個算法依然在很多信息檢索的任務中表現優異,是很多工程師首選的算法之一。

今天我們就來談談 BM25 算法,和它后續的比較重要的推廣、變種,以及相關應用實例。


BM25

首先,簡單概括 BM25 究竟作何用途。BM25 算法實質上是一個用於信息檢索中,對給定查詢(query)和若干“相關”文檔(document)進行相關性排序打分的排序函數。嚴格來講,這不是一個打分函數,而是一個家族的一系列評分函數,因為它的提出並非一蹴而就的事情,它的發明經過了若干試驗迭代演進。一般情況下,這個相關性打分是一個類似 TF-IDF 的基於統計計數的無監督學習過程。

BM25 算法其主要思想可簡述如下:對 query 進行特征提取分解,生成若干特征項(詞)\(q_i\);然后對於每個搜索結果 \(D\),計算每個特征 \(q_i\)\(D\) 的相關性得分,最后,將 \(q_i\) 相對於 \(D\) 的相關性得分進行加權求和,從而得到 query 與 \(D\) 的相關性得分。

BM25 算法的一般表示可簡寫為如下形式:

\[score(q, d) = \sum_{i} W_i \cdot R(q_i, d) \]

其中,\(q\) 表示 query, \(q_i\) 表示 \(q\) 分解之后的一個特征項(對中文而言我們可以把對 query 的分詞作為基本特征項),\(d\) 表示一個搜索結果文檔;\(W_i\) 表示特征 \(q_i\) 的權重;\(R(q_i, d)\) 表示特征項 \(q_i\) 與文檔 \(d\) 的相關性得分。

上面這個一般的式子里的 \(W_i\)\(R(q_i, d)\) 的具體計算,都是基於詞袋方法的詞頻計數,它不考慮多個搜索詞在文檔里的關聯性,只考慮它們各自的出現次數。

下面我們來考察以上得分函數的兩個量 \(W_i\)\(R(q_i, d)\) 該如何設計和計算。

首先來看如何定義 \(W_i\),考察一個特征詞的權重,方法比較多,較常用的是 IDF,BM25 選擇的是 Robertson-Sparck Jones IDF:

\[\text{IDF}(q_i) = \log \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5} \]

其中,\(N\) 為文檔集合中的全部文檔數,\(n(q_i)\) 為包含 \(q_i\) 的文檔數。IDF 公式指出,\(q_i\) 出現在越多的文檔中,則 \(q_i\) 的權重則越低。這里個定義有個問題,那就是,如果一個詞在超過半數的文檔里出現,則 IDF 為負值,於是這個詞對 BM25 分數的貢獻是負的。一般不希望這樣的特性,所以當 IDF 為負數時,可將其置為 \(0\),或者一個比較小的正數,或者改用一種平滑過渡到 \(0\) 的函數形式。

我們再來考察特征項 \(q_i\) 與文檔 \(d\) 的相關性得分 \(R(q_i, d)\)

比較朴素的考慮可以用特征詞的文檔詞頻來簡單表示 \(R(q_i, d)\),但這種直觀的想法不可避免導致長文本中,詞的頻度普遍較高,最終相關性得分會過度傾向於長文本,顯然不盡合理;另一方面,不難想象到,某個詞對文檔的貢獻不應該無限度地隨詞頻增長而線性增加,當該詞的詞頻高於某個程度就應該趨於飽和,而不應該讓其得分貢獻無限度增大,從而在整個得分求和式子中占支配地位。

基於以上兩方面的考慮,BM25 采取了以下方式來計算 \(R(q_i, d)\)

\[R(q_i, d) = \frac{(k_1 + 1) \cdot \tilde{tf}(q_i, d)}{k_1 + \tilde{tf}(q_i, d)} \]

\[\tilde{tf}(q_i, d) = \frac{tf(q_i, d)}{1+ b(\frac{L_d}{L_{avg}} - 1)} \]

這里,\(f(q_i, d)\)\(q_i\)\(d\) 中的文檔頻率,\(L_d\) 為文檔長度,\(L_{avg}\) 為文檔集合中的平均長度,\(k_1\)\(b\) 為可自由調節的超參數,一般取值范圍是 \(k_1 \in [1.2,\;2.0]\)\(b = 0.75\)\(R(q_i, d)\) 關於 \(\tilde{tf}(q_i, d)\) 的函數是一個“飽和”的遞增函數,使得文檔詞頻增長對相關性得分增長成為非線性的。

\(\tilde{tf}(q_i, d)\) 的定義中不難看出,超參數 \(k_1\) 起着調節特征詞文本頻率尺度的作用,\(k_1\)\(0\) 意味着算法退化為二元模型(不考慮詞頻),而取較大的值則近似於只用原始的特征詞頻。超參數 \(b\) 一般稱作文本長度的規范化,作用是調整文檔長度對相關性影響的大小。\(b\) 越大,文檔長度的對相關性得分的影響越大,而文檔的相對長度越長,\(\tilde{tf}(q_i, d)\) 值將越大,則相關性得分會越小。這可以理解為,當文檔相對較長時,包含 \(q_i\) 的機會越大,因此,同等 \(tf(q_i, d)\) 的情況下,長文檔與 \(q_i\) 的相關性應該比短文檔與 \(q_i\) 的相關性弱。

至此,綜合上述討論,BM25 的一般形式可完整表示如下:

\[score(q, d) = \sum_i \log \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5} \cdot \frac{(k_1 + 1) \cdot tf(q_i, d)}{k_1(1 - b + b\cdot \frac{L_d}{L_{avg}}) + tf(q_i, d)} \]

此外,若 query 比較長,且某些 term 在 query 中出現頻率較高,我們理應考慮這些 term 的重要性也該相應提高,但同樣應該有類似 term 相對文檔的飽和增長設置來約束 query 中的 term 頻率增長。這里我們將類似的權重策略用於 query 中的特征項,得到:

\[score(q, d) = \sum_i \log \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5} \cdot \frac{(k_1 + 1) \cdot tf(q_i, d)}{k_1(1 - b + b\cdot \frac{L_d}{L_{avg}}) + tf(q_i, d)} \cdot \frac{(k_3 + 1)\cdot tf(q_i, q)}{k_3 + tf(q_i, q)} \]

其中,\(tf(q_i, q)\) 為特征項 \(q_i\) 在查詢 \(q\) 中的頻率,超參數 \(k_3\) 的作用依然是調節特征詞在 query 文本頻率尺度,此時對 query 進行長度規范化卻是不必要的,因為對所有候選檢索結果而言,query 是先有的固定好的。

從以上對 BM25 的完整討論,我們知道了 BM25 其實是一個(准確說,是一系列)經驗公式,這里面的每一個環節都是經過很多研究者的迭代而逐步發現的。很多研究在理論上對 BM25 進行了建模,從“概率相關模型”(Probabilistic Relevance Model)入手,推導出 BM25 其實是對某一類概率相關模型的逼近,對此我還沒有詳盡研究,就無法進一步展開論述了。從結果上看,我們應該明了 BM25 權重計算公式,已經在眾多的數據集和搜索任務上,被極其高頻廣泛和成功地使用。


BM25 的變種和改進

BM25 算法公式,通過使用不同的特征項的分析方法、特征項權重判定方法,以及特征項與文檔的相關度計算方法,都留有較強的靈活性,自然會促使后續的研究者在此基礎上,提出更具個性化的不同的搜索相關性得分算法。

所有 BM25 后續改進中,Lv & Zhai 兩位研究者的工作最為深入和全面。

  1. BM25L

Lv & Zhai 觀察到 BM25 公式中的文本長度規范化項(\(L_d/L_{avg}\))使得模型得分過於偏好長度較短的文檔。他們在“When documents are very long, BM25 fails!”一文中提出了 BM25L 算法,用來彌補 BM25 的這一不足。

首先,BM25L 對特征詞的 IDF 權重項也做了小小改變,讓這一項不會取到負值:

\[\text{IDF}(q_i) = \log \frac{N + 1}{n(q_i) + 0.5} \]

然而,BM25L 更感興趣的是調節 BM25 中 \(\tilde{tf}(q_i, d)\) 這一項,以避免算法對過長文本的懲罰。Lv & Zhai 通過對 \(\tilde{tf}(q_i, d)\) 加上一個正值的常數 \(\delta\) 來實現這一點,只需這一個小操作便可以起到讓 \(\tilde{tf}(q_i, d)\) 與之前比較,向偏好取更小的值轉移(即較大的分母,較長的文本)。

因此,可將 BM25L 算法寫作如下:

\[score(q, d) = \sum_i \log \frac{N + 1}{n(q_i) + 0.5} \cdot \frac{(k_1 + 1) \cdot (\tilde{tf}(q_i, d) + \delta )}{k_1 + \tilde{tf}(q_i, d) + \delta} \]

同 BM25 公式記號保持一致,這里

\[\tilde{tf}(q_i, d) = \frac{tf(q_i, d)}{1+ b(\frac{L_d}{L_{avg}} - 1)} \]

  1. BM25+

Lv & Zhai 進一步發現對過長文本的懲罰不止出現在 BM25 算法中,還出現在許多其他的排序函數中,他們為此提出了一個一般性的解決方案,即為每一個 query 中出現於文本的特征項相關性得分設置一個下界。此時,不論文本多長,某個搜索特征項至少貢獻了一個正的常數相關性得分。他們這個做法略不同於之前的 BM25L,而是在乘 IDF 之前對整個 \(R(q_i, d)\) 加上一個常數 \(\delta\)

\[score(q, d) = \sum_i \log \frac{N + 1}{n(q_i) + 0.5} \cdot \left(\frac{(k_1 + 1) \cdot \tilde{tf}(q_i, d)}{k_1 + \tilde{tf}(q_i, d)} + \delta \right) \]

  1. BM25-adpt

之前的 BM25 算法和相關改進,都忽略了對超參數 \(k_1\) 的考察。Lv & Zhai 在不同的 BM25 相關研究工作中,發現對實際應用而言,全局的 \(k_1\) 參數不及特征項相關的(term-specific)\(k_1\) 參數使用起來高效。他們用隨機理論中的信息增益和散度等概念,實現了 \(k_1\) 去“超參化”的目標,即 \(k_1\) 跟隨 term 不同而變化,可以直接計算獲得,這個算法被稱為 BM25-adpt。BM25-adpt 的具體推導比上面的 BM25 變種算法要稍微復雜一些,要講清楚其中的想法和細節,需要另辟篇幅,只好以后得空的時候補綴上,這里就不能多加介紹了。

除了以上探討的幾種 BM25 的衍化算法,其他重要的變種還有 BM25T、\(\text{TF}_{1\circ\delta\circ p}\times \text{IDF}\)、BM25F 等等,在許多不同的場景都表現除了優於原始 BM25 算法的效果。當然,這些表現的優越性因具體數據集和相應 search 任務場景而異。


小結

這篇文檔相對完整地介紹了信息檢索和推薦系統領域的重要相關性打分算法 BM25,以及相關衍生算法。我們了解到,BM25 算法公式由三個主要的模塊構成,包括詞在文檔中相關度、詞在查詢關鍵字中的相關度以及詞的權重。BM25 即是一個長期積累的經驗公式,又有很深的理論支持,是一個簡潔高效的基礎非監督學習文本排序算法。


參考文獻

[1]. wikipedia: Okapi_BM25, https://en.wikipedia.org/wiki/Okapi_BM25.
[2]. Okapi BM25: a non-binary model, https://nlp.stanford.edu/IR-book/html/htmledition/okapi-bm25-a-non-binary-model-1.html.
[3]. Trotman, A., Puurula, A. Burgess, B., Improvements to BM25 and Language Models Examined.
[4]. Lv, Y., C. Zhai, When documents are very long, BM25 fails! SIGIR 2011, p. 1103-1104.
[5]. Lv, Y., C. Zhai, Lower-bounding term frequency normalization, CIKM 2011, p. 7-16.
[6]. Lv, Y., C. Zhai, Adaptive term frequency normalization for BM25, CIKM 2011, p. 1985-1988.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM