📘 教案 27:BM25(Okapi BM25 · 排序模型)
一、问题模型(从倒排索引自然过渡)
在倒排索引中,我们已经能做到:
找到"包含查询词的文档集合"
但问题是:
这些文档如何排序?
更严格表达
给定:
- 查询 ( q = {t_1, t_2, ..., t_m} )
- 文档 ( d )
定义一个评分函数:
score(d,q)\]\[ score(d, q) \]\[score(d,q)
目标:
按照相关性对文档排序
二、基础模型回顾:TF-IDF(不足)
score(d,q)=∑t∈qTF(t,d)⋅IDF(t)\]\[ score(d, q) = \\sum_{t \\in q} TF(t,d) \\cdot IDF(t) \]\[score(d,q)=∑t∈qTF(t,d)⋅IDF(t)
问题
1️⃣ TF 线性增长不合理
text
词出现 100 次 ≠ 比出现 10 次重要 10 倍
2️⃣ 文档长度影响严重
text
长文档更容易出现更多词 → 被高估
3️⃣ 没有"饱和效应"
三、BM25 的核心思想
BM25 在 TF-IDF 基础上引入两个关键改进:
1️⃣ TF 饱和(Term Frequency Saturation)
TF 不再线性增长,而是逐渐趋于饱和\]\[ TF \\text{ 不再线性增长,而是逐渐趋于饱和} \]\[TF 不再线性增长,而是逐渐趋于饱和
2️⃣ 文档长度归一化(Length Normalization)
防止长文档天然占优势
四、BM25 完整公式
score(d,q)=∑t∈qIDF(t)⋅TF(t,d)⋅(k1+1)TF(t,d)+k1⋅(1−b+b⋅∣d∣avgdl)\]\[ score(d, q) = \\sum_{t \\in q} IDF(t) \\cdot \\frac{TF(t,d) \\cdot (k_1 + 1)} {TF(t,d) + k_1 \\cdot (1 - b + b \\cdot \\frac{\|d\|}{avgdl})} \]\[score(d,q)=∑t∈qIDF(t)⋅TF(t,d)+k1⋅(1−b+b⋅avgdl∣d∣)TF(t,d)⋅(k1+1)
五、逐项解释(必须掌握)
1️⃣ TF(t,d)
词 (t) 在文档 (d) 中出现次数
2️⃣ IDF(t)
IDF(t)=logN−df+0.5df+0.5\]\[ IDF(t) = \\log \\frac{N - df + 0.5}{df + 0.5} \]\[IDF(t)=logdf+0.5N−df+0.5
含义:
- 出现越少 → 权重越高
- 区分度越强
3️⃣ 分子部分
TF⋅(k1+1)\]\[ TF \\cdot (k_1 + 1) \]\[TF⋅(k1+1)
👉 增强 TF 影响
4️⃣ 分母部分(关键)
TF+k1⋅(1−b+b⋅∣d∣avgdl)\]\[ TF + k_1 \\cdot (1 - b + b \\cdot \\frac{\|d\|}{avgdl}) \]\[TF+k1⋅(1−b+b⋅avgdl∣d∣)
分成两部分:
(1)TF 饱和控制
TF+k1\]\[ TF + k_1 \]\[TF+k1
👉 TF 越大,增长越慢
(2)长度归一化
∣d∣avgdl\]\[ \\frac{\|d\|}{avgdl} \]\[avgdl∣d∣
👉 文档越长 → 分母越大 → 分数降低
六、参数含义(工程必须会调)
(k_1)(通常 1.2 ~ 2.0)
控制:
text
TF 饱和速度
- 小 → 很快饱和
- 大 → 更接近线性
(b)(通常 0.75)
控制:
text
长度惩罚强度
- 0 → 不考虑长度
- 1 → 完全按长度归一化
七、直观理解(核心)
BM25 实际在做三件事:
1️⃣ 词重要吗?
👉 IDF
2️⃣ 在文档中出现多少次?
👉 TF(但有上限)
3️⃣ 文档是不是太长?
👉 长度惩罚
八、与 TF-IDF 的本质区别
| 维度 | TF-IDF | BM25 |
|---|---|---|
| TF 增长 | 线性 | 饱和 |
| 长度处理 | 无 | 有 |
| 工程效果 | 一般 | 更稳定 |
👉 BM25 是:
TF-IDF 的工程优化版本
九、与 Top-K 的关系
BM25 是:
text
score(d, q)
Top-K 是:
text
选最大的 K 个 score
👉 二者组合:
text
倒排索引 → BM25 → Top-K
十、工程实现要点
1️⃣ 倒排索引中存储:
text
(term → [(docID, tf)])
2️⃣ 查询流程:
text
遍历 posting list
→ 计算 BM25
→ 更新 Top-K 堆
3️⃣ 优化:
- 跳表(skip list)
- 块级上界(Block Max WAND)
- 提前终止(Top-K 剪枝)
十一、BM25 的局限
- 不理解语义(只看词频)
- 对同义词无感
- 无上下文理解
👉 所以现代系统会加:
- 向量检索(Embedding)
- 深度模型(BERT)
十二、本质总结(严肃表达)
BM25 通过对词频进行非线性缩放并引入文档长度归一化,在 TF-IDF 模型基础上构建了一种更符合实际文本分布特性的相关性评分函数,从而在信息检索系统中提供稳定且高效的排序能力。