RAG混合检索:召回率从62%到89%的实战
上个月帮一个做知识库的客户排查RAG系统,用户反馈"搜出来的内容完全不相关"。我看了下他们的架构:纯向量检索,用OpenAI的text-embedding-3-small。
问题在哪?Embedding模型把"苹果电脑怎么安装Windows"和"苹果怎么吃最有营养"这两条query映射到了非常接近的向量空间------因为"苹果"在两个query里都是高频词。
这就是纯向量检索的致命弱点:语义相似不等于内容相关。
一、为什么纯向量检索不够?
向量检索的问题在长尾查询上特别严重。我们测了1000条真实用户query:前100条热门query,准确率91%;但后500条长尾query,准确率暴跌到58%。
二、混合检索是什么?
核心思路:BM25 + 向量检索 = 互补。BM25擅长关键词精确匹配("Windows"不会混淆"水果"),向量检索擅长语义泛化。
具体做法:两种检索各取top-K结果,然后用RRF(Reciprocal Rank Fusion)融合排序。
三、实验数据
在3000条真实文档+1000条query上做了对比:
- 纯向量:召回率62%,Top10准确率71%
- 纯BM25:召回率67%,Top10准确率69%
- 混合检索:召回率89%,Top10准确率93%
四、关键调优参数
权重分配很关键。我们测了向量权重从0.1到0.9,最优在0.55-0.65之间。另外RRF的k值默认60,调到45能再提升2个点。
五、落地建议
混合检索不是万能的,但这三个场景最适合:专业术语多的领域、用户query长短差异大、多语言混合场景。