返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

RAFT : 将语言模型适应于特定领域RAG任务

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 09:45 |阅读模式 打印 上一主题 下一主题

1. 问题定义 ?

如何使预训练大模型适应于特定领域的RAG?

作者用考试来作类比,问题就变成如何最好地准备一个考试?

  • 对于“闭卷考试”可通过直接微调来文档或QA问答对来“学习”
  • 对于“开卷考试”就是常见的RAG模式,作者比喻用未经领域微调的大模型直接进行RAG,相当于没有经过“学习”就直接参加“开卷”考试,这样实际上是无法很好通过“考试”的。
  • RAFT通过在QA问答对上微调的模型,结合RAG传统流程进行“开卷”考试。

2. RAFT ?

经典的SFT方式:旨在提升回答问题的能力,知识来源可以是预训练阶段,也可以来源于SFT阶段。而 RAFT 本质是用 SFT + RAG,训练模型更好的使用外部文档进行知识密集型问答。但注意:RAFT 是不关注检索部分的。

2.1 数据工程

每个数据点包含一个问题(),一组文档(),以及一个对应的CoT思维链回答(),该回答是从其中一个文档()生成的。论文提及将文档分为两类:

  • oracle(有用文档):可以被用来推理使用的文档
  • distractor(干扰文档):指那些不包含问题答案相关信息的文档。这些文档在训练过程中被用来提高模型的鲁棒性,特别是在RAG任务时,模型需要从检索到的文档中识别出哪些是有用的信息,哪些是无关的干扰信息。

训练数据采样策略:

对于其中 的数据,包含 oracle 文档();而剩下的 的数据只包含 distractor 文档

论文提到,改善训练质量的关键,是生成CoT推理步骤,来解释所提供的答案。数据样例如下所示:如果按照Instruction、Input、Output的方式来看待这个模式,那么:

  • 指令:是要求模型去生成CoT推理步骤
  • 输入:包括 用户问题、相关文档信息、正确答案组成的上下文
  • 输出:引用原始上下文的CoT推理步骤

? 提问:CoT Answer(即) 是如何生成的?

作者先对文档分块(chunk)处理,针对每个chunk用GPT4生成k个用户可能问的Questions(k默认是5);接着针对每条Questions,构建 oracle文本块列表distractor文本块列表 作为上下文(注意:这里没有用到检索!);然后把用户问题和上下文丢给GPT4继续生成 CoT Answer,生成的提示词中用了 ##begin_quote####end_quote## 来标记引用的原始上下文内容。现在每个QA对,都包含了 {问题,上下文,CoT答案} 三元组。最后通过一个指令模板,把用户问题和上下文合并成一条SFT样本的Input,CoT答案作为Output,进行后续的微调。(流程描述来自raft.py的codeview)

通过这种数据构造方式,作者证明了,在创建一个完整的推理链,以及清楚地引用来源可以提高模型回答问题的准确性。

2.2 结果

从结果来看,小量级模型的RAFT效果比更大模型的直接RAG效果要好,但在某些数据集如HotpotQA却不尽人意。论文在“Evaluation”部分,提到了使用Gorilla API Bench数据集,该数据集已经包含人工验证后的正确CoT的基准。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