当前位置: 首页 > news >正文

深入剖析 RAG 检索系统中的召回方式:BM25、向量召回、混合策略全解析

目录

一、什么是 RAG 检索系统?

二、为什么召回方式对 RAG 至关重要?

三、RAG 系统中的常见召回方式详解

3.1 🔷 BM25 召回(稀疏召回)

3.2 🔷 BCE 向量召回(稠密语义召回)

3.3 🔷 混合召回(Hybrid Recall)

四、其他召回方式拓展

4.1 📌 Query Expansion(查询扩展)

4.2 📌 实体召回 / 多跳实体路径召回

4.3 📌 类别召回 / 标签召回

五、召回方式对比与选型建议

六、RAG 系统中的召回架构实践

七、总结:如何构建适合你的召回系统?

八、附录:参考工具与资源

总结


一、什么是 RAG 检索系统?

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与文本生成的大模型架构,它在回答问题或生成文本时,不仅依赖模型知识,还利用外部文档来增强上下文,提升准确性和事实性。

RAG 的核心流程可分为三步:

  1. 召回(Recall):根据输入 Query,从大规模文档中召回 Top-K 候选文档。

  2. 重排序(Rerank):对候选文档进一步排序,提升相关性。

  3. 生成(Generate):使用大模型(如 LLM)结合文档生成最终答案。

其中,“召回”是第一步,决定了后续的生成质量,本篇聚焦于 RAG 中的召回方法详解

二、为什么召回方式对 RAG 至关重要?

📌 内容说明:

  • LLM 本身知识库是静态的,无法覆盖所有事实。

  • 召回的结果质量直接影响最终生成答案的准确性。

  • 大规模语料下,如何在 毫秒级别 召回高质量候选文档,是系统性能的关键。

举例:如果你的知识库有百万文档,生成阶段仅能处理前 5~10 个文档,那么召回阶段必须从百万文档中精准找出最相关的那几个。

三、RAG 系统中的常见召回方式详解

3.1 🔷 BM25 召回(稀疏召回)

原理:

  • BM25 是基于关键词匹配和词频倒排索引的经典 IR 方法。

  • 按照每个文档与 query 关键词的匹配程度计算得分。

特点:

  • 不需要训练模型,部署简单

  • 可解释性强,适用于规则/关键词主导场景

使用工具:

  • Elasticsearch(官方支持 BM25)

  • Whoosh(Python 本地索引)

  • Lucene 底层引擎

示例应用场景:

  • FAQ 系统、法律检索、规则匹配型问答

3.2 🔷 BCE 向量召回(稠密语义召回)

原理:

  • 使用双塔语义编码模型,将 query 和文档分别编码为向量。

  • 利用向量之间的相似度(内积或余弦)进行匹配。

常用模型:

  • SimCSE(有监督/无监督)

  • DPR(Dense Passage Retrieval)

  • GTR、Contriever、Cohere embed

检索引擎:

  • Faiss(Facebook 提供的向量库)

  • Milvus(国产开源,支持 GPU 加速)

  • Weaviate / Qdrant / Vespa 等现代向量检索系统

优缺点:

优点缺点
能识别语义相似、同义词向量计算成本高、训练门槛较高
可迁移性好,适应复杂场景可解释性差

典型应用场景:

  • 多语言问答、语义搜索、知识库检索

3.3 🔷 混合召回(Hybrid Recall)

原理:

融合 稀疏检索(关键词)稠密检索(语义向量) 的结果,提升召回覆盖面和精度。

融合策略:

  • 并行召回 + 合并(去重后排序)

  • 分阶段召回(先 BM25 再向量 rerank)

  • 使用排序融合算法:RRF(Reciprocal Rank Fusion)

工具支持:

  • LangChain / LlamaIndex

  • Haystack(支持 Hybrid Retriever)

优势:

  • 综合精度更高,鲁棒性更强

  • 不易被 OOV(未登录词)影响

建议使用场景:

  • 对召回精度要求高的 RAG 问答系统

  • 文本风格多样、歧义多的搜索任务

四、其他召回方式拓展

