跳转到内容

Robertson-Walker 1994 — 把 2-Poisson 压成一行能算的公式

是什么

这篇论文把当时一个理论很美但算不出来的检索模型(2-Poisson),近似成一个只有两三个参数、能在工业语料上直接跑的打分公式。这个公式后来被叫做 BM25(Best Match 25,因为是 Okapi 系统里第 25 版方案)。

日常类比:你有一条很复杂的曲线方程,里面 4 个变量都得现场估,估不出来;Robertson-Walker 干的事是——画出这条曲线长什么样,发现它就是个”开头线性、后面饱和”的 S 形,于是直接拿一个简单分式 tf / (k1 + tf) 去 fit 这个形状,参数从 4 个砍到 2 个,效果一样好。

工程意义:从这一刻起,理论检索模型才真的能跑

为什么重要

不理解这篇论文里发生的近似,下面这些事都没法解释:

  • 为什么 BM25 公式里有个看起来”凭空冒出来”的 tf/(k1+tf) 分式——它不是拍脑袋,是 fit 一条概率曲线
  • 为什么 IDF 项的形式是 log((N-df+0.5)/(df+0.5)),不是简单的 log(N/df)——这是 PRP 推出来的概率
  • 为什么参数只有 k1 和 b 两个——别的参数都被”近似掉”了
  • 为什么 1994 年之后,30 年没有更好的字面打分公式——这个近似稳到离谱

核心要点

论文要解决的难题:1976 年 Robertson-Sparck Jones 证明”按 P(相关|文档) 排序最优”(PRP,Probability Ranking Principle)。但是 P(相关|文档) 怎么估?把它展开后,关键在于”一个词在相关文档 vs 不相关文档里的出现分布”。

1975 年 Harter 的 2-Poisson 模型:假设每个词有两类文档——精英文档(elite,真讲这个主题的)和非精英(顺带提一下)。词在两类里都服从泊松分布,但参数 λ(精英)远大于 μ(非精英)。理论很美。

问题:每个词要估 4 个参数(两个泊松均值 + 两个先验),语料里估不出。30 年没人能把它落地。

Robertson-Walker 1994 的两步近似

  1. 观察 2-Poisson 的得分曲线:把词频 tf 画在横轴、得分画在纵轴,曲线是一条 S 形——tf=0 时 0 分,开头快速上升,到一定程度趋于饱和。
  2. 用一个简单分式 fit 这条曲线:发现 tf · (k1+1) / (tf + k1) 这个分式形状几乎一样,但只有一个参数 k1(控制饱和速度)。

第二个独立贡献——长度归一化:长文档天然会让 tf 更大,对短文档不公平。引入 dl/avgdl(这篇文档长度 / 平均长度),用参数 b 控制归一强度。把分母里的 k1 替换成 k1 · (1-b+b·dl/avgdl)

IDF 项:从 PRP 推导出来,形式是 log((N-df+0.5)/(df+0.5)),N 是总文档数,df 是含该词的文档数。+0.5 是 Robertson-Sparck Jones 1976 加的概率平滑项。

最终公式骨架(不背,看意思就好):

score(Q, D) = Σ IDF(qi) · ((k1+1) · tf) / (k1·(1-b+b·dl/avgdl) + tf)
qi∈Q

典型参数:k1 ∈ [1.2, 2.0],b = 0.75。这两个值不是后人调的,是 1994 论文本身在 TREC-2 数据上跑出来的范围。

实践案例

案例 1:S 形曲线长什么样

把 tf 从 0 到 50 喂进 tf·(k1+1)/(tf+k1),k1=1.5:

tf=0 → 0
tf=1 → 1.0 (前几次命中加分快)
tf=5 → 1.92
tf=10 → 2.17
tf=20 → 2.33
tf=50 → 2.43 (后面基本不动了)

直觉:第 1 次命中和第 5 次命中差别大;第 20 次和第 50 次差别小。这就是”提 50 次和提 5 次差别大、提 500 次和提 50 次差别不大”的数学版。

案例 2:长度归一化做了什么

两篇文档同样命中 发酵 5 次:

  • 文档 A:80 词的小品(dl=80, avgdl=400),dl/avgdl = 0.2
  • 文档 B:800 词的长文(dl=800, avgdl=400),dl/avgdl = 2.0

代入 b=0.75 的归一项 1-b+b·dl/avgdl

  • A:1-0.75+0.75·0.2 = 0.4
  • B:1-0.75+0.75·2.0 = 1.75

