跳转到内容

Croft-Harper 1979 — 没有相关性反馈也能跑概率检索

待复核

这篇论文解决了 1976 年 Robertson-Sparck Jones 概率检索模型(BIM,二元独立模型:只看词出现/不出现)的冷启动问题:原版要知道每个查询词在”相关文档”里出现的概率,但新语料上往往没有标注。Croft 和 Harper 的做法是——先假设”相关概率”对所有词是同一个常数(典型 0.5),这一项在排序里变成常数被消掉,剩下的只跟”含该词的文档数”有关,也就是 IDF 的概率版本;再叠一个简单的文档内词频(tf)项,BIM 第一次能在零相关性数据下跑。

日常类比:一桌子菜没人尝过。Robertson-Sparck Jones 说”按好吃概率排序最优”;Croft-Harper 说”那就先假设大家口味一样、都给中位数,反正排序时常数会被消掉”。粗暴,但排序往往够稳

工程意义:概率 IR 不再是”有标注才能玩”的玩具,可以直接铺到新语料上做第一版排序。今天你在 Elasticsearch / Lucene 里碰到的 BM25 默认排序,IDF 那一项的概率血统,很大一部分要追到这里。

不理解 1979 这步近似,下面这些事都没法解释:

  • 为什么 BM25 的 IDF 常写成 log((N-df)/df) 一类形式,而不是纯频率论的 log(N/df)——前者走概率推导这条线
  • 为什么零反馈设定下 BIM 终于能进实用系统(1976 公式本身估不出相关概率)
  • 为什么 Croft 后来在 UMass 建的 CIIR 能影响多年 IR 研究——本文是其开山级工作之一
  • 为什么 1994 年 BM25 能”接力”——它主要替换本文的线性 tf,IDF 形式大体沿用

一句话:没有 1979 的”先能跑”,后面 1994 的”跑得更好”就没有可替换的底座。

读完本文再看 BM25,建议只盯一件事:哪些项被保留、哪些项被替换。保留的是概率 IDF 气质;替换的是 tf 形状与长度归一。

把”能跑的近似”和”更准的曲线”拆开看,IR 史会清晰很多。

1976 的概率排序原理(PRP:按相关概率排序最优)说:按 P(相关 | 文档) 排最好。展开后,每个查询词要估两个量:

  • p_i:词出现在相关文档里的概率(像”好菜里出现香菜的概率”)
  • u_i:词出现在不相关文档里的概率(像”普通菜里出现香菜的概率”)

冷启动时没人告诉你哪些文档相关,p_i 估不出来,BIM 就瘫痪。

  1. 假设所有词 p_i 相同(典型 0.5):这一项对排序无影响;u_i 用语料估成 n_i / N(含该词的文档数 / 总文档数),权重变成 log((N-n_i)/n_i)——IDF 的概率版。类比:先假设”口味中位数”,让未知项闭嘴。
  2. 补上线性 tf:原版 BIM 只看出现/不出现;本文让文档内出现次数越大得分越高。类比:菜单里写了五次”特供”,比写一次更显眼(但也更容易刷屏)。
  3. coordination level(协调级 / 命中几个词):用 C · |Q ∩ D| 给”命中几个查询词”显式加分。类比:点了两道菜名都对上的店,比只对上一道的更靠谱。

最终骨架可以记成:

score(Q, D) ≈ C · |Q ∩ D| + Σ tf(q, D) · log((N - n_q) / n_q)

不用背公式,记住两块:覆盖度 + 概率 IDF × 词频。常数 C 只是在两块之间调音量。

BIM 词权重是 log((p_i (1-u_i)) / (u_i (1-p_i)))。逐步代入:

  1. 令 p_i = 0.5 → 分子分母各有一个 0.5,消掉后变成 log((1-u_i)/u_i)
  2. 用全集近似不相关集:u_i ≈ n_i / N
  3. 得到 log((N-n_i)/n_i)

这就是 IDF 概率版。后来 BM25 沿用同类形式,并常加 +0.5 平滑,避免 df 极端时数值难看。

为什么这一步叫”概率版”而不是”数词频”?因为它从 BIM 的比值权重推出来,目标是逼近按相关概率排序;Salton 路线则是把文档当成向量做夹角。两条路后来在工程里都叫过 TF-IDF,但考试/论文里最好分开说。

案例 2:三篇文档手工算个迷你排序

Section titled “案例 2:三篇文档手工算个迷你排序”

查询只有一个词 优化器。设语料 N = 100,该词 df = n = 10,则 IDF 项 log((100-10)/10) = log(9) 对三篇相同。三篇文档的 tf 分别为 1、3、50:

