大模型+检索增强(RAG、Atlas 和 REPLUG)
https://zhuanlan.zhihu.com/p/651380539
https://github.com/ninehills/blog/issues/97
1. 检索增强生成 RAG
在问答与对话场景中常见采用两种主要方法以获得一个回复:一种是基于搜索的方法,在外部知识库中搜索并提供满意的内容;另一种是基于生成的方法依赖于强大的语言模型内部存储的知识资源以产出内容。前者具有较高的可靠性与可控性,并且存在局限性在于缺乏多样性;后者虽然能够产生丰富多样的内容但由于依赖于内部存储的知识资源而导致不可控性以及解释性不足。将上述方法结合在一起Facebook AI Research团队与伦敦大学学院及纽约大学在2020年期间共同推出了这一创新方案:基于外部知识搜索辅助下的生成模型Retrieval-Augmented Generation (RAG)
- 检索:这指的是该系统在大规模数据资源中进行信息检索的过程。
- 生成:在检索完成后,该系统能够输出模仿人类语言风格产生的文本内容,并综合处理收集到的各项数据信息。
通过检索增强的方法来改善大型语言模型(LLM)的局限性。例如,在处理幻觉问题方面(如胡言乱语的情况),以及解决知识有限性的问题上(如补充最新知识或获取公司内部信息)。其核心思想在于建立一个外部知识库,在回答问题时调用外部数据以提升LLM生成准确且相关答案的能力。
原理
RAG 由两部分组成:
- 第一部分 负责从知识库中检索出与给定查询信息相关的top-k个相关文档集合;
- 第二部分 将查询信息与相关k个文档进行组合后作为QA任务的提示输入。

第一部分:Retriever
在Retriver模块的第一阶段中,RAG系统利用两个不同的BERT模型分别编码了外部知识库中的关键信息以及查询信息,并计算这些向量的点积,在此基础上选取点积值最高的k个文档作为检索结果。随后,在第二部分中,则采用查询信息与前k个相关文档的组合生成新的输入样本进行处理。
第二部分:Generator
Generator 中有两种使用文档的方式。
我们称这种模型为 RAG-Sequence model;通过同一个文档生成每一个词的位置信息,该模型首先根据给定的文档 z_iz_izi ,然后计算概率值 p(y|x, z_i) 。

我们称这种方法为 RAG getToken 模型 其核心在于从多个独立文本源中提取关键词并进行组合匹配 具体地 在处理第 i 个关键词时 其出现的概率则基于所有可能来源文本的概率加权求和 这等价于评估该关键词在各个来源中的独立贡献

BART 建立在完整的 transformer pre-trained model 基础上,并采用 denoising 任务作为其预训练目标;研究者将 BART-large 设定为 RAG 的生成器模型。
在训练阶段中,唯有处理 query 的BERT以及生成BART参与微调过程中的参数更新工作;而用于嵌入外部知识的BERT则无需调整其参数设置。进入测试环节后,在计算当前词的概率时,则会提前完成前一位置的所有候选词概率已提前计算完毕;因此,在这种情况下RAG-Token 型模型类似于基本生成模型,在解码时采用了beam search方法;相比之下,在处理RAG-Sequence型模型时则必须对每个文档分别进行beam search处理以获取各位置候选词的概率分布。
8大挑战
数据源加载与处理
在各种数据加载、解析过程中,如何尽可能保持原始数据的信息关联与内涵是一个需要注意的关键问题。可以通过探索多种加载与解析策略,并对比不同Python库的表现来优化处理效果。此外,在使用LLM时建议设定清晰且合适的prompt能够帮助模型更好地理解上下文信息。

一个高质量的prompt可以通过整合丰富多样的辅助信息源来生成:包括背景知识、互联网检索结果、RAG检索结果以及in-context QA实例。

