检索增强微调(RAFT)简介 原创
当将大型语言模型(LLMs)集成到各种应用程序中时,通常需要通过检索增强生成(RAG)为基础的提示或微调等技术,引入新的信息,如领域特定知识或专有数据。然而,挑战在于确定将这些新知识灌输到模型中的最有效方法。检索增强微调(RAFT)是一种简单而强大的微调方法,可增强模型在特定领域内以“开放书本”设置回答问题的性能。开放书本是指模型可以参考文档来回答问题的范式。RAFT的操作方式是通过训练模型忽略不对回答给定问题有贡献的检索到的文档,从而消除干扰。这是通过准确识别和引用有助于回答手头问题的相关文档部分来实现的。此外,RAFT使用思维链式响应进一步完善了模型的推理能力。当应用于领域特定的RAG时,RAFT在各种数据集上始终提高了性能,包括PubMed、HotpotQA和Gorilla,为具有领域特定RAG能力的预训练LLMs提供了有价值的后期训练增强。
RAFT建立在Retriever Aware Training (RAT)的基础上,并在RAG应用程序中推广超出API的范围。
类比:如何为LLM准备考试?📝
RAFT是一种通用的微调方法,用于将预训练的LLM调整到特定领域的RAG设置。这是一个常见的场景,您希望您的LLM回答基于一组文档的问题,例如企业中的私有文件。这种情况与一般的RAG不同,其中LLM不知道它将在哪个领域(文档)上进行测试。为了更好地说明这种情况,让部署和使用LLM的真实世界设置之间进行类比,准备考试。
封闭书本考试 封闭书本考试通常指的是LLMs在考试期间没有访问任何额外文档或参考资料的情况。对于LLMs,这相当于一种情况,例如LLMs被用作聊天机器人。在这种情况下,LLMs依靠预训练和监督微调中嵌入的知识来回应用户的提示。
开放书本考试 相反,将开放书本考试设置比作LLM可以参考外部信息来源(例如网站或书的章节)。在这种情况下,通常LLM与检索器配对,检索器检索到k个文档(或文档的特定部分),并将其附加到用户的提示中。只有通过检索到的这些文档,LLM才能获得新知识。因此,LLM在这些设置中的性能,其中它被训练为通用LLM,很大程度上取决于检索器的质量以及检索器如何准确识别最相关的信息片段。
RAFT RAFT专注于一个比一般开放书本考试更狭窄但越来越受欢迎的领域,称为特定领域的开放书本考试。在特定领域的开放书本考试中,预先知道LLM将在其中进行测试的领域---用于推理。LLM可以使用来自特定领域的任何和所有信息来回应用户的提示,它已经进行了微调。特定领域的示例包括企业文件、最新新闻、属于组织的代码存储库等。在所有这些场景中,LLM将用于回答问题,其答案可以在一组文档(一个小型实际领域)中找到。检索技术本身对机制几乎没有影响(尽管它可能会影响准确性)。本文主要研究这种特定领域的开放书本设置,以及如何使预训练LLM适应这个特定领域,包括如何使其对检索到的文档和干扰因素的数量变化更加健壮。
RAFT类比于开放书本 如何为LLM准备考试?封闭书本 vs. 开放书本 vs. RAFT
RAFT:将语言模型调整为特定领域的RAG 📚
检索感知微调(RAFT)提出了一种新颖的配方,用于准备微调数据,以定制模型适用于特定领域的开放书本设置,相当于领域内的RAG。在RAFT中,准备训练数据,使每个数据点包含一个问题(Q)、一组文档(Dk)和从其中一个文档(D)生成的相应的思维链式样式答案(A)。区分两种类型的文档:Oracle文档(D),即可以从中推导出问题答案的文档,以及“干扰因素”文档(Di),其中不包含与答案相关的信息。作为一个实现细节,Oracle文档不需要是单个文档,而可以是多个文档,就像在HotpotQA中的情况一样。然后,对于数据集中的P%的问题(qi),保留Oracle文档(di)以及干扰因素文档(dk-1)。对于数据集中的(1-P)%的问题(qi),不包含Oracle文档,只包含干扰因素文档(dk)。然后,使用标准的监督训练(SFT)技术微调语言模型,训练它从提供的文档和问题生成答案。下图说明了RAFT的高级设计原则。
展示了RAG方法训练模型在其训练的文档集上更好地进行RAG。通过在训练数据的某些实例中删除Oracle文档,迫使模型记忆领域知识。RAFT的训练数据如下,并且可以在下图中看到一个示例训练数据:
P%的数据:Q + D* + D1 + D2 + ... + Dk => A*
1-P%的数据:Q + D1 + D2 + ... + Dk => A*
RAFT的数据训练和测试配置
还提供了数据集的一个训练数据示例。这涉及问题、上下文、指令和最终的CoT答案。在答案中,使用##begin_quote##和##end_quote##来表示直接从上下文复制粘贴的引用的开始和结束。发现这是一种有效的方法,可以防止模型产生幻觉,并专注于提供的上下文。
RAFT评估 📊
在实验中,使用以下数据集来评估模型和所有基线。从流行和多样化的领域中选择这些数据集,包括维基百科、编码/API文档和医学问答。
- 自然问答(NQ)、Trivia QA和Hotpot QA是基于维基百科的开放领域问题,主要关注常识(例如电影、体育等)。
- HuggingFace、Torch Hub和TensorFlow Hub来自Gorilla论文提出的APIBench。这些基准主要关注如何根据文档生成正确的功能性API调用。
- PubMed QA是专门针对生物医学研究问题回答的问答数据集。它主要关注根据给定文档集回答医学和生物学问题。
考虑以下基线进行实验:
- 具有0-shot提示的LlaMA2-7B-chat模型:这是用于QA任务的常用调整指令的模型,具有清晰的说明但没有参考文档。
- 具有RAG的LlaMA2-7B-chat模型(Llama2 + RAG):与前一设置类似,但不同之处在于添加了参考上下文。这是处理特定领域QA任务时最常用的组合。
- 具有0-shot提示的领域特定微调(DSF):在上下文中执行标准的指令微调而不使用文档。
- 具有RAG的领域特定微调(DSF + RAG):使用RAG为领域特定微调模型配备外部知识。因此,对于模型不知道的“知识”,它仍然可以参考上下文。
RAFT在医学(PubMed)、通用知识(HotPotQA)和API(Gorilla)基准上的结果。
训练您自己的RAFT 💡
以下是关于如何为RAG应用程序训练您自己的RAFT模型的简短教程,从数据集准备到模型微调,最后到模型部署。
数据集准备:提供一个示例来准备RAFT的数据集。数据集包含问题、上下文和答案。上下文是一组文档,答案是使用GPT-4从其中一个文档生成的思维链式样式答案。请参阅下面的一个示例。
模型微调:将训练模型根据问题和提供的上下文输出CoT答案。基础模型Llama2-7B适用于RAG任务,其中任务需要模型的推理能力、理解语言能力、低延迟推理能力,并且可以轻松适应各种设置。Llama2-7B非常适合许多通用知识问答任务,具有鼓励数学技能,并且由于其4k的预训练,可以合理解析相当长的文档。Llama2-7B还是一个完美的模型,可以在4个A100-40G GPU上进行训练,并在一个GPU上提供服务。因此,在性能、部署便利性和具有正确许可证的pareto曲线中,LLaMA2模型非常适合RAFT任务。借助Microsoft AI Studio的帮助,用户也可以探索Llama-13b或70b等其他模型。下面是在Azure AI Studio上显示的模型微调过程的截图。
模型部署:一旦模型训练完成,您可以自由地将其部署在您自己的GPU上(或通过llama.cpp在CPU上);另一种选择是将其部署在Microsoft AI Studio上。以下图片展示了在Azure AI Studio上进行模型部署的过程。感谢Meta Llama-2和Microsoft AI Studio的帮助,为企业微调和部署LLMs变得容易,极大地促进了为不同企业部署定制模型。
结论
RAFT是一种旨在增强模型在特定领域内以“开卷”方式回答问题的训练策略。这种技术展示了一种基于选定文档集合的问题回答任务的LLMs的微调配方。已经确定了几个关键的设计决策,例如训练模型与干扰文档一起,组织数据集以使部分数据缺乏上下文中的oracle文档,并以链式思维的方式从相关文本中直接引用来制定答案。对PubMed、Hotpot QA和Gorilla API Bench的评估凸显了RAFT的巨大潜力。展望未来,预计领域内检索增强生成(RAG)将继续在工业和学术领域引起兴趣。与一般的RAG不同,该工作解决了LLMs在使用特定领域知识回答问题的实际场景。与当前趋势一致,研究结果表明,相比于通用LLM模型,更小、经过微调的模型在特定领域的问题回答任务中表现得同样出色。
译自(有删改):https://gorilla.cs.berkeley.edu/blogs/9_raft.html
本文转载自公众号AIGC最前线