RAG 技术概述
第一章:引言 (Introduction)
大语言模型(LLMs)在处理特定领域或知识密集型任务时仍存在显著的局限性。RAG 通过从外部知识库中检索相关文档块,显著提高了生成内容的准确性和可信度。
第二章:RAG 概述 (Overview of RAG)
Naive RAG (Naive RAG)
Naive RAG 是最早的方法,包括索引(Indexing)、检索(Retrieval)和生成(Generation)三个步骤,即“检索-阅读”框架。
- 索引(Indexing):清理和提取多种格式的原始数据,转换为纯文本,分割成小块,编码为向量,存储在向量数据库中。
- 检索(Retrieval):将用户查询转化为向量表示,计算查询向量与索引语料库中片段向量的相似度,检索最相似的片段。
- 生成(Generation):将查询和检索到的文档综合成提示,生成模型根据提示生成响应。
缺陷:
- 检索挑战(Retrieval Challenges):精度和召回率较低,容易选择不相关的片段,遗漏重要信息。
- 生成困难(Generation Difficulties):模型可能会产生幻觉,生成与检索上下文不符的内容。
- 增强障碍(Augmentation Hurdles):整合检索信息可能导致输出不连贯,冗余信息导致重复响应。
Advanced RAG (Advanced RAG)
Advanced RAG 针对 Naive RAG 的不足进行了改进,通过预检索和后检索策略提升检索质量,并优化索引技术。
- 预检索(Pre-retrieval):优化索引结构和原始查询,增强数据粒度、优化索引结构、添加元数据等。
- 后检索(Post-retrieval):重新排序检索到的信息,选择关键信息,压缩上下文。
技术细节:
- 滑动窗口方法(Sliding Window Approach):将长文档分割成固定长度的重叠片段。
- 细粒度分割(Fine-grained Segmentation):按句子或段落分割文档。
- 元数据引入(Metadata Incorporation):为每个片段添加额外的上下文信息(如作者、发布时间等)。
Modular RAG (Modular RAG)
Modular RAG 提供了更高的适应性和灵活性,通过添加搜索模块、细化检索器等多种策略改进其组件。
- 新模块(New Modules):搜索模块适应特定场景,使用 LLM 生成的代码和查询语言进行直接搜索。
- 新模式(New Patterns):通过替换或重新配置模块应对特定挑战,如“Rewrite-Retrieve-Read”模型和“Generate-Read”模型。
特点:
- 灵活性(Flexibility):模块化设计允许根据需求替换和调整各个模块,支持多种检索和生成策略。
- 增强能力(Enhanced Capabilities):通过多种策略提高检索和生成的质量,如递归检索和适应性检索。
RAG 与微调对比 (RAG vs Fine-tuning)
RAG 提供了实时知识更新和高解释性的外部知识利用,但存在更高的延迟和数据检索的伦理问题。相比之下,微调需要重新训练来更新,但能够深度定制模型行为和风格。
第三章:检索 ( Retrieval in RAG)
A. 检索源 (Retrieval Source)
RAG依赖外部知识来增强LLMs,而检索源的类型和检索单元的粒度都会影响最终的生成结果。
关键点 (Key Points):
- 数据结构 (Data Structure): 初始检索主要依赖文本数据源,后续扩展到包括半结构化数据(如PDF)和结构化数据(如知识图谱)。此外,越来越多的研究开始利用LLMs自身生成的内容进行检索和增强。
- 检索粒度 (Retrieval Granularity): 检索单元的粒度从细到粗,包括Token、Phrase、Sentence、Proposition、Chunks和Document。选择合适的检索粒度可以提升检索和下游任务的性能。
B. 索引优化 (Indexing Optimization)
在索引阶段,文档会被处理、分割并转化为嵌入存储在向量数据库中。索引构建的质量决定了在检索阶段是否能够获取正确的上下文。
关键点 (Key Points):
- 分块策略 (Chunking Strategy): 最常见的方法是将文档按固定的token数进行分块。较大的块可以捕获更多的上下文,但也会引入更多的噪音。较小的块可能无法完全传达必要的上下文。
- 元数据附加 (Metadata Attachments): 可以为块附加元数据信息,如页码、文件名、作者、类别和时间戳,以限制检索范围,确保知识的新鲜度,避免过时信息。
- 结构化索引 (Structural Index): 通过为文档建立层次结构,RAG系统可以加快检索和处理相关数据。
C. 查询优化 (Query Optimization)
Naive RAG的一个主要挑战是直接依赖用户的原始查询进行检索。提出了多种查询优化方法以提升检索效果。
关键点 (Key Points):
- 查询扩展 (Query Expansion): 通过扩展单个查询为多个查询来丰富查询的内容,确保生成答案的相关性。
- 子查询规划 (Sub-Query Planning): 将复杂的问题分解为一系列简单的子问题,通过添加相关上下文来完全回答原始问题。
D. 嵌入优化 (Embedding Optimization)
选择合适的嵌入模型和优化嵌入表示是提升检索效果的关键。
关键点 (Key Points):
- 混合/混合检索 (Mix/Hybrid Retrieval): 结合不同的嵌入模型和检索方法,以提高检索效果。
- 嵌入模型微调 (Fine-tuning Embedding Model): 针对特定任务和数据进行嵌入模型的微调,以提升检索和下游任务的效果。
E. 适配器 (Adapter)
在RAG系统中,适配器可以用于调整模型的行为和性能,以适应不同的任务需求。
关键点 (Key Points):
- 上下文调整 (Context Adjustment): 通过适配器调整模型的上下文处理能力,以提高生成结果的准确性和一致性。
- 任务特定适配 (Task-Specific Adaptation): 通过适配器调整模型的输出,以适应特定任务的需求和风格。
整体梳理 (Summary)
第三章通过详细探讨检索部分在RAG系统中的应用,提出了多种优化策略来提高检索质量和效率。这些方法不仅提升了检索的准确性和一致性,还为处理复杂的检索任务提供了新的思路。
第四章:生成 (Generation in RAG)
Context Curation
在检索到的内容进行处理后,不建议直接将所有检索到的信息输入到LLM中回答问题。冗余信息会干扰LLM的最终生成,过长的上下文也会导致LLM出现“中间丢失”的问题。像人类一样,LLM往往只关注长文本的开头和结尾部分,而忽略中间部分。因此,在RAG系统中,我们通常需要进一步处理检索到的内容。
关键点 (Key Points):
- 重新排序 (Reranking): 重新排序从根本上重新排列文档块,以突出最相关的结果,有效减少整体文档池。这可以通过依赖于预定义指标(如多样性、相关性和MRR)的基于规则的方法,或使用模型的方法(如BERT系列的编码器-解码器模型)来完成。
- 上下文选择/压缩 (Context Selection/Compression): 在RAG过程中,认为检索尽可能多的相关文档并将它们连接形成一个冗长的检索提示是有益的,但实际上,过多的上下文会引入更多噪音,降低LLM对关键信息的感知。
LLM微调 (LLM Fine-tuning)
针对特定场景和数据特征进行LLM的微调,可以显著提升生成效果。这是使用本地LLM的一个重要优势。当LLM在特定领域缺乏数据时,可以通过微调为LLM提供额外知识。
关键点 (Key Points):
- 调整输入和输出 (Adjusting Inputs and Outputs): 通过微调,使LLM能够适应特定的数据格式,并根据指示生成特定风格的响应。
- 强化学习 (Reinforcement Learning): 通过强化学习,将LLM的输出与人类或检索器的偏好进行对齐。例如,手动注释最终生成的答案,然后通过强化学习提供反馈。
整体梳理 (Summary)
第四章通过详细探讨生成部分在RAG系统中的应用,提出了多种生成策略和评估方法来提高生成内容的质量。这些方法不仅提高了生成的准确性和一致性,还为处理复杂的生成任务提供了新的思路。
第五章:增强 Augmentation Process in RAG
5.1 概述
在传统的RAG系统中,单次检索和生成的方法存在一定的局限性,特别是在处理复杂问题时。为了解决这些问题,提出了增强技术,包括迭代检索、递归检索和自适应检索。
5.2 迭代检索 (Iterative Retrieval)
迭代检索是一种基于初始查询和当前生成文本反复检索知识库的方法。该过程通过多次检索迭代提供更丰富的上下文,提高生成回答的鲁棒性和准确性。
主要步骤 (Key Steps):
- 初始查询进行第一次检索 (Initial query for the first retrieval)。
- 生成部分答案,并基于该答案进行下一次检索 (Generate partial answers and use them for the next retrieval)。
- 继续迭代,直到生成完整的答案 (Continue iterating until a complete answer is generated)。
5.3 递归检索 (Recursive Retrieval)
递归检索通过反复细化用户查询并将问题分解为子问题来改进检索结果。此方法对于复杂搜索场景特别有效。
主要步骤 (Key Steps):
- 初始查询进行检索 (Initial query for retrieval)。
- 基于检索结果细化查询 (Refine the query based on retrieval results)。
- 反复检索,逐步解决复杂问题 (Repeatedly retrieve to solve complex problems step by step)。
5.4 自适应检索 (Adaptive Retrieval)
自适应检索方法使得RAG系统能够自主决定何时需要进行外部知识检索,以及何时停止检索和生成。通常利用LLM生成的特定控制符来实现。
主要步骤 (Key Steps):
- 监控生成过程中生成项的概率,当概率低于某个阈值时,激活检索系统 (Monitor the probability of generated terms during the generation process and activate the retrieval system when the probability falls below a certain threshold)。
- 根据检索到的信息进行生成 (Generate based on the retrieved information)。
整体梳理 (Summary)
第五章通过详细探讨增强技术在RAG中的应用,提出了多种优化方案来应对传统RAG方法的局限性。这些增强技术不仅提高了检索和生成的质量,还为处理复杂问题和多样化的任务提供了新的方法和思路。
第六章:任务和评估 (Task and Evaluation in RAG)
A. 下游任务 (Downstream Task)
RAG的核心任务仍然是问答(QA),包括传统的单跳/多跳问答、多项选择题、领域特定的QA以及适合RAG的长形式场景。除了QA,RAG还在不断扩展到多个下游任务,如信息抽取(IE)、对话生成、代码搜索等。RAG的主要下游任务及其对应的数据集总结如下表II所示。
关键点 (Key Points):
- 问答 (Question Answering): 包括单跳问答(Single-hop QA)、多跳问答(Multi-hop QA)和领域特定的QA。
- 信息抽取 (Information Extraction): 例如事件参数抽取和关系抽取。
- 对话生成 (Dialogue Generation): 包括个人对话和任务导向对话。
- 代码搜索 (Code Search): 例如使用CodeSearchNet数据集进行代码搜索任务。
B. 评估目标 (Evaluation Target)
传统上,RAG模型的评估主要集中在其在特定下游任务中的执行情况。这些评估使用适合任务的既定指标。例如,问答评估可能依赖于EM和F1得分,而事实核查任务通常依赖于准确性作为主要指标。常用的指标还包括BLEU和ROUGE。
关键点 (Key Points):
- 检索质量 (Retrieval Quality): 评估检索模块获取上下文的有效性,常用指标包括Hit Rate、MRR和NDCG。
- 生成质量 (Generation Quality): 评估生成模块从检索到的上下文中合成连贯且相关答案的能力,常用指标包括内容的真实性、相关性和非有害性。
C. 评估方面 (Evaluation Aspects)
当代RAG模型的评估实践强调三个主要质量得分和四个必要能力,这些共同为RAG模型的两大主要目标(检索和生成)的评估提供信息。
质量得分 (Quality Scores):
- 上下文相关性(Context Relevance):评估检索到的上下文的精确性和特异性。
- 答案真实性(Answer Faithfulness):确保生成的答案与检索到的上下文一致。
- 答案相关性(Answer Relevance):要求生成的答案直接与提出的问题相关。
必要能力 (Required Abilities):
- 噪声鲁棒性(Noise Robustness):评估模型管理与问题相关但缺乏实质信息的噪声文档的能力。
- 否定拒绝(Negative Rejection):评估模型在检索到的文档不包含回答问题所需知识时拒绝回答的能力。
- 信息整合(Information Integration):评估模型从多个文档中综合信息以回答复杂问题的能力。
- 反事实鲁棒性(Counterfactual Robustness):评估模型识别并忽略文档中已知不准确信息的能力。
D. 评估基准和工具 (Evaluation Benchmarks and Tools)
提出了一系列基准测试和工具来促进RAG的评估。这些工具提供定量指标,不仅评估RAG模型的性能,还提高对模型在各种评估方面能力的理解。突出的基准测试包括RGB、RECALL和CRUD。
整体梳理 (Summary)
第六章通过详细探讨任务和评估部分在RAG系统中的应用,提出了多种评估策略来提高评估的质量和效率。这些方法不仅提升了评估的准确性和一致性,还为处理复杂的评估任务提供了新的思路。
第七章 (Discussion and Future Prospects in RAG)
A. RAG与长上下文 (RAG vs Long Context)
随着研究的深入,LLM的上下文处理能力不断增强。目前,LLM可以轻松处理超过200,000个token的上下文。这一能力表明,以前依赖于RAG的长文档问答,现在可以直接将整个文档纳入提示中。这也引发了关于在LLM不受上下文限制时,RAG是否仍然必要的讨论。实际上,RAG依然不可替代。一方面,提供大量上下文会显著影响LLM的推理速度,而分块检索和按需输入可以显著提高操作效率。另一方面,基于RAG的生成可以快速定位LLM的原始参考资料,帮助用户验证生成的答案。上下文的扩展为RAG的发展提供了新机遇,使其能够解决更复杂的问题和需要大量阅读材料的综合性或总结性问题。
关键点 (Key Points):
- 上下文扩展 (Context Expansion): RAG可以处理更长的上下文,适应复杂的问题。
- 效率提升 (Efficiency Improvement): 分块检索和按需输入提高了操作效率。
- 验证功能 (Verification Function): RAG生成的答案可以快速定位参考资料,帮助验证答案的准确性。
B. RAG的鲁棒性 (RAG Robustness)
检索过程中存在的噪声或矛盾信息会对RAG的输出质量产生不利影响。提高RAG对这些对抗性或反事实输入的抵抗能力正在成为一个重要的研究方向。研究发现,包含无关文档有时会意外地提高准确性,这强调了开发专门的策略来将检索与语言生成模型集成的重要性。
关键点 (Key Points):
- 噪声鲁棒性 (Noise Robustness): 评估模型管理与问题相关但缺乏实质信息的噪声文档的能力。
- 对抗性输入处理 (Handling Adversarial Inputs): 提高RAG对对抗性输入的抵抗能力。
C. 混合方法 (Hybrid Approaches)
将RAG与微调相结合正在成为一种领先的策略。确定RAG和微调的最佳集成方式——无论是顺序、交替还是通过端到端联合训练——以及如何利用参数化和非参数化优势是值得探索的领域。另一种趋势是引入具有特定功能的小型语言模型(SLM)到RAG中,并通过RAG系统的结果进行微调。
关键点 (Key Points):
- 集成策略 (Integration Strategies): 确定RAG和微调的最佳集成方式。
- 引入SLM (Introducing SLM): 通过引入小型语言模型增强RAG的功能。
D. RAG的缩放法则 (Scaling laws of RAG)
端到端RAG模型和基于RAG的预训练模型仍然是当前研究的重点。这些模型的参数是关键因素。虽然缩放法则已为LLM建立,但其对RAG的适用性仍不确定。一些初步研究表明,在某些情况下,小模型可能优于大模型,这需要进一步的研究。
关键点 (Key Points):
- 模型参数 (Model Parameters): 研究模型参数对RAG性能的影响。
- 逆缩放法则 (Inverse Scaling Law): 探讨小模型在某些情况下优于大模型的可能性。
E. 生产就绪的RAG (Production-Ready RAG)
RAG的实用性和与工程需求的一致性促进了其采用。然而,提高检索效率、改进大知识库中的文档召回以及确保数据安全(如防止LLM无意中泄露文档源或元数据)仍是需要解决的关键工程挑战。
关键点 (Key Points):
- 检索效率 (Retrieval Efficiency): 提高检索效率。
- 数据安全 (Data Security): 确保数据安全,防止泄露文档源或元数据。
F. 多模态RAG (Multi-modal RAG)
RAG已经超越了其初始的基于文本的问答范围,拥抱了多种模态数据。这种扩展催生了创新的多模态模型,这些模型在各个领域整合了RAG概念。
关键点 (Key Points):
- 图像 (Image): RA-CM3模型能够同时检索和生成文本和图像。
- 音频和视频 (Audio and Video): GSS方法检索并拼接音频片段,UEOP显著提高了端到端自动语音识别,Vid2Seq增强了语言模型在视频字幕生成中的性能。
- 代码 (Code): RBPS模型通过检索代码示例,提升了小规模学习任务的效果。
整体梳理 (Summary)
第七章通过详细探讨RAG技术的现状、面临的挑战以及未来的发展方向,提出了多种策略来提高RAG的性能和应用范围。这些方法不仅提升了RAG的鲁棒性和效率,还为处理复杂任务提供了新的思路和方法。