iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
自我挑戰組

NLP 新手的 30 天入門養成計畫系列 第 13

[Day 13] - 原來文章是這麼找到的:BM25 (1)

  • 分享至 

  • xImage
  •  

BM25 可以說是 TF-IDF 的進階版,BM 是 Best Matching 的縮寫,25 則是修改的版本,由於它在檢索上的表現非常出色而被廣泛使用。

這個是它的完整公式,其中 D 代表文章,Q 代表使用者輸入的提問:

https://ithelp.ithome.com.tw/upload/images/20240818/20159088G4bbff0EQi.png

和原始的 TF-IDF 公式相比,BM25 已經有了很大的變化,而且看起來超複雜的,不過修改了這麼多還加了一堆參數肯定是有道理的,我們先從 TF 的部分開始討論吧。

修改 TF 公式

先來看其中一部份:

https://ithelp.ithome.com.tw/upload/images/20240818/20159088I9SJnUtUAU.png

f 就是原本的 tf 值,K 是我們設定的參數,它的作用是決定 TF 的重要程度,我們可以從這張圖來觀察:

https://ithelp.ithome.com.tw/upload/images/20240818/20159088xOjHeb9cgk.png

當 K 很小,曲線很快就平穩下來,表示 TF 被抑制程度較大,即便單詞出現的頻率比較高也沒有用。反之,如果 K 設定的比較大,代表在單詞出現的頻率比較高的時候,TF 仍然有影響力。

接下來,我們把 TF 公式變得更複雜一點:

https://ithelp.ithome.com.tw/upload/images/20240818/20159088nmSYmZqZwd.png

我們加入了兩個變數,|D| 代表這一篇文章的長度,avg(dl) 代表所有文章的平均長度,加入這兩個變數的原因是要抑制文章太長帶來的不公平現象。

舉例來說,如果文章的長度沒有上限的話,我們可以把所有的單詞都放進去或重複無數次,這樣一來,不管使用者輸入什麼關鍵字,因為都包含在裡面,所以提高了找到這篇文章的機會。

而這個漏洞對於搜尋引擎而言是需要避免的問題,不然會搜到一堆篇幅極長又沒什麼內容的文章,但是在加上這兩個變數之後,篇幅越長的文章會被賦予較小的權重,排名就會下降。

最後,我們再加入一個參數:

https://ithelp.ithome.com.tw/upload/images/20240818/201590883IuUemxUAN.png

參數 b 的作用是動態調整 |D| / avgdl 的程度,當 b 等於 0 的時候,不對文章篇幅進行任何限制,當 b 等於 1 的時候,就和剛剛第二步的公式效果一樣了。

我們可以對 TF 的公式來做個整理:

  • 參數 k 的大小決定 TF 的重要程度,當 k 為 0,TF 固定為 1,代表完全不考量文章中單詞出現頻率的影響,k 越大則 TF 的重要程度越大,反之則越小。
  • 參數 b 的大小決定對長文的抑制程度,當 b 為 0,代表不抑制長文的 TF 值,b 越大則抑制長文的程度越大。

IDF 公式修改

我們來看看 IDF 修改後的公式長怎樣:

https://ithelp.ithome.com.tw/upload/images/20240818/20159088CaaCk7fQ5w.png

其中,N 代表所有的文檔總數,n 代表包含該單詞的文檔數。

我在讀這一段的時候並沒有找到明確的解釋說為什麼要這樣修改,不過我照著畫了曲線的對比圖:

https://ithelp.ithome.com.tw/upload/images/20240818/20159088uSj926XKRe.png

觀察這張圖可以發現,對新的公式而言,稀有單詞之間的 IDF 差距變小了。

以上就是對於 BM25 的介紹,不同版本的 Best Matching 公式調整的位置和權重也有所不同,有興趣的可以去查查看。

明天會介紹如何實作 BM25,並且實際用一個例子來試試看檢索起來的效果如何。

推薦文章
[译] Practical BM25 - Part 2: BM25算法和它的变量们 (farer.org)
白話圖解 - 什麼是 BM25 · YWC 科技筆記 (ywctech.net)


上一篇
[Day 12] - 原來文章是這麼找到的:TF-IDF (2)
下一篇
[Day 14] - 原來文章是這麼找到的:BM25 (2)
系列文
NLP 新手的 30 天入門養成計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言