RAG
在学习RAG中, 发现这个网站的内容特别好,也比较全面,https://www.promptingguide.ai/zh/research/rag ,以下内容主要参考这个链接。
RAG Suvery
论文Retrieval-Augmented Generation for Large Language Models: A Survey 系统回顾和分析了RAG目前的研究途径和未来发展路径,将其归纳为朴素型RAG、高级型RAG和模块化型RAG三大范式 。并对RAG的检索、增强和生成三个核心组件进行了综合总结,重点介绍了RAG的改进方向和当前技术特点。在关于增强方法的部分中,目前的工作分为三个方面:RAG的增强阶段、增强数据源和增强过程。此外,本文还总结了与RAG相关的评价体系、适用场景等相关内容。
RAG 简介
纯参数化语言模型 (LLM) 将其从大量语料库中获得的世界知识存储在模型的参数中。然而,这种模型有其局限性。
- 首先,很难从训练语料库中保留所有知识,尤其是对于不太常见和更具体的知识。(幻觉,答案缺乏透明度)。
- 其次,由于模型参数不能动态更新,参数化知识容易随着时间的推移而过时。(知识更新缓慢)
- 最后,参数的扩展会导致训练和推理的计算费用增加
RAG是一个将输入与一组相关的支持文档结合起来的技术,这些文档通常来自于像维基百科这样的来源。这些文档被添加到输入提示中,一起送入文本生成器,从而产生最终的输出。RAG的这一机制特别适用于需要应对信息不断更新的场景,因为大语言模型(LLM)所依赖的参数知识本质上是静态的。通过RAG,语言模型可以不经过重新训练而直接访问最新信息,以便生成可靠的、基于检索的输出。
RAG 的典型工作流程
具体步骤如下:
- 输入: 是指LLM系统需要回答的问题。如果不使用RAG,问题直接由LLM回答。
- 索引: 使用RAG时,会先将相关文档分块,为这些块生成嵌入向量,并将它们索引到向量库中。在进行查询时,查询内容也会以相似的方式进行嵌入。
- 检索: 通过比较查询内容与索引向量,找到相关的文档。
- 生成: 将找到的相关文档与原始提示结合作为额外上下文,然后传递给模型进行回应生成,最终形成系统对用户的回答。
例如,直接使用模型可能因为不了解最新事件而无法回答问题。但是,通过使用RAG,系统能够提取模型回答问题所需的相关信息。
**RAG的来源**
检索增强生成 (RAG) 一词最早由 [Lewis et al., 2020] 引入。它将预训练的检索器与预训练的 seq2seq 模型(生成器)相结合,并进行端到端微调,以更可解释和模块化的方式捕获知识。在大型模型出现之前,RAG 主要专注于端到端模型的直接优化。检索端的密集检索,例如使用基于矢量的密集通道检索 (Dense Passage Retrieval, DPR)[Karpukhin et al., 2020],以及在生成端训练较小的模型是常见的做法。由于整体参数大小较小,检索器和生成器通常都进行同步的端到端训练或微调 [Izacard et al., 2022]。
随后的研究发现,将RAG引入大型模型的上下文学习(ICL)可以缓解LLM的上述问题,并具有显着且易于实施的效果。在推理过程中,RAG 会从外部知识源动态检索信息,使用检索到的数据作为参考来组织答案。这大大提高了响应的准确性和相关性,有效地解决了 LLM 中存在的幻觉问题。这种技术在 LLM 出现后迅速获得关注,并已成为改进聊天机器人和使 LLM 更实用的最热门技术之一。通过将事实知识与LLM的训练参数分离,RAG巧妙地将生成模型的强大能力与检索模块的灵活性相结合,为纯参数化模型固有的不完整和不足的知识问题提供了有效的解决方案。
RAG 范式的演变
近几年来,RAG(检索增强生成)系统经历了从初级阶段到高级阶段,再到模块化阶段的演变。这一进化过程旨在克服性能、成本和效率方面的挑战。
1. 初级 RAG
初级 RAG 采用了一个传统过程,包括索引建立、文档检索和内容生成。简单来说,系统根据用户的输入查询相关文档,然后将这些文档和一个提示语结合起来,交给模型生成最终的回答。如果涉及到多轮对话,还可以将对话历史整合到提示语中。
初级 RAG 的局限性包括低精确度(检索到的信息不够准确)和低召回率(有时候无法检索到所有相关的信息)。此外,有时候模型可能会接收到过时的信息,这正是 RAG 系统希望首先解决的问题之一。这可能会导致模型产生不基于事实的幻想性回答,从而影响回答的准确性和可靠性。
当引入额外信息以增强回答时,还可能出现信息重复或冗余的问题。处理多个检索到的文档时,如何排列它们的优先级以及如何使生成的内容风格和语调一致也是需要考虑的挑战。我们还需要确保生成的任务不会过分依赖于这些额外信息,避免模型仅仅重复这些信息而缺乏创新。
2. 高级 RAG
高级 RAG 解决了初级 RAG 面临的问题,尤其是在提高检索质量方面,包括优化检索前、检索时和检索后的各个过程。
在检索前的准备阶段,我们通过优化数据的索引建立来提高数据质量 ,包括改善数据的细节度、优化索引结构、添加元数据、改进对齐方式以及混合检索方法。
在检索阶段,我们可以通过改进嵌入模型来提高上下文片段的质量。例如,通过对嵌入模型进行微调,以提高检索的相关性,或者使用能够更好理解上下文的动态嵌入模型(如 OpenAI 的 embeddings-ada-02 模型)。
在检索后的优化过程中,我们专注于解决上下文窗口限制和减少噪音或分散注意力的信息。常用的方法包括重新排列文档,以将更相关的内容放在提示的前后,或者重新计算查询与文档片段之间的语义相似度。此外,通过压缩提示信息也有助于解决这些问题。
3. 模块化的 RAG 介绍
模块化 RAG,顾名思义,通过增强其功能模块来提升性能,例如加入相似性检索的搜索模块,以及在检索工具上进行精细调整。模块化 RAG 能够根据具体的任务需求,添加、替换或调整模块之间的工作流程,从而实现更高的多样性和灵活性。这种设计让模块化 RAG 不仅包括了朴素 RAG 和高级 RAG 这两种固定模式,还扩展了包括搜索、记忆、融合、路由、预测和任务适配等多种模块,以解决各种问题。
随着 RAG 系统构建变得更加灵活,一系列优化技术相继被提出,用于进一步优化 RAG 流程,包括:
- 混合式搜索探索 : 结合了关键词 搜索与语义搜索等多种搜索技术,以便检索到既相关又富含上下文的信息,特别适用于处理多样化的查询类型和信息需求。
- 递归式检索与查询引擎 : 通过从小的语义片段开始 ,逐步检索更大的内容块以丰富上下文的递归过程,有效平衡了检索效率与信息的丰富度。
- StepBack-prompt 提示技术 : 一种特殊的提示方法,能让大语言模型进行概念和原则的抽象化处理,从而引导更加深入的推理过程。当应用于 RAG 框架时,能够帮助模型超越具体事例,进行更广泛的推理。
- 子查询策略 : 采用树状查询或按序查询小块信息的不同策略,适用于多种场景。LlamaIndex 提供的子问题查询引擎允许将大的查询任务拆分成多个小问题,分别利用不同的数据源进行解答。
- 假设性文档嵌入技术 (HyDE): 通过生成查询的假设性回答并嵌入,来检索与这个假设回答相似的文档,而不是直接使用查询本身,以此来优化检索效果。
RAG框架简述
在这一部分,我们将概述 RAG 系统的核心组成部分,包括检索、生成和增强三大环节的最新进展。这些组件共同构成了 RAG 的基础,使其能够有效处理各种信息检索和内容生成的任务,进而提升系统的整体性能和应用灵活性。
检索技术
在RAG系统中,检索是关键环节,负责从大数据中找出最有价值的信息。我们可以通过多种方法提升检索器的效能,包括:
提升语义理解
改善检索器背后的语义理解能力至关重要。这里有一些改进策略:
- 数据分块策略: 确定合适的数据分块方式非常关键,这依赖于你的数据内容和应用需求。例如,针对单句效果更佳的句子转换器,与处理256或512个词元的文本时,使用文本嵌入-ada-002模型会更加出色。此外,还需考虑用户提问的长度、应用需求和词元数量上限。实际应用中,通过尝试不同的数据分块策略来发现最优的检索效率是常见做法。
- 专业领域的嵌入模型微调: 确定了有效的数据分块策略后,如果你的工作聚焦于特定领域,可能还需要对嵌入模型进行微调。否则,可能会导致系统无法正确理解用户查询。可针对广泛的领域知识或特定的下游任务进行微调。例如,BGE-large-EN 开发的 BAAI 模型,就能通过微调来提高检索的相关性。
查询与文档的精准匹配
确保用户查询与数据库中文档的匹配度,特别是在查询可能缺少具体语义信息或措辞不够精确的情况下,显得尤为重要。实现这一目标的方法包括:
- 查询重写: 通过多种技术改写查询,以提高匹配的准确性,例如利用Query2Doc、ITER-RETGEN和HyDE等工具。
- 查询嵌入的优化: 通过调整查询的嵌入表示,使其更好地与任务相关的潜在空间对齐,从而提升查询效果。
检索器与大语言模型的协同优化
此外,还需要确保检索器产出的结果与大语言模型(LLM)的预期一致,以实现最佳的协同工作效果。
- 优化检索技术: 通过分析大语言模型(LLM)提供的反馈,进一步完善检索系统。例如,通过适应性增强检索技术(AAR),REPLUG,和UPRISE等方式来实现。
- 引入辅助工具: 通过加入外部工具,如PRCA,RECOMP,和PKG,辅助优化信息对齐过程。
文本生成
在RAG系统中,负责将检索到的信息转化为流畅文本的生成器扮演着关键角色,该文本将成为模型输出的最终成果。这个转换过程涉及到复杂多变的输入信息,有时候需要特别努力来调整语言模型以更好地适应从查询和文档中得到的输入数据。这一挑战可以通过后期检索处理和模型微调来克服:
- 检索后处理与模型固定: 在保持大语言模型(LLM)不变的情况下,通过后处理技术改善检索结果的质量,如通过信息简化和结果优先排序等手段。信息简化有助于减少冗余信息,解决模型处理长文本的限制,并提升最终文本的生成质量。优先排序则是将最相关的信息排在前面,以提高检索的准确性。
- 针对RAG系统的LLM微调: 为了提高RAG系统的效率,可以对生成文本的过程进行细致调整或微调,确保生成的文本既自然流畅又能有效地结合检索到的文档信息。
增强技术简介
增强技术指的是将检索到的信息内容有效融入当前任务生成过程的方法 。在深入探讨增强技术的过程、阶段及数据之前,先来看一下 RAG(检索增强生成模型)的核心组成部分分类:
在预训练、微调和推理等多个阶段,都可以应用检索增强技术。
-
增强阶段: RETRO 示例展示了如何从零开始利用检索增强进行大规模预训练;它额外引入了一个基于外部知识构建的编码器。此外,通过结合 RAG 进行微调,可以进一步提升系统的性能。在推理阶段,根据具体任务需求采取多种技术将检索内容有效融入,以优化 RAG 的应用效果。
-
增强数据源: 选择何种增强数据对 RAG 模型的效果影响极大。数据源主要分为三类:非结构化数据、结构化数据以及由大语言模型生成的数据。
-
增强过程: 对于一些需要多步骤推理的问题,单次检索可能不足以解决,因此提出了以下几种方法:
- 迭代检索 :模型通过多轮检索,不断深化和丰富信息内容。例如,RETRO 和 GAR-meets-RAG 就是采用这种方法。
- 递归检索 :在这种方法中,一次检索的输出成为另一次检索的输入,逐步深入挖掘复杂查询的相关信息,适用于学术研究和法律案例分析等场景。著名实践包括 IRCoT 和 Tree of Clarifications。
- 自适应检索 :根据特定需求调整检索过程,选择最合适的时机和内容进行检索,以达到最佳效果。这种方法的代表性研究包括 FLARE 和 (Self-RAG)[https://arxiv.org/abs/2310.11511\]。
下图详细描绘了 RAG 研究的不同增强方面,涵盖了增强的阶段、数据源和具体过程。
RAG 与 微调的区别
RAG 特别适合于融合新知识,而微调则能够通过优化模型内部知识、输出格式以及提升复杂指令的执行能力,来增强模型的性能和效率 。
在LLM的优化中,除了RAG之外,另外一个重要的优化技术就是微调。
RAG类似于为模型提供教科书,允许它根据特定查询检索信息。此方法适用于模型需要回答或者解决特定信息检索任务的场景。但是RAG不社会教授模型理解广泛领域或者学习新的语料或样式。
微调(Fine-tuning) 类似于使学生能够通过广泛的学习来内化知识。当模型需要复制特定结构、样式或格式时,此方法非常有用。微调可以提高未微调模型的性能,并使交互更加高效。它特别适用于强调基础模型中的现有知识、修改或自定义模型的输出,以及为模型提供复杂的指令。但是,微调不适合将新知识合并到模型中,也不适合需要对新用例进行快速迭代的情况。
微调类似于让学生通过长时间的学习来内化知识。当模型需要复制特定结构、样式或格式时,此方法适用。微调可以实现优于非微调模型的性能,并且交互效率更高。微调特别适用于强调基础模型中的现有知识、修改或自定义模型的输出,以及使用复杂的指令指示模型。但是,微调不适合向模型添加新知识,也不适合需要针对新用例进行快速迭代的方案。RAG和微调(Fine-tuning,FT)之间的具体比较可以在表1中阐明。
RAG 和微调不是相互排斥的,而是可以相辅相成的,从而在不同层面上增强模型的功能。在某些情况下,将这两种技术结合起来可以实现最佳模型性能。使用 RAG 进行优化和微调的整个过程可能需要多次迭代才能获得满意的结果。
现有研究表明,与其他优化大型语言模型的方法相比,检索增强生成 (Retrieval-Augmented Generation, RAG) 在优化大语言模型 (Large Language Model) 方面,相较于其他方法具有显著的优势【Shuster et al., 2021; Yasunaga et al., 2022; Wang et al., 2023c; Borgeaud et al., 2022】:
- RAG 通过将答案与外部知识相关联,减少语言模型中的幻觉问题,并使生成的响应更加准确和可靠,从而提高了准确性。
- 使用检索技术可以识别最新信息。这使得 RAG 在保持回答的及时性和准确性方面,相较于只依赖训练数据的传统语言模型有明显优势。
- 透明度是RAG的一大优势。通过引用来源,用户可以验证答案的准确性,从而增加对模型输出的信任。
- RAG 具有定制功能。通过索引相关文本语料库,可以针对不同领域定制模型,为特定领域提供知识支持。
- 在安全和隐私管理方面,RAG凭借其在数据库中的内置角色和安全控制,可以更好地控制数据使用。相比之下,微调模型可能缺乏对谁可以访问哪些数据的明确管理。
- RAG 更具可扩展性。它可以处理大规模数据集,而无需更新所有参数和创建训练集,使其更具经济效率。
- 最后,RAG 产生的结果更值得信赖。RAG从最新数据中选择确定性结果,而微调模型在处理动态数据时可能会表现出幻觉和不准确,缺乏透明度和可信度。
特征比较 | RAG | 微调 |
---|---|---|
知识更新 | 直接更新检索知识库,确保信息保持最新状态,无需频繁重新训练,适用于动态数据环境。 | 存储静态数据,需要重新训练知识和数据更新。 |
外部知识 | 熟练利用外部资源,特别适用于文档或其他结构化/非结构化数据库。 | 可用于将预训练中从外部学习的知识与大型语言模型保持一致,但对于频繁更改的数据源可能不太实用。 |
数据处理 | 需要最少的数据处理 | 依赖于构建高质量的数据集,有限的数据集可能无法产生显著的性能提升。 |
模型定制 | 专注于信息检索和整合外部知识,但可能无法完全自定义模型行为或写作风格 | 运行根据特定的语气或术语调整LLM行为、写作风格或特定领域知识 |
可解释性 | 答案可以追溯到特定的数据源,提供更高大的可解释性和可追溯性 | 像黑匣子,可解释性比较低 |
计算资源 | 需要计算资源来支持与数据库相关的检索策略和技术,需要维护外部数据源集成和更新 | 准备和管理高质量的训练数据集,定义微调目标以及提供相应的计算资源是必要的 |
延迟要求 | 涉及数据检索,可能导致更高的延迟 | 微调后的LLM可以在没有检索的情况下进行响应,从而降低延迟 |
减少幻觉 | 本质上不太容易产生幻觉,因为每个答案都基于检索得到证据 | 可以通过基于特定领域数据训练模型来帮助减少幻觉,但面对不熟悉的输入时仍可能表现出幻觉 |
道德和隐私问题 | 从外部数据库中存储和检索文本会产生道德和隐私问题 | 由于训练数据的敏感内容,可能会产生道德和隐私问题 |
RAG 模型评估解析
就像衡量大语言模型(LLM)在不同维度的表现一样,评估对于深入理解和提升 RAG(检索增强生成)模型在各种应用场景下的性能至关重要。传统上,人们通过特定任务的指标,如 F1 分数和准确率(EM),来评价 RAG 系统在下游任务上的表现。例如,RaLLe 就是一个评估知识密集型任务中检索增强型大语言模型性能的著名框架。
在 RAG 模型的评估中,我们既关注检索的内容质量,也关注生成的文本质量。为了评估检索的效果,我们采用了推荐系统和信息检索等知识密集领域的评估指标,比如归一化折扣累计增益(NDCG)和命中率。而在生成质量的评估上,可以从相关性、有害内容的筛选(对未标记内容)或准确性(对已标记内容)等不同维度进行考量。整体上,RAG 模型的评估可以采用手动或自动的方法进行。
具体来说,RAG 框架的评估着眼于三个主要质量指标和四大能力。这三个质量指标包括:上下文相关性(即检索到的信息的精确度和相关度)、答案忠实度(即答案对于检索到的上下文的忠实反映)、以及答案相关性(即答案与提出的问题的契合度)。此外,还有四项能力评估 RAG 系统的适应性和效率,包括:对噪声的鲁棒性、负面信息的排除、信息整合能力和面对假设情况的鲁棒性。下面是一个评估 RAG 系统不同方面所用指标的概览:
RAG 研究的挑战与前景
- 上下文长度问题:随着LLM不断扩大上下文范围,调整RAG 以确保它能够捕捉最相关和关键的上下文信息。
- 系统的鲁棒性:如何处理与现实相反的信息和对抗性信息,对于提高RAG的性能至关重要
- 混合方法的探索:如何将RAG于专门调整过的模型结合使用,以实现最佳效果
- 扩大语言模型的作用:如何进一步提升大语言模型在RAG系统中的作用和能力,是一个高度关注的领域
- 规模化法则的探究:大语言模型的规模化法则及其在RAG系统重的应用仍然是一个未解问题
- 生产级RAG的挑战:要实现可投入生产使用的RAG系统,需要在性能、效率、数据安全性、隐私保护等方面达到工程上的卓越。
- 多模态RAG的发展:如何将RAG应用到更多领域,比如图像、音频、视频和编码
- 评价机制的完善: 随着 RAG 被用于构建更为复杂的应用,开发能够细致评估上下文相关性、创新性、内容多样性、准确性等方面的评价工具变得尤为重要。此外,提高对 RAG 的解释性研究和工具开发也是必要的。
构建 RAG 系统的工具
构建 RAG 系统时,可以选择多种综合工具,如 LangChain、LlamaIndex 和 DSPy,这些工具提供了强大的功能来支持不同的需求。此外,还有一些专门的工具,比如 Flowise AI,它提供了一个低代码平台,使得构建 RAG 应用变得更加简单。其他值得关注的技术还包括 HayStack、Meltano 和 Cohere Coral 等,这些技术为特定的需求提供了解决方案。同时,一些软件和云服务提供商也开始提供以 RAG 为中心的服务,例如 Weaviate 的 Verba 适合构建个人助理应用,而亚马逊的 Kendra 则提供智能企业搜索服务。
这些工具和服务的开发,不仅推动了 RAG 技术的应用范围扩展,也为研究人员和开发者提供了更多的可能性,使他们能够更容易地探索和实现复杂的 RAG 应用。