百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

RAFT:将 RAG 与fine-tuning结合起来

mhr18 2024-10-02 16:52 41 浏览 0 评论

翻译自:“RAFT: Combining RAG with fine-tuning”

原文地址:https://www.superannotate.com/blog/raft-retrieval-augmented-fine-tuning

添加图片注释,不超过 140 字(可选)

为了改进某些主题的语言模型,您可以在从大量预训练数据中学习后,在其训练中添加更多特定于领域的信息。我们主要使用两种方法:检索增强生成(RAG)和微调。RAG 将外部来源的额外知识添加到提示中,微调涉及为模型提供更多数据以供学习。每种方法都有优点和缺点,它们之间的选择通常取决于项目的需要。人们过去常常选择其中之一,直到检索增强微调(retrieval augmented fine-tuning:RAFT)出现。

RAFT 结合了 RAG 和微调,并提供了一种训练方法,可以提高模型在“开卷”领域设置中回答问题的能力。在这篇文章中,我们将探讨 RAFT 是什么以及它如何帮助将语言模型的训练提升到一个新的水平。

RAFT 之前:RAG 与微调(fine-tuning)

大型语言模型(LLM)在其生命周期之初就从大量公共数据中学习,并且在一般知识任务中表现出色。但现在,它们越来越多地用于特定领域,例如某些软件的编码帮助或回答有关特定类型文档(例如法律或医学文档)的问题。在这些情况下,它不再只是常识。目的是使用特定文档尽可能准确。

为了针对这些利基领域定制LLM,我们研究了两种主要策略:从带有检索增强生成(RAG)的示例中学习和监督微调。

RAG

RAG 让模型查找文档来回答问题,有点像在测试期间打开书本。但是,这种方法并没有充分利用能够从它将看到的特定类型问题中学习的优势。

添加图片注释,不超过 140 字(可选)

微调(Fine-tuning)

另一方面,监督微调是关于学习文档中的一般主题,更好地完成任务,并满足用户的需求。然而,这样做的通常方法要么忽略了在回答实际问题时使用文档的机会,要么没有正确处理在寻找合适的文档来学习时出现的错误。

添加图片注释,不超过 140 字(可选)

把它想象成一个开卷测试。目前使用 RAG 的方法就像没有先学习就进入测试一样。微调方法试图通过死记硬背信息或练习问题来“学习”,但实际上并没有使用他们在测试期间将拥有的书本。虽然这些方法确实尝试从特定领域学习,但它们并没有为实际测试期间拥有可用资源的现实做好准备。

结合优势:RAFT

加州大学伯克利分校最近的一篇研究论文探讨了如何将监督微调 (SFT) 与检索增强生成 (RAG) 结合起来,并采用一种称为检索增强微调 (RAFT) 的新方法。

RAFT 旨在教导LLM在特定主题上变得更聪明,同时提高域内 RAG 的表现。RAFT 不仅通过微调确保模型在特定领域的知识上得到良好的训练,而且还确保它们对不准确的检索具有鲁棒性。这是通过训练模型来理解问题、找到的文档和正确答案如何组合在一起来完成的。这就像准备开卷考试一样,通过学习找出笔记中重要的内容和不重要的内容。

通过检索增强微调,我们训练模型接受问题和文档(甚至是分散注意力的问题和文档),并得出遵循逻辑思维过程的答案。RAFT 已被证明比仅仅监督微调更好,无论是否使用 RAG,在 PubMed、HotpotQA 等不同数据集以及来自 HuggingFace Hub、Torch Hub 和 TensorFlow Hub Gorilla 的其他数据集上,展示了一种简单而有效的提升方法特定主题的LLM。

LLM 与开卷考试的类比

为了更好地理解检索增强微调(retrieval augmented fine-tuning)的概念,让我们更深入地研究我们的考试类比,比较我们如何准备LLM以供实际使用以准备考试。

闭卷考试:这就像LLM没有任何额外的信息或资源来帮助回答问题一样。一个例子是将LLM用作聊天机器人,它仅依赖于在初始训练期间学到的知识以及任何微调来得出答案。

开卷考试:这里,情况发生了变化。LLM可以从外部来源查找信息,例如网站或书籍章节。这通常涉及一个工具,可以查找并呈现相关文档或部分文档,以帮助LLM当场学习新信息。LLM在这种情况下的成功很大程度上取决于该工具能否很好地找到最相关的信息。

特定领域的开卷考试:本研究重点关注开卷考试的更具体版本。在这些考试中,我们事先知道LLM将涉及的特定领域或领域。它可以是任何东西,从公司文档和最近的新闻到特定组织的代码。LLM使用来自该特定领域的经过专门微调的信息来回答问题。这里的重点是调整预先训练的LLM,使其在这些特定领域的任务中表现出色,特别是如何使其有效地处理不同数量的信息和干扰。

来源

RAFT 是如何工作的?

RAFT是一种“特定领域开卷考试”的新方式。我们首先从监督微调(SFT)开始,然后更详细地探讨 RAFT。

有监督微调(Supervised fine-tuning:SFT)

