当前位置: 首页 > 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.xdnf.cn/news/1244359.html

相关文章:

  • JS-第二十一天-尺寸位置
  • Android UI 组件系列(十一):RecyclerView 多类型布局与数据刷新实战
  • AI 对话高效输入指令攻略(四):AI+Apache ECharts:生成各种专业图表
  • 【学习笔记】Manipulate-Anything(基于视觉-语言模型的机器人自动化操控系统)
  • 【09】C++实战篇——C++ 生成静态库.lib 及 C++调用lib,及实际项目中的使用技巧
  • javacc学习笔记 02、JavaCC 语法描述文件的格式解析
  • Druid手写核心实现案例 实现一个简单Select 解析,包含Lexer、Parser、AstNode
  • k8s常见问题
  • (论文速读)RMT:Retentive+ViT的视觉新骨干
  • 20250805问答课题-实现TextRank + 问题分类
  • 力扣热题100------21.合并两个有序链表
  • 8.高斯混合模型
  • k8s简介
  • 数据集相关类代码回顾理解 | np.mean\transforms.Normalize\transforms.Compose\xxx.transform
  • Claude Code六周回顾
  • 补:《每日AI-人工智能-编程日报》--2025年7月29日
  • steam Rust游戏 启动错误,删除sys驱动,亲测有效。
  • 机器学习(13):逻辑回归
  • 昇思学习营-模型推理和性能优化学习心得
  • ShowDoc与Docmost对比分析:开源文档管理工具的选择指南
  • 【QT】常⽤控件详解(四)常用显示类控件类 Label LCDNumber ProgressBar Calendar Widget
  • [Oracle] TO_NUMBER()函数
  • HTTPS有哪些优点
  • 【OS】操作系统概述
  • 蓝桥杯----AT24C02
  • 机器学习(12):拉索回归Lasso
  • Docker-07.Docker基础-数据卷挂载
  • 基于SpringBoot的OA办公系统的设计与实现
  • 小鹏汽车前端面经
  • 深度解析:CPU 与 GPU 上的张量运算,为何“快”与“慢”并非绝对?