Rag

BM25 演算法深入解析:從 TF-IDF 到現代搜尋引擎的核心技術

本文帶你理解 BM25 的原理、公式推導與實務應用,並說明它在搜尋與 RAG 系統中的關鍵角色。

為什麼需要 BM25?

在資訊檢索(Information Retrieval)的世界中,一個最核心的問題是:如何判斷一篇文件是否與使用者的查詢相關?

最直覺的做法,是計算關鍵字出現的次數,也就是所謂的 TF(Term Frequency)。然而,很快你會發現,單純依靠 TF 並不足夠,因為:

  • 常見詞(例如「的」、「是」)幾乎出現在所有文件中
  • 文件越長,關鍵字出現的機率自然越高

因此,後來出現了 TF-IDF,用來降低常見詞的重要性。但即使如此,TF-IDF 仍然有幾個限制:

  1. 沒有考慮「詞頻的飽和效應」(出現 10 次不一定比 5 次重要兩倍)
  2. 沒有良好處理文件長度差異
  3. 權重計算偏向線性,不夠貼近真實語意相關性

這些問題,正是 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 通常扮演「第一階段檢索器」的角色。

典型流程如下:

  1. 使用 BM25 從文件庫中找出 Top-K 相關文件
  2. 使用 embedding(向量檢索)補充語意搜尋
  3. 使用 reranker(例如 cross-encoder)重新排序
  4. 將結果交給 LLM 生成答案

BM25 的優勢在於:

  • 計算速度快(適合大規模資料)
  • 不需要訓練資料
  • 對關鍵字精準匹配效果很好

但它也有缺點:

  • 無法理解語意(例如同義詞)
  • 對 query wording 很敏感

因此,現代系統通常會採用:

BM25 + Dense Retrieval(混合檢索)

來兼顧精準匹配與語意理解。


與 TF-IDF 的比較

特性TF-IDFBM25
詞頻處理線性飽和函數
文件長度簡單正規化更精細控制
參數調整有 k1, b
表現基本可用更佳

可以簡單記住一句話:

BM25 = 更聰明的 TF-IDF


實務應用場景

BM25 被廣泛應用在:

  • 搜尋引擎(Elasticsearch、OpenSearch)
  • 文件搜尋系統
  • FAQ 檢索
  • RAG 系統中的第一階段 retrieval

如果你正在開發 AI 應用(例如知識庫問答系統),BM25 幾乎是必備工具之一。


總結

BM25 是資訊檢索領域中非常經典且實用的演算法,它透過詞頻飽和與文件長度正規化,大幅改善了 TF-IDF 的缺點,使搜尋結果更符合人類直覺。

在現代 AI 系統中,BM25 不但沒有被取代,反而與向量搜尋結合,成為 Hybrid Search 的核心組件。理解 BM25,不只是理解一個公式,而是理解「搜尋引擎如何判斷相關性」這件事的本質。

Copyright © 2026 StudyWithWoody. All rights reserved.