数据切分难
- chunk_size参数:将输入文本序列划分为多个子序列时的最大划分长度。考虑到大语言模型通常会对输入的token序列长度有限制(例如GPT-3模型的最大输入长度为2048个token),因此需要将整个文本划分为多个较小的chunk进行处理。每个chunk的最大长度由chunk_size参数决定。
- 相邻chunk之间的overlap度:用于衡量相邻子序列共享token数量的比例。为了保证整个文本语义信息的有效连贯性,在分割text时通常会设置一定比例的重叠区域(即overlap度)。这个参数决定了相邻两个chunk之间共享token的数量比例。
举例来说,在设置chunk_size为1024、chunk_overlap为128的情况下,则会对长度为2560的文本序列进行划分:第一段(Chunk一)包含第[公式...];第二段(Chunk二)包含第[公式...](与前一个Chunk共享第...);第三段(Chunk三)包含剩余部分并继续延伸原有范围以符合最长片段限制的要求。这种划分策略既符合最长片段限制的要求,同时也确保了各片段之间的语义连贯性

如何划分原始文本的段落(即如何选择chunk size的大小),这通常会影响后续处理的结果?这在实际应用中往往需要根据具体应用场景和业务需求来确定。建议参考领域内的标准做法以确保一致性和可重复性。
- 优化超参数设置,并持续进行测试与验证。
- 解耦 index 和 generation 的块大小管理提供了两种不同的策略。

- 在检索过程中,在构建基于文档树架构的情况下(例如 段1与 段2相连),可以让 LMM 分别执行摘要操作,在搜索阶段依据摘要结果定位对应的段落(同样采用相似度评估的方式),随后在具体段落内部继续使用 ann 方法进行详细检索。
- 将文档划分得极为细致是非常有必要的做法;这样可以使每个 chunk 内部所包含的内容具有高度明确性。一旦某个 chunk 被检索到后(例如编号为k的那个),我们就可以考虑其前后相邻的 chunk(即编号为k-1、k和k+1 的那些)作为上下文依据来进一步分析和理解整体内容。
检索效果不好

找不到符合要求的chunk(涉及模型相关的术语和数据切分环节); chunk内部存在不准确的信息(建议在执行摘要操作之前进行初步筛选阶段的相关性过滤)
提升方法:
- 可以采用混合搜索 Hybrid Search ,即融合多种相似度评估指标如 Bm25、关键词及向量表示
- 融合多种搜索字段如元数据 meta data,并且建议利用 LLM 提取 chunk 的核心信息作为关键词;同时可结合上下文摘要来提升检索质量
检索结果过多或过长

检索结果的过滤:后处理,其实就是一个重排的过程

指示模型处理原始查询,并利用元数据中的类型集合来辅助我们筛选出符合条件的子集。
Re-rank的挑战在于必须依赖真实业务domain的数据进行微调;通过引入LLM来进行reranking,并为LLM设计合适的prompt。

答案合成策略:

Default 版本:

迭代式 refine 版本:一条 一条 chunk 输入,不断让模型修改更新原答案

可解释性与鲁棒性

复杂query的处理
Prompt → Sub-query , 不断拆分成子问题 → 直到可以回复

2. Atlas
Atlas:基于检索增强的语言模型实现零样本学习 ... Atlas :基于检索增强的语言模型实现零样本学习的过程。
由两个子模型构成的 Atlas 系统,在处理某个任务时会调用检索器从海量数据中筛选出与之最匹配的 top-k 文档,并将这些相关文档与查询信息一起导入到语言模型中进行处理。

