NingG +

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

基本思路:

1. TF-IDF 是什么

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

当前文档的评分: \(score = TF \times IDF\)

2. BM25 对 TF-IDF 的改进

几个方面:

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,所以常被省略。

常用的 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 有效果?

统计角度 解释:

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

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

3.3. 典型问题:

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

同类文章:

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

Top