再看长文本大模型遇见RAG:长输入的RAG方案挑战及其缓解实证分析

文摘   2024-10-13 12:09   北京  

今天是2024年10月13日,星期日,北京,天气阴。

关于RAG长文本进展,长文本LLMs与RAG相遇:解决长输入的RAG挑战,《Long-Context LLMs Meet RAG: Overcoming Challenges for Long Inputs in RAG》:https://arxiv.org/pdf/2410.05983值得一看,其探讨了在检索增强生成(Retrieval-augmented generation, RAG)系统中使用长上下文大型语言模型(Long-Context LLMs)所面临的挑战。

先说其中的一些发现:

一个是性能与检索段落数量的关系:研究发现,对于许多长上下文LLMs,随着检索段落数量的增加,生成输出的质量先提高然后下降。这与之前的观点相反,即认为更大的检索集会包含更多相关信息,可能会提高性能。

一个是“难负例”的影响:论文识别出检索到的“难负例”(hard negatives)对LLMs生成性能的有害影响,并提出这是性能下降的一个关键因素。

一个是对应的改进方法:为了减轻这种影响并增强基于长上下文LLM的RAG的鲁棒性,提出了三种方法来提高长上下文LLMs在RAG中的鲁棒性:(1)基于检索重排序的无需训练的方法,(2)隐式调优以增强对难负例的鲁棒性,以及(3)带有中间推理的显式调优以识别相关性。

这个报告还不错,看看会有收获,供大家参考并思考。

一、长上下文LLMs在RAG中的挑战

1、检索上下文大小对RAG性能的影响

1)研究问题

长上下文LLMs能够将更多的检索段落纳入RAG系统。一个关键问题是:更多的检索上下文是否总能转化为更好的性能?

2)实验设置

使用不同的检索器(如BM25和e5)和长上下文LLMs(如Gemma-7B-Chat、Gemma-2-9B-Chat、Mistral-Nemo-12B-Instruct和Gemini-1.5-Pro)在Natural Questions(NQ)数据集上评估RAG系统的性能,并系统地变化每个检索器检索的段落数量。

3)观察结果

增加检索段落的数量最初提高了性能,但随后导致了性能的急剧下降或趋于平稳。这种性能退化在使用召回率更高的检索器(如e5)时更为明显。

因此,增加检索上下文大小在RAG中的有效性取决于检索器的强度。使用强检索器时,性能呈现出“倒U型”模式,而使用弱检索器则显示出更一致(尽管可能有限)的改进。

2、检索质量和LLM能力之间的相互作用

1)研究问题

观察到的性能瓶颈是源于检索器识别相关信息的能力限制,还是源于长上下文LLM有效利用检索上下文的能力限制?

2)实验设置

分析RAG性能与检索质量(召回和精确度)之间的关系,使用Gemma-2-9B-Chat LLM和e5及BM25检索器。

3)观察结果

增加检索段落的数量一致地提高了召回率但降低了精确度,无论使用哪种检索器。RAG系统的总体准确性低于检索召回率,表明即使检索上下文中存在相关信息,LLM也可能无法生成正确答案。

因此,不相关的检索段落(“难负例”)对LLMs的性能有不利影响。即使在检索到相关信息的情况下,难负例的存在可能会误导LLMs,阻碍它们生成准确答案。

3、难负例对长上下文LLM评估的重要性

1)研究问题

在长上下文RAG场景中,大量的知识源检索需要检索众多段落,这增加了包含相关信息(即获得高召回率)的可能性。然而,这也增加了引入难负例的风险。这引发了两个关键问题:(1)当前的长上下文LLMs对这些难负例的鲁棒性如何?(2)难负例的影响是否随着使用的检索器而变化?

2)实验设置

通过控制实验,研究难负例对长上下文LLM性能的影响。使用不同的方法(如e5、Contriever、BM25和随机抽样)检索难负例,并将单个真实段落与不同数量的难负例结合,任务是让LLMs基于此上下文回答查询。