文档tf1979 风格(∝ tf·IDF)BM25 饱和 tf(示意)
A1约 1×约 1×
B3约 3×略高于 1×,远不到 3× 的”无限涨”感
C50约 50×停在小个位数倍附近

跟做结论:冷启动时 IDF 拉开”稀有词”,线性 tf 拉开”同词多写”;刷词频会在 1979 公式里几乎线性上分,这正是 1994 要修的点。若你在笔记本上只改 tf、不动 N/df,排序名次就会跟着刷词文档往上爬——这是可复现的直觉实验。

案例 3:coordination level 管覆盖度

Section titled “案例 3:coordination level 管覆盖度”

查询 深度学习 优化器

  • 文档 A 两词都有 → |Q∩D| = 2
  • 文档 B/C 各中一词 → |Q∩D| = 1

C·|Q∩D| 显式给 A 加分。BM25 用对每个查询词求和来隐式覆盖;本文把”命中几个词”写成单独一项,教学上更好看见”覆盖度”这个旋钮。调大 C,系统更偏爱”词都命中”的文档;调小 C,更听 tf-idf 的话。

  1. 当成普通 TF-IDF 同义词:Salton 向量空间的 TF-IDF 来自几何相似度;本文来自 BIM 概率推导。形式像,来历不同——混谈会把两条历史线拧成一股。
  2. 忽略 coordination level:教材常只讲 Σ tf·IDF,但原文是 coord 项与 tf-idf 项并列;漏掉就读不懂论文公式里的 C。
  3. 以为 p_i = 0.5 是乱猜:其实是故意让该项不影响排序的工程让位,不是声称”所有词同等相关”。
  4. 以为 1979 就等于 BM25:1979 是概率 IDF + 线性 tf;S 形 tf 与长度归一要等 1994。Lucene 把 BM25 设为默认 Similarity 是 Lucene 6.0(2016),不是 2009。

补充记忆法:看见 log((N-df)/df) 先问”有没有 +0.5、有没有长度归一”——有,多半已是 BM25 家族;没有且 tf 还在线性涨,更接近 1979 这篇的教学骨架。

适用

  • 没有相关性反馈的字面检索(多数冷启动语料、内网文档库第一版)
  • 教学:解释 BM25 的 IDF 为何不是单纯 log(N/df)
  • 对比 IR 两条线——向量空间(几何)vs 概率排序(PRP)
  • 需要一个可解释、可手算的排序基线,再往上叠学习排序或向量召回

不适用

  • 要语义/同义词/跨语言匹配 → dense retrieval
  • 现代神经检索(embedding / cross-encoder)——已不基于 BIM
  • 短查询 + 很长文档且无长度归一 → 本文未做文档长度校正,需 1994 及以后的 BM25 变体
  • 已有大量点击/标注反馈时,应走带反馈的概率模型或学习排序,而不是停在 p_i=0.5
  • 1972 年:Sparck Jones 提出频率论 IDF(log(N/df) 一类)
  • 1976 年:Robertson + Sparck Jones 形式化 PRP 与 BIM——但依赖相关性反馈
  • 1979 年:本文假设 p_i 常数,BIM 在零训练数据下可跑
  • 1980s:Croft 在 UMass Amherst 建 CIIR,影响后续 IR 研究
  • 1994 年:Robertson + Walker 用 S 形 tf + 长度归一 → BM25
  • 2016 年:Lucene 6.0 默认 Similarity 切到 BM25——概率 IDF 这条线进入更广的工程默认
  1. “假设错了但排序对了”可以是合法策略——让未知项变成对排序无影响的常数
  2. 桥梁论文只动一处:1976 不能跑 → 1979 能跑 → 1994 跑得更稳
  3. 理论与工程接力:好看的公式要先能部署,再谈曲线拟合
  4. 零训练 baseline 寿命长:BM25 仍常守第一道闸,根子有一部分在 1979 的 IDF 近似
  5. 读公式先问”哪一项在没数据时估不出”——本文的贡献正是把那一项变成对排序无害的常数
  • okapi-bm25-1994 —— 1994 用 S 形 tf 接力本文;本文是 BM25 直接前身之一
  • bm25-okapi —— BM25 工程视角;IDF 项可追溯到概率推导线
  • bm25 —— BM25 概念总览
  • anserini-2017 —— 学术复现工业 BM25 的实验台
  • salton-vsm-1975 —— VSM/TF-IDF 几何路线,便于对照”形式像、来历不同”
  • elasticsearch —— 默认排序常走 BM25,工程上能摸到这条历史线
  • bm25 —— BM25 — 用概率框架给搜索结果排队