4.1 📌 Query Expansion(查询扩展)

  • 使用同义词库或语言模型对 Query 进行扩展,提高召回率。

  • 示例:将“电流保护”扩展为“过流保护”、“短路电流保护”

4.2 📌 实体召回 / 多跳实体路径召回

  • 基于知识图谱,从 Query 中抽取实体 -> 关联相关节点 -> 返回文档

  • 常用于专业问答系统、医学/法律领域

4.3 📌 类别召回 / 标签召回

  • 先对 Query 做分类(如所属主题),再在相应子索引中召回

  • 提高召回效率,降低误召概率

五、召回方式对比与选型建议

方法语义能力精度速度部署成本典型场景
BM25FAQ、关键词匹配
向量召回中高通用问答、语义搜索
混合召回很高复杂场景、企业知识库
实体召回专业领域、结构化文档
扩展召回Recall Coverage 提升

六、RAG 系统中的召回架构实践

一个标准 RAG 检索系统的召回架构:

七、总结:如何构建适合你的召回系统?

  • 只做关键词匹配够用吗?
    小数据量 / FAQ类系统中 BM25 已够用。

  • 想实现语义检索怎么办?
    推荐使用 SimCSE + Faiss/Milvus,可用开源模型快速启动。

  • 如何保证召回稳定和高覆盖?
    混合召回是大趋势,RRF 等融合策略可显著提升 Recall@K。

  • 有没有一体化工具推荐?
    HaystackLlamaIndexLangChain 等支持多种召回模块组合。

八、附录:参考工具与资源

类别工具/平台简介
稀疏检索Elasticsearch、WhooshBM25 支持
向量库Faiss、Milvus、Qdrant向量召回
模型SimCSE、DPR、Contriever语义编码模型
框架Haystack、LangChain、LlamaIndex检索增强生成框架

总结

召回是 RAG 系统的起点,是构建高质量智能问答、搜索、知识系统的根基。选择合适的召回策略,不仅能提升系统性能,更能让大模型“看得见”正确的知识。

如果你正在构建一个 RAG 系统,建议从 BM25 + SimCSE 混合召回开始实践,并逐步引入更强的 rerank 模块,实现端到端闭环的问答系统。

http://www.dtcms.com/a/316587.html

相关文章:

  • Go语言 string
  • stm32项目(21)——基于STM32和MPU6050的体感机械臂开发
  • 跨尺度目标漏检率↓82.4%!陌讯多尺度融合算法在占道经营识别的实战优化
  • 结构化开发方法详解:软件工程的奠基性范式
  • 机器学习——贝叶斯
  • Android 之 Kotlin中的协程(Dispatchers.IO)
  • Android UI 组件系列(十一):RecyclerView 多类型布局与数据刷新实战
  • ara::log::LogStream::WithTag的概念和使用案例
  • 鸿蒙开发--web组件
  • Java技术栈/面试题合集(5)-SpringBoot篇
  • SpringBoot3.x入门到精通系列:4.1 整合 MongoDB 详解
  • 《四种姿势用Java玩转AI大模型:从原生HTTP到LangChain4j》
  • Ubuntu24.04环境下非DOCKER方式安装Mysql5.7
  • 今日行情明日机会——20250805
  • 呼叫中心系统录音管理功能的应用
  • 初学docker
  • 深度拆解Dify:开源LLM开发平台的架构密码与技术突围
  • QUdpSocket发送组播和接受组播数据
  • 【类与对象(上)】C++封装之美:类与this指针解析
  • Nginx 单一端点上高效部署多个 LLM 模型
  • ES 模块动态导入
  • 海上电磁波传播:两径模型 vs 抛物方程模型传播损耗对比
  • 37.字典树
  • Redis集群模式下确保Key在同一Slot的实现方法
  • 按位运算 - C++
  • Velero 简介和部署
  • Linux进程信号——初步认识信号、信号的产生
  • 《UE教程》第一章第六回——迁移独立项目(资源)
  • IAR软件中变量监控的几种方法
  • 如何在 FastAPI 中优雅处理后台任务异常并实现智能重试?