分母里 k1 被乘以这个值——A 的分母变小(得分高),B 的分母变大(得分低)。短文档命中等于”密度高”,得分上调;长文档命中可能”顺带提一下”,得分下调。

案例 3:IDF 项的概率推导是什么意思

log((N-df+0.5)/(df+0.5)) 这个奇怪形式,本质是:

  • df / (N-df) 大致是”含该词的文档比例 / 不含的比例”
  • 取倒数取对数 → “罕见词的几率比”
  • +0.5 是为了 df=0 或 df=N 时不爆炸(拉普拉斯平滑思想)

直觉:含 the 的文档占 100%,IDF ≈ log(0.5/N) → 负数或接近 0;含某个生僻词的文档占 0.1%,IDF ≈ log(N/0.001N) ≈ 6-7 分。罕见词主导排序,停用词被概率自动压低。

案例 4:为什么 30 年没被超越

后来的尝试——neural ranker、BERT cross-encoder——在标准 TREC / BEIR 上确实能赢 BM25,但代价是:

  • 训练数据需求:BM25 零训练,BERT 要监督数据
  • 推理成本:BM25 一次倒排表查询,BERT 每对 query-doc 都要前向
  • 冷启动:新语料 BM25 立刻可用,BERT 需要重训或迁移

结论:BM25 的”无训练 + 极低成本 + 强 baseline”三角组合,让它至今还守在第一道闸门——大量系统是先 BM25 召回 top-1000,再用 BERT rerank top-10。

踩过的坑

  1. 把 BM25 公式当魔法:里面每一项都是有推导来历的,看见 (k1+1)·tf / (tf+k1) 不是凑的,是 fit 2-Poisson 的 S 曲线。
  2. 以为 IDF 项是 log(N/df):那是 1972 年 Sparck Jones 的原版。BM25 用的是带 +0.5 平滑、形式更复杂的概率版。
  3. k1 和 b 是论文给的:很多人以为是 Lucene 默认参数,其实 1994 原文就给了 1.2-2.0 / 0.75 这个范围。
  4. 2-Poisson 不是被推翻:是被”近似掉”了。理论上仍然站得住,工程上换成更简单的 fit。
  5. 长度归一可以关掉:b=0 等于不归一。在所有文档长度差不多的语料(短问答、商品标题),b=0 反而更稳。

适用 vs 不适用场景

适用

  • 任何字面命中型检索(产品库、代码搜索、日志、文档库)
  • 作为更复杂模型的 baseline——任何检索新方法都要先打过 BM25
  • 召回阶段(top-1000)配 BERT rerank(top-10)的两段式架构

不适用

  • 跨语言(不同 token 集)→ 需要翻译或多语言 dense
  • 同义词替换(卡车 vs 货车)→ BM25 看不见
  • 超短查询 + 超长文档不平衡的语料 → 长度归一项可能误伤

历史小故事(可跳过)

  • 1972 年:Sparck Jones 提出 IDF。
  • 1975 年:Harter 写 2-Poisson 模型——理论好看但算不出来。
  • 1976 年:Robertson + Sparck Jones 把 PRP 形式化。
  • 80 年代末:City University London 开 Okapi 项目,BM1、BM11、BM15 一路试。
  • 1994 年:Robertson + Walker 发本论文,BM25 定型。
  • 1995 年:TREC-3 评测里 BM25 压倒一切,成新 baseline。
  • 2009 年:Lucene 把默认排序从 TF-IDF 改成 BM25;Robertson 写综述《Probabilistic Relevance Framework: BM25 and Beyond》。
  • 2020s:RAG 兴起,BM25 + dense 的 hybrid 重新主流化。

学到什么

  1. “理论很美但算不出来”是个真问题——本论文的全部价值就是把 2-Poisson 的不可算压缩成可算
  2. fit 一条曲线 是工程化理论模型的常见手段,远比”重新发明一个”务实
  3. 30 年不被换掉的不是公式,是 trade-off——零训练 + 低成本 + 强 baseline 这三个一起难复刻
  4. 每个看起来奇怪的项都有来历——读 1994 这篇会发现 BM25 不是拼凑而是逐步推出来的
  5. 基线优先于新方法:任何号称”我比 BM25 强”的检索方案,先在同一数据集上跑过 BM25 才有说服力——这条规矩从 TREC 一路传到今天的 BEIR

延伸阅读

关联

  • bm25-okapi —— 同主题工程视角;本篇是论文推导视角,互补不重复
  • salton-vsm-1975 —— Salton 1975 把检索建模成几何问题;BM25 走概率路线
  • rrf-cormack-2009 —— BM25 召回 + dense 召回常用倒数排名融合