什么是 RAG:检索增强生成全面介绍

什么是 RAG:检索增强生成全面介绍

探索检索增强生成(RAG)系统的演进与进步。了解 RAG 如何通过外部知识增强大型语言模型(LLM)。

引言

检索增强生成(Retrieval Augmented Generation, RAG)是一种有前景的解决方案,用于应对大型语言模型(LLM)面临的挑战,包括领域知识缺口、事实性问题以及幻觉现象。通过整合数据库等外部知识源,RAG 增强了 LLM,使其在知识密集型环境或需要最新知识的特定领域应用中尤其有价值。与其他方法不同,RAG 无需为特定任务重新训练 LLM,这是一项显著优势。它近期在对话代理中广受欢迎,凸显了其相关性。

Gao 等人(2023)近期的一项调查为 RAG 的关键发现、实际意义和最新方法提供了宝贵见解。该调查深入探讨了 RAG 系统的各个组成部分,包括检索、生成和增强技术,并考察了它们的评估方法、应用及相关技术。

什么是 RAG

检索增强生成(RAG)通过引入来自权威外部知识库的参考文献,来增强大型语言模型的性能,从而补充模型自身的海量训练数据。大型语言模型(LLM)利用庞大的数据集和数十亿参数,为问答、语言翻译和文本补全等任务生成回复。RAG 扩展了 LLM 的能力,使其适应特定领域或内部组织知识库,而无需重新训练模型。这种方法提供了一种经济高效的方式,来提升 LLM 输出在各场景中的相关性、准确性和实用性。

RAG 的关键组成部分

我们可以将该过程分解为以下步骤/组成部分:

  1. 输入:指向 LLM 系统提出的问题。没有 RAG 时,LLM 直接回答这个问题。
  2. 索引:使用 RAG 时,一组相关文档会经过索引处理。这包括对文档进行分块、为这些块创建嵌入,然后将它们索引到向量存储中。在推理过程中,查询也会被类似地嵌入。
  3. 检索:通过将查询与索引向量进行比较,检索出相关文档,从而得到一组“相关文档”。
  4. 生成:将检索到的文档与原始提示合并,以提供额外上下文。然后将合并后的文本和提示输入模型,生成回复,最终输出给用户。

在示例中,仅依赖模型而不使用 RAG 可能因缺乏最新知识而无法充分回答。相反,使用 RAG 可使系统获取必要信息,从而准确回答问题。

RAG 范式

近年来,RAG 系统从朴素 RAG 演进到高级 RAG 和模块化 RAG,旨在克服性能、成本和效率方面的特定挑战。

朴素 RAG

朴素 RAG 按照前面概述的传统索引、检索和生成过程运行。本质上,它利用用户输入查询相关文档,然后将这些文档与提示合并,提供给模型生成最终回复。如果应用涉及多轮对话交互,可以将对话历史集成到提示中。

然而,朴素 RAG 存在局限性,包括低精度(导致检索块不匹配)和低召回率(未能检索所有相关块)。还存在 LLM 被提供过时信息的风险,而这正是 RAG 系统最初要解决的主要问题。这可能导致幻觉问题,以及生成质量差、不准确的回复。

此外,在实施增强时,可能会出现冗余和重复问题。处理多个检索到的段落时,需要考虑排序、风格和语调的协调。另一个重大挑战在于确保生成任务不过度依赖增强信息,避免模型仅仅重复检索到的内容。

高级 RAG

高级 RAG 提供了对朴素 RAG 不足的解决方案,特别是通过提升检索质量。这种改进涵盖检索前、检索中和检索后的优化。

检索前阶段通过五个关键步骤改进数据索引:提高数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。这些措施旨在提升索引数据的质量。

检索阶段的进一步改进可以通过优化嵌入模型本身来实现。这种优化直接影响上下文块的质量。策略可能包括微调嵌入以提高检索相关性,或使用能更好捕捉上下文细微差别的动态嵌入(例如 OpenAI 的 embeddings-ada-02 模型)。

检索后优化侧重于规避上下文窗口限制,并管理噪声或干扰信息。重排序是应对这些挑战的常用方法,涉及的技术包括将相关上下文移至提示边缘,或重新计算查询与相关文本块之间的语义相似度。提示压缩技术也有助于管理这些问题。

模块化 RAG

顾名思义,模块化 RAG 增强了检索增强生成框架中的功能模块。它涉及集成诸如用于相似性检索的搜索模块,以及在检索器中应用微调。朴素 RAG 和高级 RAG 都可以视为模块化 RAG 的具体实例,由固定模块组成。然而,扩展 RAG 引入了额外的模块,如搜索、记忆、融合、路由、预测和任务适配器,每个模块解决不同的挑战。这些模块可以根据特定任务上下文重新配置,为模块化 RAG 提供更大的多样性和灵活性。这种灵活性使得可以根据任务需求添加、替换或调整模块。

