DRMM — 检索里的匹配是相关性不是语义相似
是什么
DRMM(Deep Relevance Matching Model)是一篇说”搜索的匹配跟聊天的匹配不是一回事”的论文。日常类比:
- 聊天里你问”今天天气怎么样”,对方答”天空挺蓝的”——意思贴近,语义相似
- 搜索里你查”埃博拉病毒症状”,文档里写一句”埃博拉病毒症状包括发热、出血”——你要的是这一句精确命中,整篇文章其它写什么不重要
DRMM 把这个差别叫 相关性匹配(relevance matching),不是 语义匹配(semantic matching)。它给搜索任务设计了一个专用网络结构:query 词与 doc 词逐对算相似度,再用直方图统计分布,喂前馈网络打分。
为什么重要
2014–2016 年深度学习刚进 NLP,业界把 NLU(理解、问答)那一套迁到检索:DSSM、ARC-I、ARC-II、MatchPyramid。指标却打不过老牌 BM25。原因没人说清。
DRMM 是第一篇明确指出”检索任务的匹配特性根本不同”的工作,并据此重新设计网络。它的影响:
- 后续做 IR 神经模型必须先回答:“你建模的是 relevance 还是 semantic”
- ColBERT 等 late-interaction 思路(query 词与 doc 词逐对交互)的精神祖宗
- 让 IR 社区从”照搬 NLU 模型”回到”先看任务本质”
不理解这层,你看后面 KNRM、ColBERT、Conv-KNRM 全是技术细节堆砌。
核心要点
DRMM 把 检索 vs NLU 的差别拆成三条:
-
精确匹配信号最重要:query 里出现的词,doc 里原样出现,比”近义替换”价值大得多。BM25 只看精确匹配能赢这么多年不是偶然。
-
query 词重要性不均:查”埃博拉 病毒”,“埃博拉”是核心,“病毒”是补充。NLU 里两个句子地位平等,IR 里 query 各词权重差异大。
-
多样匹配需求(diverse matching):长 doc 里只要任一段命中就够,不要求整篇都贴。NLU 任务(如 paraphrase)反过来——要求整体贴。
DRMM 的网络对应这三点:
- 逐对相似度 + 直方图(对应第 1、3 点):每个 query 词与 doc 每个词算余弦相似度,得到一串数。把这串数按区间分桶(如 [1.0, 0.5, 0, -0.5, -1.0]),数每桶有几个。直方图保留信号强度的分布,且精确匹配(相似度=1)单独成一桶。
- term gating network(对应第 2 点):用 query 词的 IDF 或词向量学一个权重,告诉模型”哪个 query 词更重要”。
- 加权求和:每个 query 词的直方图过同一个前馈网络得到一个分数,再按 gating 权重加权求和。
实践案例
案例 1:直方图为什么比 max-pooling 好
假设 query 词”埃博拉”与 doc 100 个词的余弦相似度是:
[1.0, 1.0, 0.3, 0.2, ..., 0.0, -0.1]- max-pooling:取最大值 1.0。但你不知道命中了几次——1 次还是 10 次?
- avg-pooling:平均值 0.15。强信号被一堆 0 稀释。
- 直方图:分桶后得
[2, 0, 95, 3, 0]——“2 次精确命中,95 个无关词”。这才是相关性的真实分布。
案例 2:与 BM25 对比着看
BM25(q, d) = Σ over q_i in q IDF(q_i) × tf_score(q_i, d)IDF(q_i):query 词重要性 → DRMM 的 term gatingtf_score(q_i, d):q_i 在 d 里出现强度 → DRMM 的直方图喂前馈网络Σ:加权求和 → DRMM 的最后一步
DRMM 本质是深度版 BM25:保留 BM25 的”逐 query 词独立打分再求和”框架,把 tf 项换成可学习的非线性函数。
案例 3:对照 ARC-I(语义匹配模型)
ARC-I:query 编码成一个向量,doc 编码成一个向量,两个向量过 MLP 打分。问题:
- doc 长达 1000 词,强行压成一个向量丢光局部命中
- query 词权重隐含在向量里,模型很难学出”埃博拉 > 病毒”
- 精确匹配信号被 word embedding 的”语义平滑”模糊掉
DRMM 不压缩 doc,逐词交互保留全部命中信号。
案例 4:直方图分桶到底怎么分
论文里给出三种分桶策略:
- Count-based Histogram (CH):每桶数原始计数,比如桶 [0.5, 1.0) 里有 3 个相似度
- Normalized Histogram (NH):CH 除以总词数,缓解长 doc 偏置
- LogCount Histogram (LCH):CH 取 log,压一压数量级
实验里 LCH 最稳,原因是相关性”边际递减”——一个词命中 10 次 vs 100 次,区别没有 1 次 vs 10 次大。log 正好刻画这种递减。这是个任务先验喂给模型的小技巧。
踩过的坑
-
直方图不可微:分桶是离散操作,反向传播过不去。DRMM 的解法是”直方图固定,只学前馈网络”——直方图当输入特征,不当中间层。后续 KNRM 用 RBF 核做”软直方图”才让端到端可学。
-
doc 长度归一化丢了:BM25 有
b参数惩罚长 doc,DRMM 直方图统计的是绝对计数,长 doc 自然分桶里数多。论文用 normalized count 缓解但没彻底解决。 -
term gating 弱:论文里 gating 用 IDF 或 query embedding 一层 softmax,比 BM25 的 IDF 复杂不了多少。后续 K-NRM 干脆把 gating 拿掉。
-
不学 query-doc 交互模式:直方图只看相似度分布,丢掉位置/顺序。MatchPyramid 保留位置但又掉进语义匹配陷阱。两边都难做对。
适用 vs 不适用场景
适用:
- ad-hoc 检索(一次性 query → 长文档):TREC Robust、ClueWeb 这类
- 需要可解释性的检索(直方图就是”命中分布”,肉眼能读)
- 重排阶段(rerank 第一阶段 BM25 召回的 top-1000)
不适用:
- 短文本对(query-query 相似度、QA pair)→ 用 BERT/Sentence-BERT
- paraphrase / NLI 这类语义匹配 → 反过来,应该用 ARC-II / Decomposable Attention
- 端到端可学的稠密检索 → 用 DPR / ColBERT,DRMM 直方图是阻碍
- 大规模在线召回(百万级 doc 实时打分)→ DRMM 要逐词交互,太慢;适合 rerank 不适合召回
历史小故事(可跳过)
- 2013 年:Microsoft 的 DSSM 用孪生塔做 query-doc 匹配,开了神经 IR 第一枪
- 2014 年:ARC-I / ARC-II 把句子匹配迁到检索,指标却追不上 BM25
- 2016 年:UMass 的 Croft 组(IR 老牌实验室)发表 DRMM,明确提出”relevance matching ≠ semantic matching”,重新设计网络
- 2017 年:同组的 Xiong 等人把直方图换成 RBF 核,叫 K-NRM,让 DRMM 思路变得可端到端学
- 2020 年:ColBERT 把”query 词与 doc 词逐对交互”思路推到 BERT 时代,但保留 DRMM 的核心精神——逐词交互不压缩
学到什么
- 任务本质决定网络结构——别看到 SOTA 就抄,先问”我的任务和它的任务匹配吗”
- NLU 和 IR 不是同一件事:semantic matching 看整体相似,relevance matching 看局部命中
- 直方图是个被低估的特征工程:在不可微但信息保留完整的场景里,比 pooling 强
- 深度模型不一定要端到端:DRMM 把直方图固定、只学打分网络,照样跑得动
延伸阅读
- 论文 PDF:Guo et al. 2016, A Deep Relevance Matching Model(CIKM 版本,10 页)
- 后续工作 K-NRM:Xiong et al. 2017(把直方图换 RBF 核,端到端可学)
- 综述:Mitra & Craswell, “An Introduction to Neural Information Retrieval”(2018,把 DRMM 放在神经 IR 谱系里)
- bm25-okapi —— DRMM 在思想上是它的深度版
- colbert-v2 —— 把”逐词交互”思路推到 BERT 时代
关联
- bm25-okapi —— 经典 IR 词袋打分;DRMM 保留它”逐 query 词独立打分再求和”的骨架
- okapi-bm25-1994 —— BM25 原始论文,DRMM 的精神基线
- colbert-v2 —— 后续 late-interaction 模型,逐词交互思路的延续
- anserini-2017 —— 神经 IR 的复现基线工具,DRMM 类工作都用它对比
- bert —— BERT 来后,DRMM 的”非端到端”成了短板,但”任务本质决定结构”的思想没过时
反向链接
- anserini-2017 —— Anserini — 把工业搜索引擎 Lucene 改造成学术 IR 实验台
- bert —— BERT — 双向 Transformer 预训练
- colbert-2020 —— ColBERT — 让 BERT 检索既准又能扛大规模
- colbert-v2 —— ColBERTv2 — 让向量检索既精又能扛百万文档
- knrm-2017 —— K-NRM — 用核函数把交互矩阵变成可微排序信号