赞
踩
https://github.com/hymie122/RAG-Survey
老刘说NLP : 值得一看的大模型RAG全面总结:从RAG整体架构、评估方案、增强范式再到应用调研
https://mp.weixin.qq.com/s/MOCleX6CR35UYXaYx-Q14A
这个 repo 是收集和分类 RAG 相关论文的,根据以下论文:
Retrieval-Augmented Generation for AI-Generated Content: A Survey
https://arxiv.org/abs/2402.19473
将持续更新
用户的查询可能是不同模式的,是检索器和生成器的输入。
检索器搜索存储中的相关数据源,而生成器则与检索结果交互,并最终生成各种模式的结果。
该工作将RAG分成四种类型
基于查询的RAG也称为提示增强。
它将用户的查询与检索过程中 从文件中获取的信息 直接整合到语言模型输入的初始阶段。
这种模式是RAG应用中广泛采用的方法。
一旦检索到文档,它们的内容就会与用户的原始查询合并,从而创建一个组合输入序列。
这一增强序列随后被输入到预先训练好的语言模型中,以生成回复。
在基于潜在表征的RAG框架中,生成模型与检索对象的潜在表征相互作用,从而提高模型的理解能力和生成内容的质量。
在基于对数的RAG中,生成模型在解码过程中通过对数将检索信息结合起来。
通常情况下,对数通过模型求和或组合,以产生逐步生成的概率。
投机性RAG寻找使用检索代替生成的机会,以节省资源和加快响应速度。
例如,REST用检索取代了推测解码中的小模型,从而生成草稿。
GPTCache尝试通过建立语义缓存来存储LLM响应,从而解决使用LLMAPI时的高延迟问题。
RAG增强的多阶段方案
输入是指用户的查询,它最初被馈送到检索器中。
输入的质量显著影响检索阶段的最终结果。
因此,增强输入变得至关重要。主要包括查询转换和数据增强两种。
1)Query Transformation查询转换
查询转换可以通过修改输入查询来增强检索结果。
Query2doc和HyDE首先使用query生成伪文档,然后使用该文档作为检索的键。
这样做的好处是,伪文档将包含更丰富的相关信息,这有助于检索更准确的结果。
2)Data Augmentation数据增强
数据增强是指在检索前对数据进行预先完善,如去除不相关信息、消除歧义、更新等。
合成新的数据等,可以有效地提高最终RAG系统的性能。
MakeAnAudio使用字幕和音频-文本检索为无语言音频生成字幕以减轻数据稀疏性,并添加随机概念音频以改进原始音频。
在RAG系统中,检索过程至关重要。一般来说,内容质量越好,就越容易激发大模型的情境学习能力,以及其他生成器和范式。内容质量越差,越容易引起模型幻觉。因此,其核心在于如何有效地提高检索过程的有效性。
1)递归检索Recursive Retrieve
递归检索是在检索之前对查询进行拆分,并执行多次搜索以检索更多更高质量的内容的过程,例如,使用思维链(Chain-of-Thought,COT)使模型能够逐步分解查询,提供更丰富的相关知识。
LLMCS将该技术应用于会话系统,通过重写会话记录获得了更好的检索结果。
2)块优化Chunk Optimization
块优化技术是指通过调整块的大小来获得更好的检索结果。句子窗口检索是一种有效的方法,它通过获取小块文本并返回被检索片段周围的相关句子窗口来增强检索。
这种方法确保了目标句子前后的上下文都包含在内,从而对检索到的信息有了更全面的理解。
自动合并检索是LlamaIndex的另一种高级RAG方法,它以树状结构组织文档,父节点包含所有子节点的内容。
例如,文章和段落,以及段落和句子,都遵循亲子关系。在检索过程中,对子节点的细粒度搜索最终返回父节点,从而有效地提供更丰富的信息。
3)微调向量嵌入模型Finetune Retriever
作为RAG系统的核心部件,寻回器在整个系统运行过程中起着至关重要的作用。
一个好的嵌入模型可以使语义相似的内容在向量空间中更加紧密。
召回能力越强,为后续发生器提供的有用信息就越多,从而提高RAG系统的有效性。
因此,嵌入模型的能力对RAG系统的整体有效性至关重要。
此外,对于已经具有良好表达能力的嵌入模型,我们仍然可以使用高质量的领域数据或任务相关数据对其进行微调,以提高其在特定领域或任务中的性能。
REPLUG将LM视为黑盒,根据最终结果更新检索器模型。例如:
APICoder使用python文件和api名称、签名、描述对检索器进行微调。EDITSUM对检索器进行微调,以减少检索后摘要之间的夹板距离。
SYNCHROMESH在损失中添加ast的树距离,并使用目标相似度调优来微调检索器。R-ConvED使用与生成器相同的数据对检索器进行微调。
4)混合检索Hybrid Retrieve
混合检索是指同时使用多种类型的检索方法。RAP-Gen和ReACC同时使用密集检索器和稀疏检索器来提高检索质量。
Ren-cos使用稀疏检索器在句法层面检索相似的代码片段,使用密集检索器在语义层面检索相似的代码片段。
BASHEXPLAINER首先使用密集检索器捕获语义信息,然后使用稀疏检索器获取词汇信息。
RetDream首先用文本检索,然后用图像嵌入检索。
5)重新排序Re-ranking
重新排序技术是指对检索到的内容重新排序,以达到更大的多样性和更好的结果。Re2G采用了继传统寻回犬之后的重新排序token模型。
重新排序模型的作用是对检索到的文档进行重新排序,其目的是为了减少将文本压缩成向量所造成的信息丢失对检索质量的影响。
AceCoder使用选择器对检索到的程序重新排序。引入选择器的目的是为了减少冗余程序,获得多样化的检索程序。
XRICL在检索后使用基于蒸馏的范例重新排序器。
6)元数据过滤Meta-data Filtering
元数据过滤是另一种帮助处理检索到的文档的方法,它使用元数据(如时间、目的等)过滤检索到的文档,以获得更好的结果。
在RAG系统中,生成器的质量往往决定了最终输出结果的质量。因此,该模块的能力决定了整个RAG系统效能的上限。
其增强可以从以下方面进行:
1)提示工程 Prompt Engineering
提示工程(Prompt Engineering)中的技术侧重于提高LLM输出的质量,如Promptcompression、StepbackPrompt、ActivePrompt、Chain of Thought Prompt等,这些技术都适用于RAG系统中的LLM生成器。
其中:
LLM-Lingua采用小模型压缩查询的总长度来加速模型推理,缓解不相关信息对模型的负面影响,缓解“迷失在中间”的现象。
ReMo Diffuse使用ChatGPT将复杂的描述分解为结构文本脚本。
ASAP将范例添加到提示符中以获得更好的结果。示例元组由输入代码、函数定义、分析该定义的结果及其相关注释组成。
CEDAR使用一个设计好的提示模板将代码演示、查询和自然语言指令组织到一个提示中。
XRICL利用COT技术添加翻译对作为跨语言语义解析和推理的中间步骤。
Make An Audio能够使用其他模态作为输入,这可以为后续过程提供更丰富的信息。
2)微调解码器 Decoding Tuning
译码调优是指在生成器处理过程中增加额外的控制,可以通过调整超参数来实现更大的多样性,以某种形式限制输出词汇表等。例如:
interfix通过调节解码器的温度来平衡结果的多样性和质量。
SYNCHROMESH通过实现补全引擎来消除实现错误,从而限制了解码器的输出词汇表。DeepICL根据一个额外的温度因素控制生成的随机性。
3)微调生成器 Finetune Generator
对生成器进行微调,可以增强模型拥有更精确的领域知识的能力,或者更好地与检索对象匹配,例如:
RETRO固定了检索器的参数,并使用生成器中的分块交叉注意机制将查询内容与检索器结合起来。
APICoder对生成器CODEGEN-MONO350M进行微调,将一个经过洗牌的新文件与API信息和代码块结合起来。
CAREt首先使用图像数据、音频数据和视频文本对对编码器进行训练,然后以减少标题损失和概念检测损失为目标对解码器(生成器)进行微调,在此过程中,编码器和检索器被冻结。
animation-a-story使用图像数据优化视频生成器,然后对LoRA适配器进行微调,以捕获给定角色的外观细节。Ret-Dream用渲染的图像微调LoRA适配器
在很多场景下,RAG的最终结果可能达不到预期效果,一些结果增强技术可以帮助缓解这一问题。
例如,重写输出Rewrite Output,SARGAM通过Levenshtein Transformer对删除分类器、占位分类器和插入分类器进行分类,修改代码相关任务中生成的结果,以更好地适应实际的代码上下文。
Ring通过重新排序得到多样性结,候选基于生成器生成的每个token日志概率的平均值。
CBR-KBQA通过将生成的关系与知识图中查询实体的局部邻域中的关系对齐来修正结果。
1)自适应检索 Adaptive Retrieval
实际经验表明,检索并不总是有利于最终生成的结果,当模型本身的参数化知识足以回答相关问题时,过度检索会造成资源浪费,并可能增加模型的混乱。因此,在本章中,我们将讨论确定是否检索的两种方法,即基于规则的方法和基于模型的方法。
基于规则Rule-based,例如:FLARE在生成过程中通过概率主动决定是否搜索以及何时搜索。efficiency-knnlm将KNN-LM和NPM的生成概率与超参数λ相结合,以确定生成和检索的比例。malen等在生成答案前对问题进行统计分析,允许模型直接回答高频问题,对低频问题引入RAG。
又如,Jiang等研究了模型不确定性(Model Uncertainty)、输入不确定性(Input Uncertainty)和输入统计量(Input Statistics),综合评估了模型的置信水平。最后,基于模型的置信度,决定是否检索。
Kandpal等人通过研究训练数据集中相关文档的数量与模型掌握相关知识的程度之间的关系,帮助确定是否需要检索。
基于模型的Model-based,例如,Self-rag使用经过训练的生成器根据不同指令下的检索确定是否执行检索,并通过Self-Reflection评估检索文本的相关性和支持程度。最后,最终输出结果的质量基于批判进行评估。
Ren等人使用“判断提示”来判断大模型是否能够回答相关问题,以及他们的答案是否正确,从而帮助确定检索的必要性。
SKR利用llm自身提前判断是否能回答问题的能力,如果能回答,则不进行检索。
2)迭代RAG
RepoCoder采用迭代检索生成管道,更好地利用代码完成任务中分散在不同文件中的有用信息。它在第i次迭代期间使用先前生成的代码增强检索查询,并获得更好的结果。
ITER-RETGEN以迭代的方式协同检索和生成,生成器当前的输出可以在一定程度上反映出它还缺乏的知识,检索器可以检索缺失的信息作为下一轮的上下文信息,这有助于提高下一轮生成内容的质量。
该工作将RAG的应用分成 面向不同模态的检索增强
2023-03-05(二)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。