随着 RAG 系统构建灵活性的增加,人们提出了多种优化技术来完善 RAG 流水线:

  1. 混合搜索探索:这种方法结合了基于关键字的搜索和语义搜索等搜索技术,以检索相关且上下文丰富的信息,特别适合处理多样化的查询类型和信息需求。
  2. 递归检索与查询引擎:涉及递归检索过程,从小的语义块开始,逐步检索更大的块以丰富上下文,在效率和上下文丰富性之间取得平衡。
  3. StepBack-prompt:这种提示技术允许 LLM 抽象出概念和原则,引导推理朝向更 grounded 的回复。在 RAG 框架内采用该技术,使 LLM 能够超越具体实例,在必要时进行更广泛的推理。
  4. 子查询:可以根据不同场景采用不同的查询策略,例如树形查询或顺序查询块。例如,LlamaIndex 提供子问题查询引擎,将一个大查询分解为多个问题,每个问题使用不同的相关数据源。
  5. 假设性文档嵌入(HyDE):HyDE 生成对查询的假设性答案,将其嵌入,然后利用该嵌入检索与假设性答案相似的文档,而不是直接使用查询。

RAG 框架

本节总结了组成 RAG 系统的重要组件——检索、生成和增强——的显著进展。

检索

RAG 系统中的检索涉及从检索器中检索高度相关的上下文,可以通过多种方式进行增强:

增强语义表示

改进分块策略对于根据内容和应用需求选择最合适的分块策略至关重要。不同的模型可能适合不同的块大小,例如 sentence transformers 适用于单句,text-embedding-ada-002 适用于包含 256 或 512 个 token 的块。通常需要通过实验不同的分块策略来优化 RAG 系统中的检索,考虑因素包括用户问题长度、应用和 token 限制。

对于专业领域,可能需要微调嵌入模型,以确保准确理解用户查询。BAAI 开发的 BGE-large-EN 等嵌入模型可以针对领域知识或特定下游任务进行微调,以优化检索相关性。

对齐查询与文档

查询重写技术,如 Query2Doc、ITER-RETGEN 和 HyDE,专注于精炼缺乏语义信息或包含不精确措辞的查询。

嵌入变换优化查询嵌入,使其与更接近任务的潜在空间对齐。

对齐检索器与 LLM

微调检索器利用来自 LLM 的反馈信号来改进检索模型。例子包括增强自适应检索器(AAR)、REPLUG 和 UPRISE。

整合外部适配器,如 PRCA、RECOMP 和 PKG,有助于检索器与 LLM 之间的对齐过程。

生成

RAG 系统中的生成器扮演着关键角色,它将检索到的信息转换为连贯的文本,最终形成模型的最终输出。这个过程通常涉及多样化的输入数据,需要努力精炼语言模型对从查询和文档派生的输入的适应。这些精炼可以通过检索后处理和微调来实现:

使用冻结 LLM 的检索后处理:这种方法专注于提高检索结果的质量,而不修改 LLM 本身。使用信息压缩和结果重排序等操作。信息压缩有助于减少噪声、解决上下文长度限制并增强生成效果,而重排序则重新排列文档,将最相关的项目置于顶部。

针对 RAG 微调 LLM:对生成器进行进一步优化或微调,确保生成的文本既自然又有效利用检索到的文档,从而提高 RAG 系统的整体性能。

增强

增强涵盖了将检索到的段落中的上下文与当前生成任务无缝集成的过程。在深入探讨增强过程(包括其阶段和数据)之前,我们先建立 RAG 核心组件的分类。

检索增强可以应用于不同阶段,包括预训练、微调和推理。

增强阶段:例如,RETRO 是一个通过基于外部知识引入额外编码器,从零开始进行大规模预训练增强检索的系统。微调也可以与 RAG 集成,以增强和完善 RAG 系统。在推理阶段,采用多种技术有效整合检索到的内容,以满足特定任务需求并进一步优化 RAG 过程。

增强来源:RAG 模型的有效性在很大程度上取决于增强数据源的选择。这些来源可分为非结构化数据、结构化数据和 LLM 生成数据。

