AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAFT : 将语言模型适应于特定领域RAG任务
发布日期:2024-05-08 14:00:53 浏览次数: 1915 来源:人工智障与神经病网络研究所


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的基准。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询