2.1 模型架构 Architecture
Atlas 模型的核心训练策略在于采用统一损失函数对检索器和语言模型进行协同训练。这些组件均建立在预训练的 Transformer 基础之上:其中:
信息检索系统基于Transformer-based架构设计,在经过自监督学习过程后的双层编码机制下运行。该系统将查询和文档分别经由独立的编码器处理后进行内积计算以获得相似度值。这种设计使Atlas能够在不依赖文档标注的情况下利用对比损失函数优化实现高效的预训练检索系统,在内存占用方面相比传统方法有显著缩减。
信息提取系统基于大规模预训练模型T5遵循解码架构设计,在针对查询片段生成过程中将每个检索到的passage与question组合形成统一输入片段后分别通过解码器进行多头注意力机制连接操作以生成最终回答结果。采用Fusion-in-Decoder策略可以有效提升该系统的扩展能力使其能够更灵活地适应文档数量的增长需求。

2.2 训练目标 Training objectives
通过引入监督信号对检索器进行训练,并同时对检索器retriever和语言模型LM进行联合优化:当语言模型识别到有用文档时,则要求检索器目标促使检索者将所述文档排至更高位置。基于这一思路,论文提出了四种不同类型的损失函数。
Attention Distillation (ADist) :通过在decoder中的cross attention模块进行计算得到的文档与输出之间的得分为每个文档提供了重要性指标。对于每一个文档,在语言模型decoder的每一层网络中每一个attention头的位置上进行操作后得到各个token对应的注意力权重,并将这些权重取平均得到该文档的重要度评分。从而获得了一系列不同文档各自的注意力分配情况统计结果P_{ATTN}(d_k)。为了优化整个系统性能,在训练过程中我们旨在最小化检索系统返回高概率项的概率分布与语言模型内部注意力机制产生的分配情况之间的Kullback-Leibler散度KL(P_{RETR}, P_{ATTN})。也就是说,在训练过程中我们希望所设计的目标函数能够让检索系统返回的相关项的概率分布尽可能贴近语言模型内部生成的内容关注点P_{ATTN}(\cdot)。需要注意的是,在整个系统的训练过程中只有检索模块本身的参数会被更新优化


注

Perplexity Distillation (PDist) :这是ADist的一个优化版本,在ADist的基础上对目标分布进行了调整。具体来说, 将ADist中所使用的pATTN作为基础, 更改为基于语言模型得分经 softmax运算后得到的概率分布, 然后通过最小化原始pATTN与这一改进版本之间的概率差异来优化检索器的参数设置.


Leave-one-out Perplexity Distillation (LOOP):基于第3步的改进版本,在计算过程中将对应的语言模型的概率得分转换为移除特定文档后该语言模型得分的负数,并设定其训练目标等同于最小化pATTN与新版语言模型概率分布之间的KL散度。这一损失函数在计算资源上的消耗显著高于前述方法。