在 SFT 中,我们使用问题和答案的数据集。这个想法是训练模型,利用其从早期训练中已知的知识或在微调时学到的知识,更好地给出正确的答案。经过训练后,该模型还可以与其他文档一起使用,以帮助其找到答案 (RAG)。这是一个简单的方法来看看它是如何工作的:

  • 训练:模型学习从问题到答案(Q→A)。
  • 无需额外信息的测试(0-shot 推理):它使用学到的知识来回答新问题 (Q → A)。
  • 使用 RAG 进行测试(RAG 推理):它获取额外的文档来帮助回答问题(Q+D → A)。

RAFT

检索感知微调 (RAFT) 提供了一种为模型设置训练数据的新方法,特别是对于类似于域内 RAG 的特定领域的开卷场景。在 RAFT 中,我们创建训练数据,其中包括问题 (Q)、一些文档 (Dk) 以及基于其中一个文档 (D*) 的信息的相应思路 (CoT)答案 (A*) 。我们区分两种类型的文档:包含答案所需信息的“oracle”文档(D*)和对答案没有帮助的“distractor”文档(Di)。一些培训涉及拥有正确的文档以及干扰因素,而其他时候,我们只包含干扰因素文档,以鼓励模型依赖其记忆而不仅仅是提供的文档。

添加图片注释,不超过 140 字(可选)

这个过程看起来像这样:

  • 对于某些数据,我们有一个问题加上正确的文档和导致答案的干扰(Q+D*+D2+...+Dk → A*)。
  • 对于其他数据,我们只有一个问题和干扰,仍然会得出答案(Q+D1+D2+...+Dk → A*)。

测试时,模型会收到一个问题以及 RAG 设置找到的顶级文档,但无论使用哪种工具查找这些文档,RAFT 都会起作用。

训练的一个关键部分是教模型建立推理链来解释其答案,就像写出数学作业的步骤一样。这种方法包括为模型提供所需的所有上下文和信息,然后要求模型逐步解释其答案,并链接回原始文档。对于论文中提到的所有数据集,研究人员使用这种方法来创建包含推理的答案。一些数据集,例如 Gorilla APIBench,已经包含了合理的答案。我们的实验证明,添加这些详细的解释有助于模型表现得更好。

RAFT提示帮助LLM评估自己生成的推理和答案,将它们与正确的推理和答案进行对比。来源

结果

使用所选数据集和比较模型,RAFT 模型结果如下所示。与它相比,RAFT 的性能始终优于其他模型。例如,与针对指令进行调整的 Llama-2 模型相比,RAFT(尤其是与 RAG 结合使用时)在从文档中提取信息并忽略不相关的信息方面要有效得多。在 Hotpot QA 上的改进可以高达 35.25%,在 Torch Hub 上可以高达 76.35%。

来源

当在某些数据集上将检索增强微调与特定领域微调 (DSF) 进行比较时,RAFT 更擅长使用给定的上下文来回答问题。它在 HotpotQA 和 HuggingFace 数据集上显示出显着的改进,分别增加了 30.87% 和 31.41%。然而,对于基于是/否问题的 PubMed QA 来说,RAFT 并没有比 DSF + RAG 表现出那么大的改进。

即使与 GPT-3.5 等更大的模型相比,RAFT 也显示出明显的优势。一般来说,LLaMA-7B 模型,无论有或没有 RAG,都表现不佳,因为它回答问题的方式与需要的不匹配。通过对域进行特定的调整,RAFT 显示出更好的性能。这种调整有助于模型学习回答问题的正确方法。然而,仅仅将 RAG 添加到针对特定领域进行了微调的模型中并不总能带来更好的结果,这表明该模型可能需要更多的培训来了解如何有效地使用上下文并从中提取有用的信息。通过使用 RAFT,我们训练模型不仅可以更好地调整其答案,还可以增强其处理文档的能力。因此,这种方法优于其他方法。

总结

检索增强微调(RAFT)巧妙地结合了检索增强生成(RAG)和微调(fine-tuning)两种技术,以显着改善语言模型处理特定主题的方式。以前,模型要么使用外部信息(RAG),要么从额外的训练数据中学习(微调)。RAFT 将这些方法结合在一起,增强了模型准确筛选和使用相关文档的能力。这种混合不仅提高了模型在利基领域的性能,而且还使其能够更好地忽略误导性信息。借助 RAFT,语言模型现在更加熟练和精确,标志着其针对专业任务的发展取得了飞跃。

相关推荐

如何检查 Linux 服务器是物理服务器还是虚拟服务器?

在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...

第四节 Windows 系统 Docker 安装全指南

一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...

C++ std:shared_ptr自定义allocator引入内存池

当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...

Activiti 8.0.0 发布,业务流程管理与工作流系统

Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...

MyBatis动态SQL的5种高级玩法,90%的人只用过3种

MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...

Springboot数据访问(整合Mybatis Plus)

Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...

盘点金州勇士在奥克兰13年的13大球星 满满的全是...

见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...

Mybatis入门看这一篇就够了(mybatis快速入门)

什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...

Springboot数据访问(整合druid数据源)

Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...

Linux 中的 &quot;/etc/profile.d&quot; 目录有什么作用 ?

什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...

企业数据库安全管理规范(企业数据库安全管理规范最新版)

1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...

Oracle 伪列!这些隐藏用法你都知道吗?

在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...

Oracle 高效处理数据的隐藏神器:临时表妙用

各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...

Oracle 数据库查询:多表查询(oracle多表关联查询)

一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...

一文掌握怎么利用Shell+Python实现多数据源的异地备份程序

简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...

取消回复欢迎 发表评论: