原文:GitHub - Tongji-KGLLM/RAG-Survey
目录
- RAG调查
- 什么是RAG?
- RAG的范式
- 幼稚的 RAG
- 高级 RAG
- 模块化 RAG
- 如何进行增强?
- RAG 还是微调?
- 如何评估 RAG?
- 前景
- 严峻的挑战
- 多式联运扩展
- RAG的生态系统
- RAG论文清单
- 增强阶段
- 预训练
- 微调
- 推理
- 增强源
- 非结构化数据
- 结构化数据
- LLM 生成的内容
- 增强过程
- 一次检索
- 迭代检索
- 递归检索
- 自适应检索
- 杂项
- 可视化
- 确认
- 增强阶段
什么是RAG?
大型语言模型 (LLM) 已成为我们生活和工作不可或缺的一部分,通过其惊人的多功能性和智能性改变了我们与信息交互的方式。
尽管它们的能力令人印象深刻,但它们并非没有缺陷。这些模型会产生误导性的“幻觉”,依赖可能过时的信息,在处理特定知识时效率低下,在专业领域缺乏深度,并且在推理能力方面不足。
在实际应用中,数据需要不断更新以反映最新发展,并且生成的内容必须透明且可追溯,以管理成本并保护数据隐私。因此,仅仅依靠这些“黑匣子”模型是不够的;我们需要更精细的解决方案来满足这些复杂的需求。
在这种背景下,检索增强生成(RAG)作为人工智能时代的开创性趋势而声名鹊起。
RAG在问答中的典型应用。(例如,向 chatGPT 询问 OpenAI 首席执行官 SAM Altman 😆 被解雇和重新聘用一事)
RAG 在生成语言模型的答案之前,首先从外部文档数据库中检索相关信息,从而显著提高了内容的精确度和相关性。
RAG的范式
Lewis 于 2020 年推出的 RAG 概念发展迅速,标志着其研究之旅的不同阶段。最初,该研究旨在通过在预训练阶段为语言模型注入额外的知识来支持语言模型。ChatGPT 的推出引发了人们对利用大型模型进行深入上下文理解的浓厚兴趣,加速了 RAG 在推理阶段的发展。随着研究人员对大型语言模型 (LLM) 功能的深入研究,重点转向增强其可控性和推理能力,以跟上不断增长的需求。GPT-4 的出现标志着一个重要的里程碑,它以一种新颖的方法彻底改变了 RAG,该方法将其与微调技术相结合,同时继续完善预训练策略。
RAG研究的时间线树
在RAG的技术发展中,我们从技术范式的角度将其演进归纳为以下几个阶段:
幼稚的 RAG
经典的 RAG 过程(也称为 Naive RAG)在前面的示例中进行了演示。它主要包括三个基本步骤:
- 索引 - 将文档语料库拆分为较短的块,并通过编码器构建矢量索引。
- 检索 - 根据问题和块之间的相似性检索相关文档片段。
- 生成 - 根据检索到的上下文生成问题的答案。
高级 RAG
朴素RAG在检索、生成和增强方面面临多重挑战。随后提出了高级 RAG 范式,并涉及检索前和检索后的额外处理。在检索之前,可以使用查询重写、路由和扩展等方法来对齐问题和文档块之间的语义差异。检索后,对检索到的文档语料进行重新排序可以避免“中途丢失”现象,也可以对上下文进行过滤和压缩,以缩短窗口长度。
模块化 RAG
随着RAG技术的进一步发展和演进,突破了传统的朴素RAG检索生成框架,产生了模块化RAG的概念。在结构上,它更加自由和灵活,引入了更具体的功能模块,如查询搜索引擎和多个答案的融合。在技术上,它将检索与微调、强化学习和其他技术集成在一起。在流程方面,RAG 模块经过设计和编排,产生了各种 RAG 模式。
然而,模块化RAG并不是突然出现的。这三种范式之间存在着继承与发展的关系。Advanced RAG 是 Modular RAG 的特例,而 Naive RAG 是 Advanced RAG 的特例。
三种 RAG 范式之间的比较。
如何进行增强?
为了构建一个好的RAG系统,其中增强部分是关键,需要考虑三个关键问题:
- 检索什么?
- 何时取回?
- 如何使用检索到的内容?
从以上三个问题出发,我们组织增强如下:
-
增强阶段。检索增强可以在预训练、微调和推理阶段进行,这决定了外部知识的参数化程度,并对应所需的不同计算资源。
-
增强源。增强可以利用各种形式的数据,包括非结构化数据,例如文本段落、短语或单个单词。也可以使用结构数据,例如索引文档、三元组数据或子图。另一种方法是不依赖外部信息源,而是充分利用LLM的内在功能,从LLM本身生成的内容中检索。
-
增强过程。最初的检索是一个一次性的过程,但在RAG的发展中逐渐出现了迭代检索、递归检索和自适应检索方法,其中LLM自行决定检索的时间。
-
具有不同增强方面的技术树。
RAG核心组件的分类
RAG 还是微调?
除了 RAG,LLM 的主要优化策略还包括 Prompt Engineering 和 Fine-tuning (FT)。每个都有自己独特的功能。根据他们对外部知识的依赖和模型调整的要求,他们每个人都有合适的场景。
RAG就像是给模型一本自定义信息检索的教科书,非常适合特定的查询。另一方面,FT 就像学生随着时间的推移内化知识,更适合模仿特定的结构、风格或格式。FT 可以通过增强基础模型的知识、调整输出和教授复杂的指令来提高模型的性能和效率。但是,它不擅长集成新知识或快速迭代新用例。RAG 和 FT 并不相互排斥;它们是互补的,一起使用可能会产生最佳结果。
RAG 与微调象限图
如何评估 RAG?
RAG的评价方法多种多样,主要包括三种质量评分:语境相关性、答案保真度和答案相关性。此外,评估还涉及四个关键能力:噪声鲁棒性、拒绝能力、信息集成和反事实鲁棒性。这些评估维度将传统的定量指标与RAG特征的专业评估标准相结合,尽管这些标准尚未标准化。
在评估框架方面,有RGB、RECALL等基准测试,也有RAGAS、ARES、TruLens等自动化评估工具,有助于全面衡量RAG模型的性能。
前景
RAG的发展正在蓬勃发展,有几个问题值得进一步研究。我们可以从三个方面来期待这些:
严峻的挑战
旨在进一步解决RAG当前面临的挑战;
- 上下文长度。当检索到的内容过多且超出窗口限制时该怎么办?如果 LLM 的上下文窗口不再受限,那么应该如何改进 RAG?
- 稳健性。如何处理检索到的错误内容?如何过滤和验证检索到的内容?如何增强模型的抗中毒和抗噪能力?
- 与微调的协调。如何同时利用 RAG 和 FT 的效果,它们应该如何协调、组织,无论是串联、交替还是端到端?
- 标度定律:RAG 模型是否满足标度定律?RAG是否会在什么情况下遇到逆标度定律现象?
- LLM的作用。LLM 可用于检索(用 LLM 的生成代替搜索或搜索 LLM 的内存)、生成、评估。如何进一步挖掘LLM在RAG中的潜力?
- 生产就绪。如何降低超大规模语料库的检索延迟?如何确保检索到的内容不会被 LLM 泄露
多式联运扩展
如何将 RAG 不断发展的技术和概念扩展到其他数据模式,例如图像、音频、视频或代码?一方面,这可以增强单一模态内的任务,另一方面,它可以通过RAG的思想融合多模态。
RAG的生态系统
RAG的应用不再局限于问答系统;它的影响力正在扩展到更多领域。现在,各种任务,如研究系统、信息提取和报告生成,都开始受益于RAG技术的应用。
与此同时,RAG技术栈正在经历蓬勃发展。除了 Langchain 和 LlamaIndex 等知名工具外,市场上还出现了更有针对性的 RAG 工具,例如:针对特定用例定制以满足更集中的场景需求的 RAG 工具;那些简化用于进一步降低进入门槛的措施;以及那些专门从事功能的,逐渐瞄准生产环境。
RAG论文清单
增强阶段
预训练
1.通过从数万亿个令牌中检索来改进语言模型 [论文][代码]
2.基于检索增强语言模型的少样本学习 [论文]
3.Toolformer:语言模型可以自学使用工具[论文]
4.复印就是你所需要的[纸张]
5.基于检索增强编码器-解码器语言模型的上下文学习[论文]
6.我们是否应该用检索来预训练自回归语言模型?[论文]
7.Demonstrate-Search-Predict: Composing retrieval and language models for knowledge-intensive NLP[论文]
微调
1.面向开放领域问答的密集段落检索[论文]
2.UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation[论文][代码]
3.从读者到检索者进行知识的提炼,用于问答[论文]
4.RA-DIT: Retrieval-Augmented Dual Instruction Tuning[论文]
5.Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection[论文]
6.基于知识的对话生成知识图谱增强语言模型[论文]
7.结构感知语言模型预训练改进结构化数据的密集检索 [论文] [代码]
8.Replug: Retrieval-augmented black-box language models [论文]
9.增强适应的猎犬提高了语言的泛化能力 模型作为通用插件 [论文][代码]
推理
1.通过记忆进行泛化:最近邻语言模型[论文]
2.演示-搜索-预测: 为知识密集型 NLP 编写检索和语言模型 [论文][代码]
3.关键字增强检索:与语音界面集成的信息检索新框架。[论文]
4.将检索与思维链推理交织在一起,用于知识密集型多步骤问题。[纸张][代码]
5.生成而不是检索:大型语言模型是强大的上下文生成器 [论文] [代码]
6.In-Context Retrieval-Augmented Language Models [论文]
增强源
非结构化数据
1.UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation[论文][代码]
2.从分类到生成:跨语言检索增强ICL的见解[论文]
3.复印就是你所需要的[纸张]
结构化数据
1.FABULA:使用检索增强叙事结构生成情报报告[论文]
2.基于知识的对话生成知识图谱增强语言模型[论文]
3.KnowledGPT: Enhancing Large Language Models with Retrieval and Storage Access on Knowledge Bases [论文]
4.Graph-ToolFormer:通过ChatGPT的提示增强赋予LLMs图推理能力[论文]
LLM 生成的内容
1.Lift Yourself Up: Retrieval-Augmented Text Generation with Self-Memory [论文]
2.演示-搜索-预测: 为知识密集型 NLP 编写检索和语言模型 [论文]
3.背诵增强语言模型[论文]
4.生成而不是检索:大型语言模型是强大的上下文生成器 [论文]
5.大型语言模型的自知引导检索增强 [论文]
增强过程
一次检索
1.知识密集型NLP任务的检索增强生成[论文]
2.UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation [论文]
3.基于参数化知识指导的增强大型语言模型 [论文]
4.学习检索大型语言模型的上下文示例。[论文]
5.Few-shot Learning with Re-trieval Augmented Language Models [论文] 6.Replug: Retrieval-augmented black-box language models [论文]
7.背诵增强语言模型[论文]
迭代检索
1.演示-搜索-预测: 为知识密集型 NLP 编写检索和语言模型 [论文][代码]
2.Retrieve-and-Sample: Document-level Event Argument Extraction via Hybrid Retrieval Augmentation [论文]
3.Enhancing Retrieval-Augmented Large Language Models with Iterative Retrieval-Generation Synergy[论文]
4.检索生成协同增强大型语言模型[论文]
递归检索
1.Interleaving Retrieval with Chain-of-Reasoning for Knowledge-Intensive Multi-Step Questions [论文][代码]
2.Tree of Clarifications: Answering Ambiguous Questions with Retrieval-Augmented Large Language Models [论文]
自适应检索
1.主动检索增强生成[论文][代码]
2.Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection [论文]
3.基于检索增强编码器-解码器语言模型的上下文学习[论文]