怎么考「混合检索里 BM25 和向量的分数怎么融合?为什么很多团队直接用 RRF?

Q2-10混合检索高频

谁在问:中大厂 AI 应用组一二面;凡简历写了「混合检索」几乎必被追问

开场怎么问

你简历上写了混合检索——BM25 的分和向量的分,你是怎么合到一起排序的?

换个问法

  • 两路召回的结果怎么合并?权重是拍脑袋定的吗?
  • 为什么大家都用 RRF?它好在哪?

五层追问链

左边照着问,右边对着听。最后一层是压力面,不必每个候选人都问到。

为什么不能把 BM25 分数和余弦相似度直接加权相加?

期望
量纲不可比——余弦有界、BM25 无上界且随语料/查询长度漂移;直接相加等于身高加体重;必须先归一化,或改用只看排名的方法。
信号
答不出「无上界」这个具体原因、只说「不太好」的,说明没真正碰过分数。

RRF 公式里的 k=60 是干什么的?调大调小会怎样?

期望
缓冲值,防止头部名次形成碾压(没有 k 时第 1 名得分是第 2 名的两倍,加 60 后 1/61≈1/62);k 小→头部权重大更「精英」,k 大→名次差异被抹平更「平均」;60 是原论文经验默认,无评测集不建议动。
信号
能手算一个 1/61+1/63 的小例子的,基本是真理解。

RRF 有什么缺点?什么情况下加权融合反而更好?

期望
丢失分数强度信息,单路超强信号被稀释;有稳定评测集、分数分布稳定、追求极致效果时,归一化加权可精调超过 RRF;更进一步是按 query 类型动态调权/路由。
信号
只会夸 RRF 说不出任何缺点的,是背答案。

你的权重(或 k、topK)是怎么定的?怎么验证调整有效?

期望
评测集驱动——从真实 query 日志/人工标注构建,按类型分桶;指标用 recall@k、MRR/NDCG;对比实验(单路 vs 混合、不同参数);上线后用 badcase 回归集防倒退。
信号
说「用的默认值」不扣分,但说不出「怎么验证默认值够不够」就暴露了没有评测习惯。

上线后发现「型号类查询」混合后反而比纯 BM25 更差,你怎么排查、怎么解?

期望
先分桶归因确认是该类 query 整体劣化而非个案;原因大概率是向量路引入噪声 + RRF 稀释了 BM25 的强信号;解法按成本排序——该类 query 路由单走 BM25 / 加重 BM25 权重 / 检查分词是否把型号切碎 / 自定义词典;修完进回归集。
信号
第一反应是「换个 embedding 模型」而不是「先归因」,工程判断力存疑。

危险信号

听到这些话,基本可以判定是背题而不是做过。

「把两个分数加权平均一下就行」——踩中量纲陷阱,直接暴露没实操。
能背 RRF 公式但答不出 k 的含义或任意一个缺点——背题特征。
「混合检索肯定比单路好」——绝对化;真实情况是分桶看,某些桶会变差。
全程没有出现任何评测指标或验证方法——只有方案没有闭环。
把 Rerank 和融合混为一谈——分不清「多路合并」与「精排」两个阶段。

评分卡

  1. 指出两路分数量纲不可比,并说出 BM25 无上界这一具体原因
  2. 说出两条融合路线:归一化加权、RRF
  3. 能解释 RRF 公式与 k 的作用(k≈60,缓冲头部碾压)
  4. 能说出 RRF 免调参、免疫分数分布的优点及其被广泛采用的原因
  5. 能说出 RRF 丢失分数强度的缺点及「强信号稀释」现象
  6. 体现评测驱动:分桶评测、recall@k/MRR、badcase 回归
  7. 加分:query 分类路由 / 引擎内置能力 / learned sparse 及其边界
参考答案与考察意图面试中途别看这一段

考察意图

这题是「读过文档」和「真做过」的分水岭。面试官在验证三件事:① 你是否理解两路分数量纲不可比这个真正的技术难点(而不是只知道「两路都做然后合并」);② 你是否清楚 RRF 的原理和取舍,而非把它当黑盒;③ 你有没有评测驱动的工程习惯——参数是测出来的还是抄来的。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

BM25 分数和向量余弦相似度不在一个量纲上——余弦有界(0~1),BM25 无上界——所以不能直接加权相加。主流做法两种:一是先归一化(min-max/z-score)再按权重线性组合;二是 RRF,不看分数只看名次,每路给文档一个 1/(k+rank) 的分再求和,k 通常取 60。很多团队用 RRF 是因为它不需要调参、对分数分布不敏感,拿来就能用。

90

90 分答案(有生产经验的回答)

在 60 分基础上,能讲出取舍与演进:

  • 为什么加权难做:α 依赖评测集才能调;分数分布会随语料增长、换 embedding 模型而漂移,调好的权重会失效;min-max 归一化还怕离群值,一个异常高分能把整路分数压扁。
  • RRF 的代价:只看名次丢掉了分数强度——BM25 第 1 名比第 2 名高 10 倍置信和只高 0.1 分,在 RRF 里没区别,导致「单路强信号被稀释」,典型受害者是型号/编号类查询。
  • 工程演进路线:RRF 做默认起点(免调参解决 80% 问题)→ 建好评测集、分数分布稳定后可回到加权精调 → 进一步做 query 分类路由,型号类 query 加重 BM25 甚至单走 BM25。
  • 落到评测:按 query 类型分桶(型号类/口语类/长问题)测 recall@k、MRR,不看总平均;引擎侧知道 Milvus 的 RRFRanker/WeightedRanker、Weaviate 的 α 参数等现成能力;能提一句 learned sparse(BGE-M3/SPLADE)作为 BM25 的新替代及其「没见过内部代号就失效」的边界,是明显加分项。
攒够了去组卷页一键生成可打印的面试题单