想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。
1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其最大潜力。
CSDN教学平台录播地址:https://edu.csdn.net/course/detail/39987
想快速掌握自动编程技术吗?叶老师专业培训来啦!这里用Cline把自然语言变代码,再靠DeepSeek生成逻辑严谨、注释清晰的优质代码。叶梓老师视频号上直播分享《用deepseek实现自动编程》限时回放。
视频号(直播分享):sphuYAMr0pGTk27 抖音号:44185842659
尽管AIGC取得了显著进展,但它仍然面临一些挑战,例如如何保持知识的更新、如何整合长尾知识、以及如何避免训练数据泄露等问题。这些问题促使研究者探索新的解决方案,以提高AIGC的性能和可靠性。
检索增强生成(RAG)作为一种新兴的范式,通过引入信息检索过程来增强生成过程,从而应对上述挑战。RAG通过检索相关信息来增强模型的生成能力,提高了生成内容的准确性和鲁棒性。RAG的核心思想是利用可检索的数据存储来增强生成模型,这种非参数化的记忆形式易于修改,能够容纳广泛的长尾知识,并能够编码敏感数据。
由北京大学的研究团队对RAG技术在AIGC场景中的整合进行了全面回顾。这项研究首先根据检索器如何增强生成器,对RAG基础进行了分类,涵盖了所有RAG场景,揭示了促进未来进展的技术和发展。
一般架构
图1展示了一个典型的检索增强生成(Retrieval-Augmented Generation,简称RAG)架构。RAG架构由两个主要部分组成:检索器(Retriever)和生成器(Generator)。
在图1中,用户提交的查询首先被送入检索器。检索器的任务是在预先构建的数据存储中搜索与查询相关的信息。这些信息可以是文档、代码片段、图像或其他类型的数据,它们为生成器提供了额外的上下文和知识。检索到的信息随后与原始查询一起被送入生成器。
生成器负责产生最终的输出。在RAG系统中,生成器通常是一个预训练的模型,比如大型语言模型(LLM),它能够利用检索到的信息和原始查询来生成响应、文章、代码或其他类型的AIGC。生成器与检索结果的交互可以以多种方式进行,例如,检索结果可以作为生成器的额外输入,或者在生成过程的中间阶段作为潜在表示加入,或者以 logits 的形式贡献给最终的生成结果。
RAG方法论
RAG的基础范式
查询式RAG:这种范式通过将用户的查询与检索到的信息直接输入到生成器的初始阶段,实现提示增强。在RAG应用中非常普遍,检索后的内容与用户的原始查询合并,形成复合输入,然后由生成器处理以生成响应。例如,REPLUG通过将语言模型视为“黑盒”,有效地将相关外部文档整合到查询中。在代码领域,通过将文本或代码的上下文信息整合到提示中,采用查询式范式,从而提高了下游任务的有效性。
基于潜在表示的RAG:在这种框架中,检索到的对象作为潜在表示被纳入生成模型,增强了模型的理解能力,并提高了生成内容的质量。例如,FiD和RETRO是两个经典的基于潜在表示的RAG结构,许多后续工作都基于它们进行了修改。FiD通过不同的编码器处理每个检索到的段落及其标题以及查询,然后通过单个解码器合并这些潜在表示以产生最终输出。
基于逻辑门的RAG:在这种RAG中,生成模型在解码过程中通过逻辑门整合检索信息。通常,逻辑门通过简单叠加或模型计算步骤生成的概率。例如,在文本领域,kNN-LM及其变体通过在每个解码步骤中将语言模型概率与相似前缀的检索距离相融合,从而控制最终输出。
推测式RAG:推测式RAG寻求使用检索代替纯生成的机会,旨在节省资源并加快响应速度。例如,REST用检索替换了推测式解码中的小型模型,从而实现草稿的生成。
RAG增强
输入增强:输入在检索阶段的最终结果中起着重要作用。本节介绍了两种输入增强方法:查询转换和数据增强。例如,Query2doc和HyDE使用原始查询生成伪文档,该伪文档随后用作检索的查询。TOC利用检索内容将含糊的查询分解为多个明确的子查询,这些子查询随后提交给生成器并聚合以产生最终结果。
检索器增强:在RAG系统中,检索内容的质量决定了输入生成器的信息。例如,ReACT使用Chain-of-Thought将查询分解以进行递归检索,并提供更丰富的信息。RAPTP使用蒙特卡洛树搜索进行模拟,以选择最优的检索内容,然后通过模板化处理并提交给生成器以输出。
生成器增强:在RAG系统中,生成器的质量通常决定了最终输出结果的质量。例如,LLMLingua通过应用小型模型压缩查询的整体长度,以加速模型推理,减轻无关信息对模型的负面影响。
结果增强:在许多场景中,RAG的结果可能无法达到预期效果,而一些结果增强技术可以帮助缓解这个问题。例如,SARGAM在代码相关任务中通过使用特殊的Transformer以及删除、占位符和插入分类器,来优化与现实世界代码上下文的对齐。
RAG流程增强:RAG流程增强指的是优化RAG的整体流程,以实现更好的性能结果。例如,FLARE通过生成过程中的概率主动决定是否进行搜索。AdaptiveRAG基于查询复杂性通过分类器动态决定是否进行检索,这是一个更小的LM。
RAG的应用
为了与RAG基础和增强的分类体系相呼应,表I中展示了它们在不同任务中的使用情况。
RAG在文本领域的应用
文本生成是RAG最重要和最广泛应用的领域之一。
-
问答(Question Answering):问答过程涉及从大量综合性文本源中提取信息,以回答提出的问题。FiD和REALM模型通过识别与查询最相关的前k篇文章片段,并将每个片段连同问题一起发送给大模型以生成k个回答。然后,这些回答被综合成一个最终答案。Toutanova等人通过将知识图谱的子图替换REALM中的文本语料库,取得了不错的成果。RETRO模型利用注意力机制将问题与相关检索文档在模型内整合,以产生最终答案。SKR观察到使用RAG并不总是有益于问答,因此探索了引导模型评估其对相关知识的掌握,随后适应其使用外部资源进行检索增强。TOG引入了一个创新的知识图谱增强型大模型框架,通过促进大模型与知识图谱之间的交互,并使用束搜索扩展推理路径空间,表现出色。NPM开创性地使用了非参数数据分布代替softmax层,使参数更少的模型也能有效地工作。
-
事实验证(Fact Verification):事实验证通常指确定给定的自然语言文本和一个相关的说法或断言是否与文本中的事实相匹配。CONCRETE利用跨语言检索机制,利用多语言证据的丰富资源,有效地弥合了在事实检查数据集中资源不足的语言之间的差距。Atlas表明,使用RAG支持大模型在知识密集型任务中的显著提高了它们的少样本学习能力。Hagstrom等人证明了在解决不一致问题时,搜索增强比增加模型大小更有益。
-
常识推理(Commonsense Reasoning):常识推理涉及机器根据其获得的外部知识和应用,以类似人类的方式推断或对问题或任务做出决策的能力。KG-BART通过将知识图谱中不同概念之间的复杂相互关系纳入考虑,扩展了概念领域。它采用图注意力机制帮助大模型构建更细致、逻辑上更连贯的句子。
-
人机对话(Human-Machine Conversation):人机对话涉及机器理解自然语言并熟练地使用这一技能与人类进行交流的能力。ConceptFlow利用常识知识图谱来构建对话,根据注意力分数引导对话的流程,并推动对话向前发展。Cai等人将文本生成任务重新想象为填空测试,通过检索和提炼过去的对话历史,取得了显著的成果。
-
神经机器翻译(Neural Machine Translation):神经机器翻译(NMT)是将文本从源语言自动翻译到目标语言的过程。Cai等人提出了一种创新的方法,利用单语语料库以及多语言学习技术,挑战了神经机器翻译中对双语语料库的传统依赖。
-
事件抽取(Event Extraction):事件抽取是NLP中涉及识别和分类文本中特定事件的过程,并将其与相关实体关联起来。这些事件通常由动词表示,实体是参与事件的参与者。R-GQA通过识别和利用与给定问题最接近的问答对,从而丰富了处理当前查询可用的信息。
-
摘要(Summarization):摘要任务旨在从长篇文本中提取关键信息,生成简洁、连贯的摘要,概括主要主题。摘要有两种主要方法:提取式和抽象式。提取式摘要涉及从源文本中自动选择和编译关键短语,它不创造新的句子,而是重新利用原文中的段落。抽象式摘要则涉及理解原文的意义并将其改写成新的句子,这可以更流畅地传达来源的意图,但由于其复杂性,在实施方面面临更大的挑战。
RAG在代码领域的应用
历史上,代码相关任务通常采用独立的检索和生成方法。对于检索,可以使用抽象语法树(AST)或文本编辑距离来识别相似的代码片段。对于生成,采用序列到序列模型来生成代码或自然语言。近期的RAG研究结合了检索和生成技术,以提高整体性能。
-
代码生成(Code Generation):代码生成旨在将自然语言(NL)描述转换为代码实现。查询式RAG是代码生成的常用方法。它使用检索到的信息为基于变换器的生成模型构建提示,包括相似的示例、相关的API详细信息、文档、导入语句和全局函数。SKCODER检索相关的代码片段,以产生用于最终代码生成的草图模板。RRGCode使用交叉编码器对检索结果进行排名。CODEAGENT设计了用于网络搜索、文档检索、程序生成和正确性测试的代理。ARKS结合了迭代RAG来重新制定查询并更新检索源。
-
代码摘要(Code Summarization):代码摘要任务反过来将代码转换为NL描述。许多研究工作使用额外的编码器处理检索结果,然后结合它们用于随后的解码器。Re2Com和EditSum使用BM25检索相似的代码,并使用LSTM生成摘要。它们分别对输入、检索到的代码和相应的摘要进行编码,然后在解码器中组合隐藏状态或逻辑门。
-
代码补全(Code Completion):代码补全类似于代码版本的“下一句预测”任务。查询式RAG是代码补全的主要范式。Drain等人检索了用于函数补全的模板函数。ReACC使用了稀疏和密集检索。RepoCoder通过用先前生成的代码增强检索输入来执行迭代RAG。
-
自动程序修复(Automatic Program Repair):查询式RAG经常用于自动程序修复,以帮助生成模型修复错误代码。RING、CEDAR和RAP-Gen都使用混合检索(包括稀疏和密集检索)来寻找相似的错误消息、错误代码或修复措施,以构建提示。InferFix在提示中包含了错误类型、位置、相关语法层次结构和类似的修复措施。
-
文本到SQL和基于代码的语义解析(Text-to-SQL and Code-based Semantic Parsing):语义解析将自然语言转换为清晰、结构化的表示,如SQL或其他特定领域的语言,通常需要代码的辅助。所有相关作品都采用了RAG的查询式变体。XRICL使用非英语话语搜索并重新排列英语话语,然后构建提示以生成SQL查询。SYNCHROMESH检索相似的NL和SQL以构建提示,然后进行受限的语义解码,以在SQL生成过程中执行丰富的句法和语义约束。
RAG在知识领域的应用
结构化知识,包括知识图谱(KG)和表格,在语言相关任务中得到了广泛应用。它通常作为检索源来增强生成。除了常规的稀疏和密集检索外,NER(命名实体识别)技术和图感知邻居检索被应用于识别和提取相关实体和关系。
- 知识库问答(Knowledge Base Question Answering):知识库问答通常利用知识库来确定问题的正确答案。许多语义解析方法已经被提出,这些方法基于问题生成逻辑形式(例如SPARQL)。查询式RAG是主流方法。Unseen Entity Handling使用FreeBase检索主题实体,这些实体与查询结合生成SPARQL输出。CBR-KBQA结合查询和检索到的(查询,逻辑形式)对进行生成。它还修订最终结果以与知识图中存在的关系对齐。GMT-KBQA重新排列检索到的实体和关系,并在生成之前进行关系分类和实体消歧。RNG-KBQA、TIARA、BLLM augmentation和Shu等人重新排列候选逻辑形式或知识图谱中的实体,以构建提示。Uni-Parser包括来自提及检测、两跳路径提取和数据库中的表格的实体。ECBRF遵循案例推理范式,检索相似的三元组以构建提示输入。FC-KBQA从BM25或提及检测中提取相关类、关系和实体。StructGPT从知识图谱、表格或数据库中提取相关信息。KAPING通过实体匹配提取相关信息。Sen等人用关系分布生成模型替换检索,以加权三元组。Retrieve-Rewrite-Answer使用跳预测、关系路径预测和三元组抽样将子图检索到提示中。Keqing通过大模型分解复杂问题为简单子问题,然后检索子问题模板,并从知识图谱中提取候选实体,最后通过ChatGPT生成答案。Liu等人利用检索到的对来探索大模型对形式语言的理解和生成能力。InteractiveKBQA将大模型视为代理,将知识图谱视为环境。在每一步中,大模型在知识图谱上进行实体链接,并生成当前思想和行动,直到获得最终答案。ReTraCk通过提及检测和密集检索检索实体和模式。它使用LSTM生成逻辑形式,通过知识特定规则整合检索项目。
RAG在图像领域的应用
图像生成是指使用人工智能和机器学习领域中的算法创建新图像的过程。
-
图像生成(Image Generation):检索过程不仅有助于为罕见或未见过的主体生成高质量的图像,而且还减少了参数数量和计算开销。对于基于GAN的模型,RetrieveGAN使用可微检索器进行图像块选择,便于端到端训练。IC-GAN将数据建模为每个训练实例周围的条件分布,对这些实例进行生成器和鉴别器的条件化。最近,扩散模型在图像生成方面超越了GAN。KNN-Diffusion和RDM在CLIP嵌入和图像邻居的条件下训练扩散模型,实现了对标签、文本提示和零样本风格的后期条件化。
-
图像描述(Image Captioning):图像描述是生成图像的文本描述的过程。检索增强的图像描述通常与一系列检索到的描述综合描述。MA通过历史背景和图像文本训练集的目标词构建的记忆库进行增强,并在推理上下文中进行查询。在对抗性训练中,RAMP将检索到的描述作为鉴别器训练的参考,并采用记忆增强的注意力和复制机制以更好地利用检索到的描述。RA-Transformer和EXTRA都是基于检索增强的基于变换器的描述模型,它们利用交叉注意力对编码的检索描述进行操作。
RAG在视频领域的应用
视频描述是将视觉内容翻译成描述性话语的过程。
- 视频描述(Video Captioning):KaVD通过使用相关文档中的主题实体和事件等背景知识生成新闻视频描述。R-ConvED通过Dual Encoding检索相关句子和视频,并通过卷积编码器-解码器网络预测目标词。CARE结合了三种模态数据,即帧、音频和检索到的文本,以提供全局和局部语义指导作为增强。EgoInstructor专注于第一人称视频,检索相关的外观中心视频和文本,并通过编码的视频与交叉注意力的大模型生成描述。
RAG在音频领域的应用
- 音频生成(Audio Generation):音频生成通常使用自然语言提示合成音频。Re-AudioLDM检索与给定输入提示相关的音频-字幕对,并生成输出音频。Make-AnAudio根据文本提示检索相关音频,然后为基于扩散的文本到音频模型训练构建伪提示。
RAG在3D领域的应用
- 文本到3D(Text-to-3D):检索可以应用于增强3D资产生成。ReMoDiffuse检索相关动作实体,并使用扩散模型生成动作,具有语义调制的注意力和条件混合指导。AMD设计并融合了两个动作扩散模型。一个分支对原始提示进行条件化,而另一个分支将提示分解为解剖学脚本并检索相似的动作。RetDream检索3D资产,以增强2D扩散模型的变分得分蒸馏。这些资产提供了几何和适应的2D先验,不仅为粒子初始化增加了额外的速度,而且还通过LoRA帮助优化了2D扩散模型。
RAG在科学领域的应用
RAG也成为分子生成、医疗任务和计算研究等许多跨学科应用的有前景的研究方向。
- 药物发现(Drug Discovery):药物发现的目标是生成同时满足多种属性的分子。RetMol将轻量级检索机制和分子字符串整合到预训练的编码器-解码器生成模型中,以检索并与输入融合示例分子。PromptDiff引入了一种交互式的、检索增强的3D分子扩散模型,检索一组策划的配体参考资料,以指导合成满足特定设计标准的配体。
RAG基准评估
RAG基准评估涵盖了四个维度:
-
噪声鲁棒性(Noise Robustness):测试大模型是否能够从含有噪声的文档中提取必要信息。这一维度关注模型在面对不完美数据时的表现,确保模型能够有效识别并利用有用的信息。
-
负面拒绝(Negative Rejection):评估大模型在检索内容不足时是否能够拒绝响应。这一评估确保模型在缺乏足够信息的情况下不会给出错误或不相关的答案。
-
信息整合(Information Integration):检查大模型是否能够通过整合多个检索内容来获取知识并作出响应。这一维度强调模型在处理复杂查询时的综合能力,确保其能够有效整合不同来源的信息。
-
反事实鲁棒性(Counterfactual Robustness):确定大模型是否能够识别检索内容中的反事实错误。这一评估确保模型在面对不一致或错误的信息时能够保持准确性。
RAGAS、ARES和TruLens三个基准评估了以下三个方面,使用独立的评估大模型:
-
可信度(Faithfulness):评估基于检索内容的事实准确性,确保生成的答案与检索到的信息一致。
-
答案相关性(Answer Relevance):确定生成的结果是否能够有效回应查询,确保模型的回答具有针对性。
-
上下文相关性(Context Relevance):评估检索内容的相关性及其简洁性,确保所提供的信息既相关又易于理解。
CRUD-RAG基准将RAG任务分为四类:创建(Create)、读取(Read)、更新(Update)和删除(Delete),通过文本续写、问答、幻觉校正和开放域多文档摘要等方式进行评估。
MIRAGE基准专注于医疗领域,评估医疗问答系统的性能,确保在医疗信息检索和生成中保持高效性和准确性。
KILT则通过对维基百科快照的对齐来验证信息的准确性,使用BLEU分数来定位相关文本,并进行过滤以确保质量,从而为基于证据的预测或引用提供多样化的检索系统。
局限性与未来方向
RAG在实际应用中面临一些挑战和局限。
-
检索结果中的噪声:信息检索过程中不可避免地会产生噪声,这些噪声可能会影响RAG系统的性能。研究表明,噪声在某种程度上可能有助于生成过程,但目前对于如何利用噪声以提高RAG效果仍不明确。
-
额外开销:RAG系统的引入增加了系统的复杂性和延迟,尤其是在结合了复杂增强方法时,这种开销尤为显著。
-
检索器与生成器之间的差异:两者目标可能不一致,且潜在空间可能不同,这使得设计它们之间的交互变得复杂。
-
系统复杂性增加:RAG的引入增加了系统的复杂性,需要更多的专业知识来调整和优化。
-
冗长的上下文:基于查询的RAG可能会大幅延长上下文,这对于有上下文长度限制的生成器来说是个挑战。
未来研究方向可能包括:
- 设计更先进的增强方法基础,以充分发挥RAG的潜力。
- 探索灵活的RAG流程,如递归、自适应和迭代RAG,以提高系统性能。
- 将RAG技术应用于更广泛的领域,并设计特定于领域的RAG技术。
- 优化RAG系统的部署和处理,以实现更高效的运作。
- 结合长尾和实时知识,设计具有持续更新知识和灵活源的RAG系统。
- 将RAG与其他技术结合,如微调、强化学习等,以提高AIGC的有效性。
研究团队提供了一个项目仓库,其中包含了相关的代码和资源,以便研究人员和开发者能够更容易地实现和测试RAG系统。项目链接如下:
论文链接:https://arxiv.org/pdf/2402.19473