白話圖解 - 什麼是 BM25
目錄
BM25 是用統計方式,預測「文章與關鍵字的相關度」,常被搜尋引擎如 Elasticsearch 使用 – 聽起來很像 上一篇的 TF-IDF?
那是因為,BM25 就是一種 TF-IDF
只不過 BM25 的 TF 項與 IDF 項比較細膩,而且有「特性參數」可調整:小美用的 BM25 跟小明用的 BM25 可以不一樣!
本篇分兩大環節
- 先假設小美用了
k1=1, b=1
的 BM25 公式,來說明 BM25 的本質,跟最基礎的 TF-IDF 有什麼不同 - 再來探討
k1, b
對於 BM25 的意義是什麼
IDF 項 #
BM25 使用的 IDF 公式跟基礎的幾乎一樣。而且跟 k1, b 無關,不能調整
如下圖,BM25 的 IDF 稍稍平滑,極罕見詞之間的差異更小(直覺解釋:因為送了 0.5 次的出現,變得稍微不罕見)
特殊參數之下的 TF 項 #
假設 k1 = 1 , b = 1 的時候,BM25 的 TF 項公式為
看公式太累的話,探討這三個情境就好
- 如果兩篇同樣長度的文章,一篇出現關鍵字的「次數」是另一篇的兩倍,會怎樣?
- 如果兩篇文章,關鍵字出現次數一樣,但「文長」一篇是另一篇的兩倍,會怎樣?
- 如果關鍵字出現「頻率」一樣,但文長一篇是另一篇的兩倍,會怎樣?
次數兩倍,TF 不到兩倍 #
- 關鍵字出現兩倍,TF 雖然會變大,卻不會到兩倍大。也就是 TF 有邊際效應,會「飽和」
- 在 k1 = 1 時,TF 不會比 2 還大
也就是關鍵字出現越多次,雖然相關分數會變高,但是會越來越無感
文越長,TF 越小 #
假設因為文章長度,導致關鍵字出現頻率折半,TF 會變小,但不會到折半這麼小
頻率一樣,TF 一樣 #
當 b = 1 時,如果每篇文章出現關鍵字的「頻率」一樣,例如長 100 的文章出現一次,長 200 的文章出現兩次…
TF 不變!當 b=1 時,只要頻率一樣, TF 跟文長無關。也就是 b=1 時,BM25 也遵從著頻率,也就是資訊「密度」
前面一段是 k1, b 兩者都設成 1 的情況。不過 k1 跟 b 是可以自己調整的。BM25 完整的公式為
k1 對於 BM25 的影響 #
『兩篇同樣長度,一篇出現關鍵字的「次數」是另一篇的兩倍』
k1 越大,越慢出現「邊際效應」 – 也就是 TF 越容易被關鍵字出現次數影響(但還是會越來越無感)
『兩篇文章,關鍵字出現次數一樣,但「文長」一篇是另一篇的兩倍』
跟上面一樣,當 k1 越大,TF 受關鍵字出現頻率的影響越大
所以簡單說,k1 就是控制「關鍵字次數」或「關鍵字頻率」給 BM25 分數的影響力
b 對於 BM25 的影響 #
先直接說結論:b 越小,「文章長度」影響 BM25 分數的「傾向」就越小
『兩篇文章,關鍵字出現次數一樣,但「文長」一篇是另一篇的兩倍』
見下圖,文章越長,密度、也就是頻率越低,然而 b 較小時 TF 變小的情況比較不明顯
『兩篇同樣長度,一篇出現關鍵字的「次數」是另一篇的兩倍』
見下圖:比較長的文章,頻率容易比較低,TF 容易比較小。但 b 比較小的時候劣勢沒那麼明顯,所以紅線比綠線高
反之,較短的文章也是同樣道理,只不過是反過來,b 較小的時候優勢不明顯,所以橘線比藍線低
『關鍵字出現「頻率」一樣,但文長一篇是另一篇的兩倍』
「頻率」是 出現次數 除以 文章長度,可視作兩者的角力
然而 b 比較小時,因為「文長」影響力變小,所以 TF 不再尊重頻率,而是尊重次數
當 b < 1
,就算資訊密度一樣,但出現次數越多的話 TF 越高
文章特性與 k1, b 的選擇 #
- k1 控制關鍵字次數本身的影響力:k1 越大,BM25 分數越不會有邊際效應(越容易因出現次數增大)
- b 控制文章長短本身的影響力:b 越小,文章長度越不會影響 BM25 分數
改善搜尋品質時,雖然在調整 k1 跟 b 之前有很多事要做 ,但 k1 與 b 也確實會影響使用 BM25 分數的排名方式。
以三種文章為例子:書本章節、網頁、與產品標題
- 書本內容通常不會特別 spam 某個不相關的關鍵字
- 裡面內容出現多次的詞很可能是主題,所以 k1 或許能試大一點的值,就算關鍵字出現多次仍有一定的影響,不會馬上飽和無感
- 網頁由普羅大眾所撰寫
- 有人可能濫用關鍵字,把不相關但很流行的詞重複寫多次,惡意增加 TF。雖然 anti-spam 是完全另一個領域,或許也能同時考慮比較小的 k1 ,讓多次出現的邊際效益降低
- 產品標題,裡面的字通常代表「屬性特質」,跟密度無關
- 兩個產品「iPhone 15」與「特價黑色 iPhone 15 256G 隔日到貨」都是 iphone,不應該光憑因為標題比較長,導致頻率比較低,進而讓分數比較低 – 文長不是重點,所以可考慮用比較小的 b
當然,BM25 是非常基本、用途有限的統計量,而光靠 k1, b 並不能解決所有問題
現在你知道了,BM25 「只是」一種 TF-IDF ,只不過對於關鍵字頻率有邊際效應,而且有參數可調
- k1 控制關鍵字次數本身的影響力(飽和難易度)
- b 控制文章長短本身的影響力
然而 TF-IDF 的缺點(tokenization, proximity, 語意, …),BM25 也都有。只不過 BM25 被大家研究與運用已久,大家熟悉度比較高。
BM25 只是眾多「搜尋相關度」的其中一個 signal 。就算用在傳統搜尋,但現代的 RAG 也可能融合 embedding / kNN 與傳統搜尋手法,也就是 hybrid search – 之後有空的話會簡單寫一下 hybrid search 的小知識