2.3 代理任务 Pretext task
The unsupervised learning approach is applied to jointly pretrain a retriever and a language model based on the pretext task. The research paper also explores various methods aimed at addressing the associated tasks.
a) Prefix language modeling
按照N个字符为单位将文本进行分块处理,在每个块中进一步分割为长度为N/2的两个连续子序列,并将第一个子序列作为查询参数输入检索模块以获取相关信息资源库中的相关文档列表随后根据检索结果生成最终的目标输出其中目标输出内容对应于第二个子序列所包含的信息内容
b) Masked language modeling
按照每N个字符为单位对文本进行分割,在每个分割好的段落(chunk)中随机抽取多个平均长度为3的小片段进行遮蔽处理(Masking)。继续此过程直到所有被遮蔽的部分总计占整个文本长度的15%。随后将这些经过遮蔽处理后的段落作为查询输入,并通过检索模块获取相关的文档信息。接着利用语言模型来重构这些被遮蔽掉的部分。
c) Title to section generation
基于维基百科的文章数据为基础,在系统中将文章标题和各章节标题作为查询输入,并通过检索模块获取相关文档;最后使用语言模型生成各章节的具体内容描述。
2.4 高效的检索器 Fine-tuning
Re triever中的语料经过文档编码器处理后转换为向量存入索引中。在协同训练Re triever与语言模型LM的过程中,当Re triever中的文档编码器发生.update时,则相应地需要对相关索引进行调整。全面.update 索引将会消耗大量计算资源和时间。特别是在微调阶段,在Re triever中所使用的.train样本数量远远少于其对应的. document数量时,在调整所有相关. index所需的时间上会产生一定的延迟。
a) Full index update
在训练过程中每隔一段时间就会进行全局更新所有的索引节点操作。这种方法的优势在于通过全局更新所有的索引节点能够显著提升retriever中的文档编码器与整个索引空间的相关性,并且可以根据实际需求调整更新周期以适应不同场景下的性能需求。实验中设定总共有37, 万的数据样本等待处理,在每个batch处理过程中平均返回2条相关数据;每隔1, ousand次迭代后就需要完成一次完整的全局索引更新操作;值得注意的是这项耗时较长的操作仅占总训练资源消耗的大约三成左右
b) Re-ranking
在每一次训练过程中,在线学习系统都会从候选文本库中检索出top-L份最相关的内容,并在此基础上对这些被选中的top-K份内容进行排序后分配给语言模型进行学习任务。实验表明,在本研究中发现,在每一次迭代过程中所处理的数据量与实际应用规模相当。具体而言,在每一次迭代过程中所处理的数据量与实际应用规模相当。此外,在计算资源分配方面也进行了优化设计:具体而言,在每一次迭代过程中所处理的数据量与实际应用规模相当。此外,在计算资源分配方面也进行了优化设计:根据实验结果表明
c) Query-side fine-tuning
在训练过程中,retriever组件仅优化query编码器而不调整document编码器这一设计使得无需额外调整索引结构即可实现高效检索效果。从计算开销的角度来看,在这种设计模式下相关参数的优化对模型整体训练阶段并未产生任何增量式负担。值得注意的是该方案是否固定document编码器对检索性能有显著影响?在多数few-shot学习任务中其对模型性能提升的空间有限。然而在特定条件下这种策略可能会带来意外的好处
总结
检索增强的优势
- 可解释性:大模型具备黑箱特性,在研究者难以通过解析其运行机制获取深入理解的情况下, 检索增强型方法可以直接提取相关文献内容, 进而通过对检索结果的研究达到对 Atlas 工作机制的深入理解。
- 可控性:人们普遍认为大模型存在数据泄露风险, 即有时大模型对测试问题的回答并非建立在学习能力基础之上, 而是依赖于其存储了大量的参考文献内容; 在本文中, 作者通过剔除可能造成信息泄露的数据项后, 模型正确率从 56.4%降至 55.8%, 仅降低 0.6个百分点, 这表明检索增强方法能够有效规避模型过度拟合的风险。
- 可更新性:检索增强型方法无需额外进行重新训练即可仅更换原有的知识库来实现即时更新。
https://www.51cto.com/article/717069.html
https://zhuanlan.zhihu.com/p/595258642
https://zhuanlan.zhihu.com/p/563129454
3. REPLUG
REPLUG: Retrieval-Augmented Black-Box Language Models
这篇研究提出了一种可视为"黑盒"式检索增强的新方法。在这一创新模式下,语言模型扮演了一个不可训练的角色(其参数被固定以防止更新和优化),而检索组件则是唯一能够进行微调的部分。
其本质上是在基础语言模型架构中增加了专门用于信息检索的模块(Retrieval-Plug, R-P)。这一过程通过该模块能够高效获取与输入内容高度相关的上下文信息,并将其整合进新的输入序列中。值得注意的是,在实际应用中这类补充信息往往会被整合到用户的查询提示(Query Prompt)中。而整个系统的训练过程中并未涉及该额外模块的具体参数更新或优化。
RERLUG LST(基于LM监督检索的RERLUG)本质上是RERLUG的一个增强版本。它通过语言模型产生监督信号来优化检索组件,并促使该组件选择那些有助于减少语言模型生成文本困惑度的内容。
该文结合了多种先进的检索增强技术(如RAG、Atlas和REPLUG)进行深入探讨
