UC Berkeley |RAFT: 对不相关的RAG检索结果进行建模
大家好,我是HxShine,今天推荐一篇UC Berkeley的一篇RAG效果优化的文章~
大模型引入新的知识一般有两个途径,一种是RAG检索增强,一种是SFT,哪种方式效果比较好呢?或者说有没有一些其他的更为有效的方式呢?
这篇论文介绍了一种新的训练方法——检索增强型微调(RAFT:Retrieval Augmented FineTuning),旨在改善领域特定的RAG(Retrieval-Augmented Generation)条件下,大型语言模型(LLMs)对问题的回答能力。
简单来说,RAFT将RAG+SFT+COT有机的结合起来,在多项问答测试集上,利用LLama2 7B的模型,就取得了比ChatGPT3.5+RAG结合的方法。具体来说,在RAFT中,面对一个问题及一组检索到的文档时,模型被训练为忽略那些不相关的知识,同时挖掘其中与问题的相关知识的来提升问答效果。同时其结合链式思考COT策略提升推理能力。其在PubMed、HotpotQA、Hugging Face、Torch Hub、TensorFlow Hub等问答数据集上,取得了非常不错的效果。
一、概述
Title: RAFT: Adapting Language Model to Domain Specific RAG URL: https://arxiv.org/abs/2403.10131
Code: https://github.com/ShishirPatil/gorilla
Authors: Tianjun Zhang, Shishir G. Patil, Naman Jain, Sheng Shen, Matei Zaharia, Ion Stoica, Joseph E. Gonzalez
1 Motivation
• 大模型引入新知识(例如紧急新闻或私有领域知识)要么通过RAG,要么微调,但如何最佳地让模型获得这些新知识还值得探索。
• 为了改善LLMs在特定领域中的性能,特别是在开放书本式问答("open-book" questioning)任务中,本文提出了RAFT(Retrieval Augmented FineTuning)方法,尝试将SFT,RAG,COT进行结合,提升特定领域QA的效果。
2 Methods
背景:哪种方式引入外部知识最好?
Figure 1: How best to prepare for an Exam?
1.纯监督的微调(FT):种方法通过直接“记忆”输入文档或者回答练习问题(不引用文档)来“学习”,类似于考试前直接背诵或者通过做练习题来准备,但没有引用外部文档。
2.纯检索增强生成(RAG):这种方法相当于开卷考试,但是没有提前学习。即在回答时可以引用文档,但没有充分利用固定领域设置和提前接触到测试文档的学习机会。
3.监督微调和检索增强生成结合(RAFT):结合了监督式微调(SFT)和检索增强生成(RAG),通过引用文档中的相关段落来生成答案,同时在模拟的不完美检索环境中进行训练,从而有效地为开卷考试设置做准备。
省流版方案总结:
RAFT: 在RAFT中,给定一个问题和一组检索到的文档,训练模型忽略那些无助于回答问题的文档,即不相关的文档,并引用相关文档中的正确知识来回答问题。
RAFT方法步骤:
• 采用检索增强型微调(RAFT)方法,训练模型识别并忽视那些分散注意力的文档。
• 通过引用问题答案的相关文档中的确切文本序列,实现对问题更准确的回答。
•结合RAFT的思路链式(chain-of-thought-style)响应,提高了模型的推理能力。
RAFT方法概览:
Figure 2: Overview of our RAFT method.
与传统RAG不同,RAFT方法探索在训练过程中如何使用正负文档集来调整大型语言模型(LLMs),它的核心思想是从一组正文档和负文档中读取外部知识,让大模型学习过滤非相关知识的能力。在测试时,所有方法都遵循标准的RAG设置,即在上下文中提供检索到的前k个文档。
总的来说RAFT方法通过模拟不完美的检索环境和结合链式思考风格的训练,提高模型在特定领域内的RAG任务性能。通过这种方式,RAFT方法旨在提高模型的准确性和鲁棒性,使其在面对检索到的文档时能够更好地识别和利用相关信息。
RAFT方法的关键特点包括:
1.区分正负文档:在训练数据中,模型被提供了一个问题(Q)、一组文档(Dk),以及一个由其中一个文档(D∗)生成的链式思考风格的答案(A∗)。这里的文档被分为“正样本”文档(D∗),即包含问题答案的文档,和“干扰”文档(Dk),即不包含答案相关信息的文档。
2.训练数据的准备:在数据集中的一部分(P%),保留正样本文档和干扰文档;而在另一部分(1-P%)的数据中,只包含干扰文档,不包含正样本文档。这样的训练数据准备方法迫使模型在某些情况下不依赖于文档内容来记忆答案,而是从上下文中推导答案。
3.生成推理过程:RAFT方法强调生成一个推理过程,如链式思考(Chain-of-Thought),来解释提供的答案。这包括引用原始上下文中的段落,并详细解释如何基于引用得出结论。
3 Conclusion
RAFT方法通过结合微调和检索增强技术,显著提高了大型语言模型在特定领域内的性能。这种方法不仅提高了模型在提供上下文中解决问题的能力,还增强了模型对于干扰文档的鲁棒性,使其在实际应用中更加可靠和有效。
Table 1: RAFT improves RAG performance forall specialized domains
总结:
• 与基础的LLaMA2模型相比,RAFT在PubMed数据集上的性能提升了76.35%,在Torch Hub上提升了86.86%。
• 即使与特定领域的微调模型(DSF)相比,RAFT也显示出更好的性能,尤其是在HotpotQA和HuggingFace数据集上,分别提升了30.87%和31.41%。
• 与更大的GPT-3.5模型+RAG相比,RAFT在某些数据集上也展现了显著的优势。
二、详细内容
1 RAFT示例
Figure 3: RAFT prompt to help LLM evaluate its own generated reasoning and answers, contrasting them with the correct reasoning and answers.
该示例说明了如何通过提供问题、上下文和答案来训练大型语言模型(LLMs)生成合理的推理链,并据此给出答案。这个过程中,模型被要求识别和引用正确的文档内容来形成答案,并且能够评估自己生成的推理和答案的正确性。
1.问题(Question): 模型被给定一个问题,例如:"The Oberoi family is part of a hotel company that has a head office in what city?"
2.上下文(Context): 与问题相关的一组文档或信息片段,上下文有相关的参考信息,也有非相关的干扰信息。在这个例子中,上下文提供了关于Oberoi家族和他们在酒店业的参与的信息,以及Oberoi集团的总部位置。
3.答案(Answer):最终的答案。
4.推理链(Chain-of-Thought, CoT): 模型生成的推理过程,它解释了如何从上下文中得到答案。在这个例子中,推理链引用了上下文中的两个关键信息片段,并解释了如何根据这些引用得出Oberoi集团总部位于德里。
5.指令(Instruction): 指导模型如何生成推理链的指令。在这个例子中,指令要求模型使用特定的格式来提供推理,即在##Reason##和##Answer##之间插入引用的上下文和最终答案。
通过这种方式,RAFT方法不仅训练模型从文档中提取和利用相关信息来回答问题,而且还训练模型生成详细的推理过程,这有助于提高模型的透明度和可解释性。此外,这种方法还鼓励模型自我评估,并从中学习改进。这种自我评估的过程有助于模型在未来的任务中提高性能和准确性。
2 COT的作用(消融实验)
Table 2: Ablation on Chain-of-Thought
1.数据集(Datasets):
• PubMed: 专注于生物医学研究问题的问答数据集。
• HotpotQA: 一个需要多步推理的问答数据集。
• HuggingFace: 来自 Gorilla API Bench 的数据集,涉及基于文档生成正确的 API 调用。
• Torch Hub: 类似于HuggingFace,也是一个API调用的数据集。
• TensorFlow Hub: 另一个衡量API调用能力的基准数据集。
2.实验配置(Model Configurations):
•RAFT w.o CoT: 应用了 RAFT 方法但没有使用 Chain-of-Thought 的模型。
•RAFT: 应用了 RAFT 方法并结合了 Chain-of-Thought 的模型。
3.效果分析(Performance):
• 在大部分列出的数据集上,使用 CoT 的 RAFT 模型(RAFT)相比于没有使用 CoT 的 RAFT 模型(RAFT w.o CoT)都展现出了更好的性能。
• 在 HotpotQA 数据集上,使用 CoT 的性能提升尤为显著,从 25.62% 提升到了 35.28%,增益为 9.66%。
• 在 HuggingFace 数据集上,使用 CoT 的性能提升也很明显,从 59.07% 提升到了 74.00%,增益为 14.93%。
CoT方法显著提高了模型在特定领域内的性能,特别是在处理需要详细推理和解释的任务时。通过生成详细的推理链并引用上下文,模型能够更清晰地解释其答案,从而提高了答案的准确性和可解释性。这表明CoT是提高模型性能的一个重要组成部分,尤其是在需要模型进行深入理解和推理的复杂任务中。
3 RAFT方法与特定领域微调(DSF)方法对比
Figure 4: Comparison of RAFT and DSF
1.问题(Question):
• 给定一部电影,和相关Documents,询问编剧是谁?
2.文档(Documents):
• 提供了包含相关信息的文档片段,其中提到了编剧David Weissman及其参与的电影作品,包括“Evolution”。
3.RAFT模型的输出:
• RAFT模型正确地从文档中提取了信息,并识别出David Weissman是“Evolution”的编剧。RAFT模型生成的推理链清晰地引用了文档中的相关信息,并据此给出了正确答案。
4.DSF模型的输出:
• 相比之下,DSF模型在处理相同的问题和文档时出现了错误。DSF模型错误地提取了电影名称作为编剧。
结论是,RAFT方法通过结合链式思考和上下文引用,特别在需要理解和利用提供文档内容的任务上,提高了模型在特定领域问题上的表现。另外也说明在训练过程中对文档理解和推理COT的重要性,有助于模型在实际应用中更准确地处理和回答问题。
4 训练过程中正确样本(外部检索的知识)的比例(P%)对模型性能的影响
Figure 5: How many golden documents to involve?
实验说明:横轴表示训练数据中包含正确样本的比例,从0%到100%,纵轴表示模型在测试时的最终准确率。
实验结论:在训练大型语言模型时,合理平衡正确样本和非正确样本的比例对于提高模型在特定领域RAG任务上的性能至关重要。通过调整这一比例,可以使模型更好地学习如何处理和利用相关文档信息,同时避免过度依赖特定样本,从而提高模型的泛化能力和鲁棒性。
5 推理时不同数量的干扰文档对模型性能的影响
Figure 6: Test-Time Documents Varying
说明:"D*"、"D1"、"D2"、"D3"等符号代表了在训练过程中使用的不同组合的文档数量,"D*"代表包含正确答案信息的文档,这些文档是回答问题所必需的,包含了解决问题的关键信息。"D1"、"D2"、"D3"等代表干扰文档,这些文档不包含回答问题所需的相关信息。在训练过程中,这些干扰文档被用来模拟真实世界中的情况,即模型在尝试从检索结果中找到正确答案时,可能会遇到大量不相关的信息。
总结:
1.训练数据配比的重要性,并非所有情况都适合使用相同数量的干扰文档进行训练。例如,在某些数据集上,训练时使用一个“正样本”文档加上三个干扰文档(D* + 3D)可能会获得最佳性能,而在其他数据集上,可能需要调整这个比例。
2.在训练过程中模拟真实检索环境的重要性。通过在训练中包含不同数量的干扰文档,模型可以学习在测试时如何处理检索器可能返回的不确定数量的文档,包括正确和错误的信息,在有些任务上可以显著提升效果。
本文转载自 NLP PaperWeekly,作者: NLP PaperWeekly