标准回答
为什么要多路召回
任何单一召回策略都有盲区:纯向量检索对专有名词、编号、术语的精确匹配偏弱,纯关键词 BM25 又抓不住同义改写与语义近似。多路召回让多条通路并行各召回一批候选,再融合去重,本质是用互补性把整体召回率拉高——某一路漏掉的,另一路往往能补上。
常见通路包括:向量检索(语义)、关键词 BM25(精确匹配)、换用不同 embedding 模型(捕捉不同语义分布)、不同 chunk 粒度(小块精准定位、大块保留上下文)、以及知识图谱或结构化字段检索。每路独立取 Top-K。
多路结果如何融合
第一类是 RRF(Reciprocal Rank Fusion,倒数排名融合):每个文档在某一路的得分取 1/(k + rank),k 常取 60,再把各路相加。它只用排名、不依赖原始分数,因此天然规避了不同召回分数量纲不一致的问题,几乎不用调参,是工程上的稳妥默认。
第二类是 加权求和:先把各路分数归一化到同一量纲(如 min-max 或 z-score),再按权重相加。权重既可离线在验证集上按各路贡献度调出,也可在线按 query 类型动态切换。
第三类是 可学习重排:把多路合并去重后的候选集喂给交叉编码器 reranker 做精排,让模型直接学融合排序,效果通常最好但延迟和成本更高。
动态权重怎么分配
离线侧,用一份带标注的验证集,衡量每路单独召回的命中贡献,按贡献给定基础权重。在线侧,先对 query 做轻量分类或意图识别:事实型、含编号/术语/专名的查询调高关键词权重,开放型、语义复述类查询调高向量权重。更进一步可做可学习的门控,由小模型根据 query 特征输出各路权重。无论哪种,融合后都要做去重(同一文档多路命中需合并取最高贡献)并截断到最终 Top-N。
常见误区
⚠️ 常见踩坑
别在不归一化的情况下直接把各路原始分数相加——向量余弦相似度和 BM25 分数量纲完全不同,直接相加会让某一路压倒性主导。要么先归一化再加权,要么用只看排名的 RRF 彻底绕开量纲问题;另外别忘了多路命中同一文档时的去重合并。
追问
追问 1:RRF 和加权求和该怎么选?
没有调参资源、各路分数不可比时优先 RRF,开箱即用且稳健;如果有验证集且想精细控制各路影响、或某些路明显更可信,用归一化后的加权求和。两者也可叠加:先 RRF 粗融合,再用 reranker 精排。
追问 2:多路召回会不会拖慢延迟?怎么优化?
各路检索本身互相独立,应并行发起而非串行,整体延迟约等于最慢一路。还可对低收益的路设更小 Top-K、对高频 query 缓存召回结果、把重排放在融合去重后的小候选集上,避免对全量候选跑交叉编码器。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习