增强过程:为了解决多步推理等复杂问题,提出了多种方法:

  1. 迭代检索:执行多次检索循环,以丰富信息的深度和相关性。采用此方法的著名例子包括 RETRO 和 GAR-meets-RAG。
  2. 递归检索:将一个检索步骤的输出作为下一个检索步骤的输入,从而实现对复杂查询(例如学术研究和法律案例分析)相关信息的更深层次探索。著名方法包括 IRCoT 和 Tree of Clarifications。
  3. 自适应检索:根据特定需求定制检索过程,确定最佳检索时机和内容。采用此方法的著名例子包括 FLARE 和 Self-RAG。

下图全面展示了 RAG 研究,说明了增强的不同方面,包括阶段、来源和过程。

RAG 评估

评估 RAG 模型在不同应用场景中的性能,对于理解和优化其有效性至关重要。传统上,RAG 系统的评估侧重于使用任务特定指标(如 F1 和 EM)来衡量下游任务的性能。RaLLe 是一个用于评估知识密集型任务中检索增强大语言模型的著名框架。

RAG 的评估目标包括检索和生成,旨在评估检索上下文和生成内容的质量。用于评估检索质量的常用指标借鉴了推荐系统和信息检索等领域,包括 NDCG 和 Hit Rate。同时,评估生成质量涉及评估未标记内容的相关性和有害性,或标记内容的准确性。RAG 评估方法可能包括人工评估和自动评估。

RAG 框架的评估通常侧重于三个主要质量分数和四种能力。质量分数包括测量上下文相关性(检索到的上下文的精确性和特异性)、答案忠实度(答案对检索上下文的忠实程度)以及答案相关性(答案与所提问题的相关性)。此外,四种能力有助于衡量 RAG 系统的适应性和效率:噪声鲁棒性、否定拒绝能力、信息整合能力和反事实鲁棒性。下表总结了用于评估 RAG 系统不同方面的指标:

使用各种基准(如 RGB 和 RECALL)来评估 RAG 模型。已经创建了 RAGAS、ARES 和 TruLens 等工具来自动化 RAG 系统的评估过程。其中一些系统利用 LLM 来确定上面定义的一些质量分数。

RAG 的挑战与未来

在本概述中,我们探讨了 RAG 的各个方面研究以及增强其检索、增强和生成组件的不同策略。以下是 Gao 等人(2023)强调的几个挑战,这些挑战在我们持续开发和完善 RAG 系统时值得关注:

  1. 上下文长度:随着 LLM 不断扩展上下文窗口大小,调整 RAG 以确保捕获高度相关且关键的上下文面临挑战。
  2. 鲁棒性:处理反事实和对抗性信息对于衡量和增强 RAG 系统的鲁棒性至关重要。
  3. 混合方法:正在进行的研究旨在更好地理解如何优化使用 RAG 和微调模型。
  4. 扩展 LLM 角色:人们越来越关注增加 LLM 的角色和能力,以进一步增强 RAG 系统。
  5. 缩放定律:研究 LLM 缩放定律及其在 RAG 系统中的应用仍是一个需要进一步理解的领域。
  6. 生产就绪的 RAG:开发生产级 RAG 系统需要在性能、效率、数据安全和隐私等各个领域具备卓越的工程能力。
  7. 多模态 RAG:虽然 RAG 研究主要集中于基于文本的任务,但人们越来越感兴趣将其扩展到支持更广泛的领域,如图像、音频、视频和代码。
  8. 评估:使用 RAG 构建复杂应用需要细致的指标和评估工具,用于评估上下文相关性、创造力、内容多样性、事实性等。此外,还需要改进 RAG 的可解释性研究和工具。

如何将 RAG 与大型语言模型集成

实现检索增强生成(RAG)与大型语言模型(LLM)的集成涉及几个步骤,包括数据集准备和集成到 LLM 设置中。该过程使 LLM 能够利用检索技术,生成更准确、上下文相关的答案。

请参阅我们的博客了解如何将 LLM 与 RAG 技术集成: 逐步教程:将检索增强生成(RAG)与大型语言模型集成

来源:novita.ai

结论

总之,RAG 系统的演进迅速,以高级范式的出现为标志,这些范式提供定制化,并在各个领域增强性能和实用性。对 RAG 应用日益增长的需求推动了改进其不同组件的方法的发展。从混合方法到自检索,现代 RAG 模型正在探索广泛的研究领域。

novita.ai 是一站式平台,为您提供无限创造力,访问 100+ API。从图像生成和语言处理到音频增强和视频操作,按需付费,价格低廉,让您在构建自己的产品时摆脱 GPU 维护的烦恼。立即免费试用。

推荐阅读

LLM 与 GPT 的区别是什么

2024 年 LLM 排行榜预测揭晓

Novita AI LLM 推理引擎:最大吞吐量和最便宜的推理