RAG 中如何组合 BM25 与向量检索?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
先说两路检索各自擅长什么:BM25 对专有名词、编号和精确词匹配强,稠密向量更能覆盖同义改写和语义相关。组合时讲候选并集与分数融合,RRF 是不同分数尺度下的稳健起点。
若被问权重怎么调,不要给固定比例。按查询类型分桶,在标注集上调融合和候选数;还可补一句重排模型负责最后的联合判断。
可以这样答:
混合检索把稀疏与稠密召回互补起来:BM25 擅长产品编号、姓名和关键词精确匹配,向量检索更擅长同义表达和语义相关。两路先各取候选,再做并集、RRF 或归一化加权,之后可交给 Cross-Encoder 重排。权重没有通用值,应按查询类型和真实标注集调参,并比较 Recall、MRR、最终答案正确率以及增加的尾延迟。
核心回答
混合检索通常并行执行 BM25 和向量查询,再融合两路候选。BM25 补足编号、罕见实体和精确词匹配,向量检索补足同义表达和语义改写。由于两路原始分数的量纲和范围不同,不能直接相加;常用 Reciprocal Rank Fusion 按名次融合,或在验证集上做分数归一化和学习权重。
展开说明
RRF 对文档 d 的典型打分是:
\[\operatorname{score}(d) = \sum_i \frac{1}{c + \operatorname{rank}_i(d)}\]其中 rank_i(d) 是文档在第 i 路结果中的名次,c 是降低头部名次过度支配的常数。RRF 不依赖两路原始分数可比,因此实现稳健;但它也会丢掉原分数差距信息。
设计时还要确定:
- 每一路取多少候选,候选太少会在融合前丢失证据。
- 元数据和权限过滤是否在两路一致生效。
- 是否对某类查询提高关键词路或向量路权重。
- 融合之后是否再用 Cross-Encoder 做精排。
混合检索并非必然优于单路检索;如果语料和查询高度同质,额外一路可能只增加噪声和延迟。
工程实践
保留 BM25-only、Dense-only 和 Hybrid 三个可回放基线,按编号查询、实体查询、语义改写等切片比较 Recall@K 与 nDCG。记录每个最终候选来自哪一路和原始名次,便于发现某一路候选深度不足、过滤不一致或融合权重失衡。
常见追问
- 为什么 BM25 分数与余弦相似度不能直接相加? 两者取值范围、分布和查询间可比性不同,直接相加会让某一路因尺度而主导;应先校准或使用基于名次的融合。
- RRF 中的常数与向量检索 Top-K 是一回事吗? 不是。RRF 常数控制高名次结果的优势程度,Top-K 决定每一路提供多少候选,二者作用不同。
- 混合检索后为什么还可能需要 Reranker? 融合只组合两路的粗排信号,Cross-Encoder 能联合理解查询和候选的细粒度关系,进一步清理“相关但不可回答”的文档。
一句话复习
Hybrid Search 用关键词的精确性补向量的语义泛化,并通过可解释的融合策略合并候选。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。