3)观察结果

增加难负例的数量通常会导致RAG答案准确性下降。检索器的强度与难负例的难度直接相关。LLMs在处理来自更强检索器(例如e5)的难负例时比处理来自较弱检索器(例如BM25)或随机抽样的难负例时更加困难。

二、一种不需要额外训练的改进方法

一种不需要额外训练的改进方法,即检索重排序(Retrieval Reordering)。

这种方法旨在通过调整检索结果的顺序来提高长上下文LLMs在RAG系统中的性能,特别是针对“难负例”对模型性能的负面影响。

1、“难负例”的影响

“难负例”对长上下文LLMs在RAG中的性能有显著的负面影响。这些不相关的检索结果可能会误导模型,导致生成不准确的答案。

2、检索重排序策略

根据检索分数对检索到的文档进行重新排序。这种方法利用了LLMs处理输入序列时的“中间遗忘”现象,即模型倾向于更多地关注序列开始和结束部分的信息,而较少关注中间部分。

通过将得分较高的检索文档放在输入序列的开始和结束位置,可以引导LLMs的注意力集中在更相关的信息上,从而减少难负例的影响。

3、检索重排序算法

论文提供了检索重排序的具体算法,该算法根据检索分数对文档进行排序,并按照特定的顺序将它们插入到输入序列中。这种方法旨在通过位置工程来优化LLMs的性能,与提示工程(prompt engineering)相辅相成

4、实验结果

通过实验验证了检索重排序策略的有效性。实验使用了不同的检索器(如e5和BM25)、长上下文LLMs(如Gemma-2-9B-Chat和Mistral-Nemo-12B-Instruct)以及不同的数据集(如NQ和PopQA)。

结果显示,当检索到的文档数量较大时,检索重排序策略显著提高了RAG的准确性,并且一致性地优于原始顺序。这表明,通过战略性地放置文档,检索重排序可以减轻LLMs在处理大量检索结果时面临的挑战。

三、通过数据增强的微调改进RAG的鲁棒性

如何通过数据增强的微调方法来提高长上下文大型语言模型(LLMs)在检索增强生成(RAG)任务中的鲁棒性。

1、隐式提高LLM鲁棒性的微调

这种方法通过在微调阶段将查询和检索文档(包括可能的噪声)一起呈现给LLMs,使模型能够在训练中接触到多样化的检索上下文,从而学习在噪声存在的情况下有效地识别和利用相关信息。

2、微调方法的评估

为了评估RAG特定微调方法的有效性,研究者们使用包含NQ、WoW、Fever和MMLU等多种数据集的混合数据对Gemma-2-9B-Base、Mistral-Nemo-12B-Base和Gemini-1.0-Pro等模型进行了微调,并在多个未见过的数据集上进行了评估,如TriviaQA、PopQA、HotpotQA等。

3、微调方法的效果

实验结果表明,与仅使用聊天模型和直接在问答对上进行标准监督微调(SFT)的基线模型相比,经过RAG特定数据微调的模型(RAG FT)在所有评估的数据集上都表现出一致的性能提升。

这表明RAG FT不仅使LLM能够在训练中“记忆”知识,还使其能够在推理过程中有效地从检索上下文中“提取”相关信息。

4、通过中间推理增强相关性识别的微调

除了隐式微调方法外,还有一种在微调过程中加入中间推理步骤的方法。这种方法要求LLMs在生成最终答案之前,先生成一个推理段落,明确识别出与给定查询相关的检索文档

在训练期间,LLMs会被提供token的推理段落,以指导其学习过程。在推理期间,LLMs被指示首先生成推理段落,然后利用这一分析生成答案。这种方法旨在显式地提高LLMs从检索上下文中的噪声中识别相关信息的能力,从而提高其在RAG中的总体性能。

参考文献

1、https://arxiv.org/pdf/2410.05983

关于我们

老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入


老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
 最新文章