BM25 演算法深入解析:從 TF-IDF 到現代搜尋引擎的核心技術
為什麼需要 BM25?
在資訊檢索(Information Retrieval)的世界中,一個最核心的問題是:如何判斷一篇文件是否與使用者的查詢相關?
最直覺的做法,是計算關鍵字出現的次數,也就是所謂的 TF(Term Frequency)。然而,很快你會發現,單純依靠 TF 並不足夠,因為:
- 常見詞(例如「的」、「是」)幾乎出現在所有文件中
- 文件越長,關鍵字出現的機率自然越高
因此,後來出現了 TF-IDF,用來降低常見詞的重要性。但即使如此,TF-IDF 仍然有幾個限制:
- 沒有考慮「詞頻的飽和效應」(出現 10 次不一定比 5 次重要兩倍)
- 沒有良好處理文件長度差異
- 權重計算偏向線性,不夠貼近真實語意相關性
這些問題,正是 BM25 被提出的背景。
BM25 是什麼?
BM25(Best Matching 25)是一種基於機率模型(Probabilistic Retrieval Model)的排序演算法,被廣泛應用於搜尋引擎(如 Elasticsearch、Lucene)中。
它可以被視為 TF-IDF 的進化版本,但做了兩個關鍵改進:
- 引入詞頻飽和(TF Saturation)
- 加入文件長度正規化(Length Normalization)
BM25 的核心目標是:更準確地衡量「文件與查詢之間的相關性」。
BM25 的核心公式
BM25 的基本公式如下:
score(D, Q) = Σ IDF(qi) * ((f(qi, D) * (k1 + 1)) / (f(qi, D) + k1 * (1 - b + b * |D| / avgdl)))
讓我們拆解這個公式中每個元素的意義。
每個參數在做什麼?
1. f(qi, D):詞頻(Term Frequency)
代表查詢詞 qi 在文件 D 中出現的次數。
但與 TF-IDF 不同的是,BM25 不直接使用這個值,而是透過下面的公式做轉換:
(f * (k1 + 1)) / (f + k1)
這代表一種「飽和效果」:
- 當 f 很小時,增加 f 會明顯提升分數
- 當 f 很大時,分數提升趨緩
這更符合真實情況:一個詞出現 3 次和 10 次,差異沒有那麼大。
2. IDF(qi):逆文件頻率
BM25 使用的 IDF 公式通常為:
IDF(qi) = log((N - ni + 0.5) / (ni + 0.5))
其中:
N:總文件數ni:包含詞qi的文件數
這個設計可以避免:
- 詞出現在所有文件時(ni ≈ N)導致權重趨近於 0
- 極端值帶來的不穩定性
3. |D| / avgdl:文件長度正規化
這一項是 BM25 非常重要的設計。
|D|:文件長度avgdl:所有文件的平均長度
如果一篇文件很長,BM25 會適度「懲罰」它,避免因為篇幅長而自然包含更多關鍵字。
4. k1 與 b:調整參數
BM25 有兩個重要超參數:
k1(通常在 1.2 ~ 2.0):控制 TF 的影響程度b(通常為 0.75):控制文件長度正規化的強度
簡單理解:
k1越大 → 詞頻影響越大b越大 → 文件長度影響越明顯
用一個例子直覺理解 BM25
假設使用者搜尋:
machine learning
現在有兩篇文件:
- 文件 A:短文章,出現 2 次
- 文件 B:長文章,出現 5 次
TF-IDF 可能會偏向文件 B,但 BM25 會考慮:
- 文件 B 是否只是因為「很長」才出現較多次?
- 詞頻是否已經達到飽和?
最終結果可能是:文件 A 的排名反而更高。
這就是 BM25 比 TF-IDF 更貼近人類直覺的地方。
BM25 在 RAG 系統中的角色
在現代的 RAG(Retrieval-Augmented Generation)系統中,BM25 通常扮演「第一階段檢索器」的角色。
典型流程如下:
- 使用 BM25 從文件庫中找出 Top-K 相關文件
- 使用 embedding(向量檢索)補充語意搜尋
- 使用 reranker(例如 cross-encoder)重新排序
- 將結果交給 LLM 生成答案
BM25 的優勢在於:
- 計算速度快(適合大規模資料)
- 不需要訓練資料
- 對關鍵字精準匹配效果很好
但它也有缺點:
- 無法理解語意(例如同義詞)
- 對 query wording 很敏感
因此,現代系統通常會採用:
BM25 + Dense Retrieval(混合檢索)
來兼顧精準匹配與語意理解。
與 TF-IDF 的比較
| 特性 | TF-IDF | BM25 |
|---|---|---|
| 詞頻處理 | 線性 | 飽和函數 |
| 文件長度 | 簡單正規化 | 更精細控制 |
| 參數調整 | 無 | 有 k1, b |
| 表現 | 基本可用 | 更佳 |
可以簡單記住一句話:
BM25 = 更聰明的 TF-IDF
實務應用場景
BM25 被廣泛應用在:
- 搜尋引擎(Elasticsearch、OpenSearch)
- 文件搜尋系統
- FAQ 檢索
- RAG 系統中的第一階段 retrieval
如果你正在開發 AI 應用(例如知識庫問答系統),BM25 幾乎是必備工具之一。
總結
BM25 是資訊檢索領域中非常經典且實用的演算法,它透過詞頻飽和與文件長度正規化,大幅改善了 TF-IDF 的缺點,使搜尋結果更符合人類直覺。
在現代 AI 系統中,BM25 不但沒有被取代,反而與向量搜尋結合,成為 Hybrid Search 的核心組件。理解 BM25,不只是理解一個公式,而是理解「搜尋引擎如何判斷相關性」這件事的本質。