论文地址:https://arxiv.org/pdf/2312.10997.pdf
大型语言模型(LLMs)展示了强大的能力,但在实际应用中仍面临挑战,如幻觉现象、知识更新缓慢,以及在回答中缺乏透明度。检索增强生成(RAG)指的是在使用LLMs回答问题之前,从外部知识库中检索相关信息。RAG已被证明能显著提高答案的准确性,减少模型的幻觉现象,特别是对于知识密集型任务。通过引用来源,用户可以验证答案的准确性,并增加对模型输出的信任。它还促进了知识更新和特定领域知识的引入。RAG有效地结合了LLMs的参数化知识和非参数化的外部知识库,使其成为实施大型语言模型的最重要方法之一。本文概述了LLMs时代RAG的发展范式,总结了三种范式:Naive RAG、Advanced RAG和Modular RAG。论文对RAG的三个主要组成部分的总结和组织:检索器、生成器和增强方法,以及每个组件中的关键技术。此外,还讨论了如何评估RAG模型的有效性,介绍了RAG的两种评估方法,强调了评估的关键指标和能力,并提出了最新的自动评估框架。最后,从垂直优化、横向可扩展性以及RAG的技术栈和生态系统三个方面介绍了潜在的未来研究方向。
一、介绍
大型语言模型(LLMs)在自然语言处理(NLP)领域的表现超越了之前任何模型。GPT系列模型、LLama系列模型、Gemini以及其他大型语言模型在多个评估基准上展现了卓越的语言和知识掌握能力,超越了人类水平。
然而,大型语言模型也显示出许多缺点。它们常常制造虚假事实,在处理特定领域或高度专业化的查询时缺乏知识。例如,当所需信息超出模型训练数据的范围或需要最新数据时,LLM可能无法提供准确的答案。这一限制在将生成型人工智能部署到现实世界的生产环境中构成挑战,因为盲目使用黑盒LLM可能不够。
传统上,神经网络通过微调模型以参数化知识来适应特定领域或专有信息。虽然这种技术取得了显著成果,但它需要大量的计算资源,成本高昂,并需要专业知识,使其适应性较差。参数化知识和非参数化知识发挥着不同的作用。参数化知识通过训练LLMs获得,并存储在神经网络权重中,代表了模型对训练数据的理解和概括,构成生成回应的基础。另一方面,非参数化知识存在于外部知识源中,如向量数据库,不直接编码到模型中,而是作为可更新的补充信息。非参数化知识使LLMs能够访问和利用最新或特定领域的信息,提高回应的准确性和相关性。
纯参数化的语言模型(LLMs)将从大量语料库中获得的世界知识存储在模型的参数中。然而,这类模型存在局限性。首先,难以保留训练语料中的所有知识,尤其是较不常见和更具体的知识。其次,由于模型参数无法动态更新,参数化知识随时间容易过时。最后,参数的扩展导致训练和推理的计算开销增加。为了解决纯参数化模型的限制,语言模型可以采用半参数化方法,通过将非参数化语料库数据库与参数化模型整合。这种方法被称为检索增强生成(RAG)。
检索增强生成(RAG)这一术语最初由[Lewis et al., 2020]引入。它结合了预训练的检索器和预训练的seq2seq模型(生成器),并进行端到端微调,以更可解释和模块化的方式捕获知识。在大型模型出现之前,RAG主要专注于端到端模型的直接优化。检索方面常见的做法是密集检索,如使用基于向量的密集通道检索(DPR),以及在生成方面训练较小的模型。由于整体参数规模较小,检索器和生成器通常会进行同步的端到端训练或微调。
自ChatGPT等LLM出现后,生成式语言模型成为主流,在各种语言任务中展现出令人印象深刻的性能。然而,LLMs仍面临幻觉、知识更新和数据相关问题。这影响了LLMs的可靠性,在某些严肃任务场景中,尤其是需要访问大量知识的知识密集型任务中,LLMs表现不佳,如开放领域问答和常识推理。参数内的隐含知识可能不完整且不足。
后续研究发现,将RAG引入大型模型的上下文学习(ICL)中可以缓解上述问题,具有显著且易于实现的效果。在推理过程中,RAG动态地从外部知识源检索信息,使用检索到的数据作为参考来组织答案。这显著提高了回应的准确性和相关性,有效解决了LLMs中存在的幻觉问题。这种技术在LLM问世后迅速受到关注,已成为改善聊天机器人和使LLM更实用的最热门技术之一。通过将事实知识与LLMs的训练参数分离,RAG巧妙地结合了生成模型的强大能力和检索模块的灵活性,为纯参数化模型固有的知识不完整和不足问题提供了有效的解决方案。
本文系统地回顾和分析了RAG的当前研究方法和未来发展路径,将其归纳为三个主要范式:Naive RAG、Advanced RAG和Modular RAG。随后,论文提供了三个核心组成部分的综合总结:检索、增强和生成,突出了RAG的改进方向和当前技术特点。在增强方法部分,当前的工作被大致为三个方面:RAG的增强阶段、增强数据源和增强过程。此外,论文总结了评估系统、适用场景和与RAG相关的其他内容。通过本文,读者将对大型模型和检索增强生成有更全面和系统的了解。他们将熟悉知识检索增强的演变路径和关键技术,能够辨别不同技术的优缺点,识别适用场景,并探索当前实际应用中的典型案例。值得注意的是,在以前的工作中,Feng et al.[2023b]系统回顾了将大型模型与知识结合的方法、应用和未来趋势,主要关注知识编辑和检索增强方法。Zhu et al.[2023]介绍了大型语言模型检索系统增强的最新进展,特别关注检索系统。同时,Asai et al.[2023a]专注于“什么”、“何时”、“如何”的问题,分析并阐释了基于检索的语言模型的关键过程。与之相比,本文旨在系统地概述检索增强生成(RAG)的整个过程,并特别关注通过知识检索增强大型语言模型生成的研究。
RAG算法和模型的发展在图1中进行了说明。在时间线上,大部分与RAG相关的研究都是在2020年之后出现的,2022年12月ChatGPT发布成为一个重要的转折点。自ChatGPT发布以来,自然语言处理领域的研究进入了大模型时代。Naive RAG技术迅速获得重视,导致相关研究数量的快速增加。在增强策略方面,自RAG概念提出以来,就一直在进行预训练和监督微调阶段的强化研究。然而,在推理阶段的强化研究大多出现在LLMs时代。这主要是由于高性能大模型的高训练成本。研究人员试图通过在推理阶段包含RAG模块,以成本有效的方式将外部知识融入模型生成中。关于增强数据的使用,早期的RAG主要关注于非结构化数据的应用,特别是在开放域问答的背景下。随后,检索的知识来源范围扩展,使用高质量数据作为知识来源有效地解决了大模型中错误知识内化和幻觉等问题。这包括结构化知识,知识图谱是一个代表性的例子。最近,自我检索引起了更多的关注,这涉及到挖掘LLMs本身的知识以增强它们的性能。
本论文的后续章节结构如下:第二章介绍RAG的背景。第三章介绍RAG的主流范式。第四章分析RAG中的检索器。第五章着重介绍RAG中的生成器。第六章强调介绍RAG中的增强方法。第七章介绍RAG的评估系统。第八章提供了对RAG未来发展趋势的展望。最后,在第九章中,总结了本综述的主要内容。
二、背景
在本章中,我们将介绍RAG的定义,如以及RAG与诸如微调之类的其他模型优化技术之间的比较。
2.1 定义
RAG的含义随着技术的发展而扩展。在大语言模型时代,RAG的具体定义是指模型,当回答问题或生成文本,首先从大量文档中检索相关信息。随后,它利用这些检索到的信息来生成响应或文本,从而提高预测的质量。RAG方法允许开发人员避免对为每个特定任务重新训练整个大型模型。相反,他们可以附加一个知识库,提供额外的向模型输入信息并提高准确性其回应。RAG方法特别适合用于知识密集型任务。总之,RAG系统由两个关键阶段组成:
- 利用编码模型基于问题检索相关文档,如BM25、DPR、ColBERT和类似方法;
- 生成阶段:使用检索到的上下文作为条件,系统生成文本。
2.2 RAG与微调
在大型语言模型(LLM)的优化中除了RAG,另一种重要的优化技术正在进行微调。
RAG类似于为模型提供教科书,允许它基于特定查询检索信息。这该方法适用于模型需要回答特定的询问或解决特定的信息检索任务。然而,RAG不适合教模型来理解广泛的领域或学习新的语言,格式或样式。
微调类似于让学生通过广泛的学习内化知识。这种方法当模型需要复制特定的结构、样式或格式时非常有用。微调可以提高非微调模型的性能,并使交互更加频繁有效率的它特别适合强调基础模型中的现有知识,修改或自定义模型的输出,并向提供复杂的指令模型然而,微调不适合合并模型中的新知识或需要的情况新用例的快速迭代。
微调类似于让学生通过长期学习内化知识。此方法适用当模型需要复制特定的结构、样式等时,或格式。微调可以实现优于的性能非微调模型和交互更有效。微调特别适合强调现有基本模型中的知识,修改或自定义模型的输出,并用复杂的指令指示模型。但是,微调不适合添加新的为模型或需要快速迭代新用例的场景提供知识。RAG和微调(FT)的比较可参考如下表1。
RAG和微调并不互斥,但可以相互补充,可以在不同level增强模型。在某些情况下,将这两者结合起来技术可以实现最佳的模型性能。使用RAG进行优化和微调的整个过程可能需要多次迭代才能获得令人满意的结果。现有研究已经证明了检索增强生成(RAG)的显著优势与其他优化大型语言模型的方法相比:
-
- RAG通过将答案与外部知识联系起来,减少语言模型中的幻觉问题,并使生成的回答更加准确可靠,从而提高准确性;
- 使用检索技术可以识别最新信息。与仅依赖于训练数据的传统语言模型相比,RAG保持回复的及时性和准确性;
- 透明度是RAG的一个优势。通过引用用户可以验证答案的准确性,增加了对模型输出的信任;
- RAG具有定制功能。通过对相关文本进行索引,可以针对不同领域定制模型语料库,为特定领域提供知识支持;
- 在安全和隐私管理方面,RAG,中的内置角色和安全控件数据库,可以更好地控制数据的使用。相比之下,微调后的模型可能缺乏对谁可以的明确管理访问哪些数据;
- RAG更具可扩展性。它可以处理大规模数据集无需更新所有参数并创建训练套件,使其更经济高效;
- 最后,RAG得出的结果更值得信赖。RAG从最新数据中选择确定性结果,而微调后的模型可能会出现幻觉和处理动态数据时不准确,缺乏透明度和可信度
三、RAG框架
RAG的研究范式在不断演变。本章主要介绍了RAG研究范式的演变,我们将其分为三种类型:Naive RAG、Advanced RAG和Modular RAG。尽管早期RAG具有成本优势,比原生LLM更好;它仍然面临许多不足。Advanced RAG和Modular RAG的出现旨在解决Naive RAG的具体缺陷。
3.1 Naive RAG
Naive RAG研究范式代表了最早的方法论在广泛使用后不久就变得突出采用ChatGPT。Naive RAG的经典过程是:索引、检索和生成。Naive RAG概括为“检索”-“读取”框架。
索引
从源获取数据并为其建立索引的管道通常是离线处理的。具体来说,数据索引的构建包括以下步骤:
- 数据索引:清洗和提取原始数据、转换诸如PDF、HTML、Word、Markdown等不同文件格式转换为纯文本;
- 分块:将加载的文本分为较小的块。因为语言模型通常有上下文长度有限制,因此有必要创建尽可能小的文本块(不是越小越好);
- 嵌入和创建索引:通过语言模型将文本编码为向量。得到的向量将用于后续的检索过程,以计算向量和问题向量之间的相似性。嵌入模型需要很高的推理速度。由于需要对大量的语料库进行编码,并在用户提问时实时对问题进行编码,因此模型的参数大小不应太大。生成嵌入后,下一步是创建索引,存储原始语料库块,并以键值对的形式进行嵌入,以便在未来快速频繁地搜索。
检索
给定用户的输入,使用与第一个stage相同的模型把query转换为向量。然后计算query嵌入和语料库中的文档块嵌入的相似度。选择前K个相似度最高的文档块作为增强上下文信息。
生成
把给定的问题和相关文档合并为新的Prompt提示。然后,大型语言模型基于所提供的信息来回答所述问题。它会判断是基于大型模型知识还是仅基于给定信息进行回答,取决于不同任务的需要。如果有对话历史信息,也可以合并到Prompt中进行多轮对话。
Naive RAG的缺点
Naive RAG在三个领域面临主要挑战:检索质量、响应生成质量和增强过程。
关于检索质量,问题是多方面的。主要问题是精度低,检索集中并非所有块都与查询相关,这会导致潜在的幻觉问题。第二个问题是低召回率,当所有相关块没有全部被召回时,LLM就没有获得足够的上下文来合成答案。此外,过时的信息带来了另一个挑战,即数据冗余或过时的数据可能导致不准确的检索结果。
就生成响应的质量而言,问题同样是多样化的。幻觉是一个突出的问题,模型编造了一个上下文中不存在的答案。另一个问题是召回的信息可能是不相关的,导致模型生成的答案无法解决查询问题。此外,毒性或偏见,即模型产生有害或冒犯性反应,是另一个问题。
最后,增强过程也面临一些挑战。根据当前生成任务,从相关段落检索文档是至关重要的。如果处理不当,输出可能会显得不连贯或不连贯。冗余和重复是另一个问题,特别是当多个检索到的段落包含相似的信息,导致生成步骤中的内容重复时。此外,确定多个检索到的段落对生成任务的重要性或相关性具有挑战性,并且扩充过程需要平衡每个段落的值适当。检索到的内容也可能来自不同的写作风格或语调,增强过程需要调和这些差异以确保输出的一致性。最后,生成模型可能过度依赖增强信息,导致输出仅重复检索到的内容,而不提供新的价值或合成信息。
3.2 Advanced RAG
Advanced RAG针对Naive RAG的不足进行了有针对性的改进。在检索生成的质量方面,Advanced RAG结合了检索前和检索后