BM25
What?
BM25 是一種用於文字檢索的排序演算法。它的全名是 Best Matching 25,是一種基於統計方法的資訊檢索模型,用來評估文件與查詢之間的相關性。BM25 是 TF-IDF 的改進版,專門針對大規模文本資料進行排序,並且能更精確地處理文字匹配問題。
簡單來說,BM25 的核心目的是找出最符合使用者查詢的文件。舉例來說,如果你在搜尋引擎輸入「最佳咖啡豆推薦」,系統會透過 BM25 算法計算所有文件與這個查詢的相關性,並將最相關的結果呈現給你。
Who?
BM25 的主要使用者包括:
- 搜尋引擎工程師:設計和優化搜索排名。
- 資料科學家:分析大量文本資料並建立檢索系統。
- 研究人員:用於資訊檢索領域中的實驗與測試。
- 開發者:在應用程式中實現文字搜索功能。
另外,終端使用者也間接受影響,例如:使用 Google、電子商務網站或企業內部搜尋工具時,他們看到的結果都是基於像 BM25 這類算法所排序出來的。
When?
BM25 通常會在以下情境中被使用:
- 全文檢索系統:例如搜尋引擎(Google、Elasticsearch)。
- 問答系統:例如 ChatGPT 背後整合文獻匹配部分。
- 電子商務平台:例如 Amazon 根據產品描述和關鍵字進行排序。
- 文檔管理系統:例如企業內部文件搜索功能。
特別是在處理龐大的非結構化文本時(如新聞文章、產品評論),BM25 表現尤為突出。
Where?
BM25 一般出現在系統架構中的「資訊檢索」或「Search Engine」模組中。具體而言,它通常是:
- 搜尋管線中的一部分:
- 在文件預處理後生成索引。
- 在查詢階段評估相關度並返回排序結果。
- 整合在開源工具中:
- Elasticsearch 和 Solr 都有內建 BM25 作為預設排序算法。
對於一些需要高效檢索的大型數據庫或內容存儲服務,例如 NoSQL 或分散式存儲架構,它也可能作為底層支持技術之一。
Why?
BM25 存在是為了解決以下問題:
-
關鍵字匹配精度不足: TF-IDF 雖然能計算詞頻,但無法考慮查詢詞與長文檔之間比例失衡的情況。BM25 引入了「Saturation Function」以降低長文檔對排名的不公平影響。
-
動態調整重要性: BM25 設計了兩個超參數 (k1, b) 來調整詞頻和文檔長度的重要性,使其能適應不同領域需求。例如,在短篇文章中會偏重詞頻,而在長篇文章中則平衡長度因素。
-
提高語義相關性排序效果: 比起簡單字面上的匹配,它更注重詞語分布情況以及其相對重要程度,提高了搜索結果的精準度。
How?
🛠️ 建立階段
建立 BM25 模型主要包含以下步驟:
-
資料預處理
- 清理原始文本(去除停用詞、標點符號等)。
- 將文字轉換成 Token(分詞)。
-
生成倒排索引
- 建立每個 Token 與其所在文件位置之間的映射關係(倒排表)。
-
計算 IDF
- 使用公式 $$ IDF = log \frac{N - n + 0.5}{n + 0.5} $$ 計算每個 Token 的逆文檔頻率,其中 $$ N $$ 表示總文檔數量,$$ n $$ 表示包含該 Token 的文檔數量。
-
儲存必要參數:
- 平均文檔長度
- 每篇文檔內各 Token 的出現次數及總字數
🔍 查詢階段
當收到使用者查詢時:
- 將查詢轉換成 Token。
- 從倒排索引中找出包含 Query Token 的候選文件集。
- 根據公式計算每篇候選文件相對於查詢的重要性得分:
$$ Score(D, Q) = \sum_{q \in Q}\frac{TF(q,D) \cdot (k_1 + 1)}{TF(q,D) + k_1 \cdot (1-b+b\frac{|D|}{avgdl})} \cdot IDF(q) $$
其中:
- $$ TF(q,D) $$ 是某 Query Token 在 Document 中出現次數
- $$ |D| $$ 是 Document 長度
- $$ avgdl $$ 是平均 Document 長度
- 超參數 $$ k_1, b $$ 决定 TF 和文档长度影响力度
- 將所有候選文件按得分降序排列並返回前幾項結果給使用者。
補充說明
📌 範例比較
| 演算法 | 排序效果 | 適用場景 |
|---|---|---|
| TF-IDF | 基本匹配 | 文本少且單純 |
| BM25 | 精準匹配 | 大規模文本資料 |
| Word Embeddings | 語義相似 | 處理複雜語意但需大量訓練資源 |
🧠 延伸/常見誤解
-
誤解一:BM25 是深度學習模型? 不!BM25 並非基於深度學習,而是一種傳統、基於機率統計的方法,因此它不需要任何訓練過程即可直接運作。
-
誤解二:超參數要固定不變? 實際上,超參數 (k1, b) 可以根據不同應用場景微調。例如,在短摘要類型文件中可以適當降低 b 值以減弱長度影響力。
-
若想要更進一步提升效果,可以搭配其他技術如 Word Embeddings 或 Transformer-based 模型一起完成高級語意分析及排序。