NingG +

AI 系列: TF-IDF 和 BM25 检索模型

基本思路:

1. TF-IDF 是什么

TF-IDF是基于词频统计的检索算法,用于查询到最相关的文档

当前文档的评分

\[score = TF \times IDF\]

一次查询中,包含多个 keyword,则每个 keyword 的 score 相加,得到「当前文档」最终的 score。 score 越高,表示文档越相关。

其得分 score ,本质是「文档之间」单个文档的重要程度(IDF)、单个文档对查询的重要程度(TF),两者叠加(相乘)。

2. BM25 对 TF-IDF 的改进

BM25 是 一种经典的信息检索(IR)算法,属于 概率相关性模型(Probabilistic Relevance Model, PRM) 的一个变体。它的作用是衡量文档查询之间的相关性,经常用在搜索引擎、推荐系统和 RAG(Retrieval Augmented Generation)等场景中。

  • BM:代表 Best Matching,即“最佳匹配”。
  • 25:表示这是 Okapi 系列算法(Okapi BM)中的第 25 个版本。它并不是指数学上的公式编号,而是因为在伦敦城市大学(City University, London)开发 Okapi 信息检索系统时,迭代优化了很多次,最终定稿的版本编号就是 BM25

几个方面:

2.1. BM25 的公式

BM25 本质是对 TF-IDF 的改进,改进点:

  1. TF 饱和:避免高词频文档无限加分(用了一个饱和函数,常见参数 k1≈1.2–2.0)。
  2. 文档长度归一化:避免长文档天然得分更高(参数 b≈0.75)。
  3. 加权公式(简化版):

对于查询 \(Q=\{q_1,q_2,\dots\}\) 与文档 \(D\),BM25 得分通常写成:

\[\text{BM25}(Q,D)=\sum_{t\in Q} \text{IDF}(t)\cdot\frac{TF(t,D)\cdot (k_1+1)}{TF(t,D) + k_1\cdot\big(1-b + b\cdot\frac{|D|}{\text{avgdl}}\big)}\]

其中:

注:有些实现还把查询中词的频率 \(qf\) 加入,乘以一个 \(\frac{(k_3+1)qf}{k_3+qf}\) 项;但在多数实际系统里 \(qf\) 较小或当做 1,所以常被省略。

在线绘图: https://www.geogebra.org/graphing

常用的 IDFRobertson–Sparck Jones)形式之一是:

\[\text{IDF}(t)=\ln\!\left(\frac{N-n(t)+0.5}{n(t)+0.5}+1\right)\]

2.2. 细节理解

每一项的直观解释:

2.3. 深度理解 / 注意点

2.4. 示例(口头演示)

假设一个极小语料库(便于人工计算):

先计算全局量:

  1. N = 3
  2. 文档平均长度: \(\text{avgdl} = \frac{6 + 4 + 5}{3} = \frac{15}{3} = 5.0\)
  3. 统计 document frequency:
    • \(n(\text{cat}) = 2\)(D1、D3 包含 cat)
    • \(n(\text{hat}) = 1\)(仅 D3 包含 hat)

我们采用上面带 +1 的 IDF 形式:

\[\text{IDF}(t)=\ln\!\Big(\frac{N-n(t)+0.5}{n(t)+0.5}+1\Big)\]

参数取常见默认:\(k_1=1.5,\; b=0.75\)。

现在对每个文档、每个 query 词计算 BM25 项(注意:若某词在文档中出现次数为 0,对应项为 0):

先把公式内的分母写成便于计算的形式(当 \(f=1\) 时):

\[\text{denom} = f + k_1\cdot\big(1-b + b\cdot\frac{|D|}{\text{avgdl}}\big)\]

代入 \(k_1=1.5,\; b=0.75,\; \text{avgdl}=5\),整理一下

\[1-b = 0.25,\quad \frac{b}{\text{avgdl}} = \frac{0.75}{5} = 0.15\]

所以

\[\text{denom} = 1 + 1.5\cdot(0.25 + 0.15\cdot |D|)\]

分子(当 \(f=1\))是 \(f\cdot(k_1+1)=1\cdot(1.5+1)=2.5\)。

逐个文档计算(只列出 \(f=1\) 的情况):

最终排序(按 BM25 得分从高到低)

  1. D3 ≈ 1.4508
  2. D1 ≈ 0.4312
  3. D2 = 0

这与直觉一致:D3 同时包含 cathat,得分最高;D1 只含 cat;D2 什么都不含。

2.5. 总结(一句话)

BM25 = IDF(文档重要性) × TF-saturation(词频收益递减) × 长度归一化(避免长文档虚高),是一个稳健、无需训练的关键词检索基线,和 embedding 混用可以兼顾精确匹配语义召回

3. BM25 + Embedding 混合检索

3.1. 为什么 BM25 有效果?

统计角度 解释: 文档重要性 x 词频收益递减(相乘/相加) x 文档长度权重修正

换句话说,BM25 是一个非常稳健文本匹配基线方法,在信息检索领域被验证了几十年。

3.2. 为什么要 BM25 + Embedding 混合检索?

3.3. 典型问题

原文地址:https://ningg.top/ai-series-bm25-and-tf-idf-intro/
微信公众号 ningg, 联系我

同类文章:

微信搜索: 公众号 ningg, 联系我, 交个朋友.

Top