丑梨AI 完成业务升级:高性能文档压缩 × RAG 数据工程基座了解新业务 →

混合检索:BM25与向量检索的RRF融合权重

结论先行:纯向量检索在型号、编号、指标词上召回不准。混合检索把 BM25(关键词)与 Dense 向量检索并行召回,用加权 RRF(倒数排名融合)取长补短,权重取向约 1.6 : 1.0(BM25 略重)。

一、为什么不能只靠向量

向量检索擅长语义:用户问营收表现,它能召回讲经营业绩的段落,哪怕用词完全不同。但企业文档里还有另一类查询——股票代码、证券编号、指标术语、法条编号。这些查询靠的是字面精确匹配,嵌入模型却倾向于把语义相近、字面不同的词映射到相近的向量位置,字面差异反而被抹掉。问 000002 能十问全部命中,靠的不只是语义,还有对代码这种字面 token 的精确匹配。

BM25 恰好相反:字面匹配极强,编号、术语一击即中;但它不懂同义改写,用户换个说法就抓瞎。两者短板互为长板,所以结论不是二选一,而是并行召回、融合排序,让每类查询都有一条合适的通道。

二、BM25 的两个增强

直接用原始 query 跑 BM25 太糙,要做两件事。第一是口语映射改写:把营收多少这类口语问法映射到营业收入等报表字段词,让日常表达能命中专业术语。第二是 CJK bigram 分词:中文按二字滑动窗口切分,既避免单字切分带来的噪声,又缓解整词切分的漏召回。

这两件事都很朴素,却决定 BM25 这条腿的成色。bigram 的粒度选择、映射词表的维护,都是长期的工程活,不是加一个分词器就完事。CJK bigram 的取舍细节值得单独成篇,见 中文检索为什么用 CJK bigram

三、RRF 融合

两套检索各出一份排名,RRF 按倒数排名打分融合:排名越靠前贡献越大,且天然免归一化,两路分数量纲不同也不影响。丑梨AI 采用加权 RRF,BM25 与 Dense 的权重取向约 1.6 : 1.0,让关键词信号稍重——这个取向来自实测:语义漂移吞掉精确命中的代价,比漏掉一条语义近邻更高。

权重不是拍脑袋定的,也不是一劳永逸的。语料构成变化后,比如批量新增编号密集型文档,应该重新扫一遍权重,看 HitRate@K 与 NDCG@K 的曲线再定,把融合比例当成一个需要持续验证的参数。

检索方式擅长短板
BM25型号/编号/术语字面命中不懂同义改写
Dense 向量语义匹配精确术语易漏
RRF 融合两者兼得需调权重

四、融合之后还要精排

RRF 给出初排后,再用 Cross-Encoder 精排,把 query 与文档放在一起逐对打分,排序质量再上一个台阶,精排的延迟权衡见 Cross-Encoder 精排。精排之上还叠加意图分类、时间过滤、机构锚定、查询改写,最后分层生成。时间过滤的威力在实测里很直观:18,805 条候选被压到 827 条,约 95.5% 的过期文档被挡在外面,生成的上下文因此干净得多。

还有一个降级路径值得知道:嵌入缓存不完整时,系统静默降级为纯 BM25——检索不会中断,只是暂时少了语义那条腿。这套组合拳承接在切片与增强之后,每一步都在为下一步铺路,单点最优不等于链路最优。

混合检索不是孤立的一环。切片之后的增强方法见 Chunk 四级增强;中文分词的取舍见 CJK bigram;初排之后的延迟权衡见 Cross-Encoder 精排

真实场景:95.5% 的时间过滤是怎么来的

混合检索的各组件在真实系统里各司其职。ashare-web 的检索冒烟中,时间过滤把候选集从 17,590 压到 829、从 18,805 压到 827——约过滤 95.5%,这一步决定了「只看某年度报告」这类查询不会混入其他年度的答案。BM25 与 Dense 的融合权重取 1.6 : 1.0(加权 RRF),关键词侧略占优,因为投研查询里公司简称、指标名、报告期这类精确词占比高;配合意图分类、机构锚定、查询改写(口语映射改写 + CJK bigram),把「上次那份说营收的」这类模糊问句翻译成可检索的查询。

还有一个容错细节:嵌入缓存不完整时系统静默降级为纯 BM25——检索不断服,只是精度回退,等缓存补齐再恢复。这比直接报错更符合生产要求。精确词召回不足时的补强手段,见CJK bigram:中文检索为什么不能按词切;候选集排序的最后一道工序,见Cross-Encoder 精排:什么时候值得加一层

常见问题 FAQ

Q1:什么是混合检索?

把 BM25 关键词检索与 Dense 向量检索并行执行,再用加权 RRF 按倒数排名融合两路结果,权重取向约 1.6 : 1.0,让型号编号和语义查询各得其所。

Q2:为什么纯向量检索会漏型号和编号?

嵌入模型把语义相近、字面不同的词映射到相近的向量位置,代码、编号这类靠字面区分的 token 差异被抹掉,容易漏召回。BM25 的字面匹配正好补上。

Q3:RRF 融合是什么?

倒数排名融合:两路检索各出一份排名,按排名倒数打分相加,排名越靠前贡献越大,且不需要归一化分数。加权 RRF 还能给 BM25 稍高的权重。

Q4:嵌入缓存不完整会怎样?

系统会静默降级为纯 BM25 检索,服务不中断,只是暂时少了语义召回那条腿,结果仍可用来兜底。补齐嵌入缓存后,混合检索自动恢复,全程不需要人工干预。

需要搭建企业级 RAG 知识库?了解丑梨AI

私有化部署的 RAG 数据工程基座:解析、清洗、脱敏、压缩、切片、治理、评测一站式流水线,全本地推理,数据不出域,单机可部署。