浅谈SFT的使用

205 阅读3分钟

什么是SFT

SFT(Supervised Finetune)简介

  • 在自然语言处理(NLP)领域,Supervised Finetuning(SFT)是一种至关重要的技术手段,用来提升大模型在某一特定领域的表现。通过精细的策划和实施,SFT 能够指导模型的学习过程,确保其学习成果与既定目标高度吻合。
  • SFT 指的是,用户提供一份标注好的数据集,即,包含输入的 prompt 和预期输出的 response。然后,在已有的某个基座模型上继续调整参数,来达到和下游任务对齐的目的。

而用我们大白话来讲述,其实SFT就是标注回答

image.png

image.png

为什么要去使用SFT

SFT 的意义和时机

  • 什么时候需要SFT:

    • 通过 prompt engineering 无法解决或 prompt 中描述过于复杂时。
    • 对大模型输出内容有格式要求时,而模型仍有部分 case 不符合要求。
    • 期望通过 SFT 来减少 prompt 中的内容,加速线上推理的耗时。
  • 做SFT的前置依赖:

    • 一方面,把 prompt engineering 做到极致,通过优化 prompt 已经不能解决剩余的 badcase。另一方面,SFT 数据集中也依赖 prompt。因此,做 SFT 之前尽量把 prompt 工程做到最优。
    • 一开始不需要急着构造大量 SFT 数据集,可以先用少量数据对模型做 SFT 后观察真实评估是否有收益。如果有收益,可以尝试以部分数据为种子数据集继续扩充,找到 scaling law。如果没有收益,那么再重新检查 SFT 数据集的质量,这部分可以参见

而对应于Dify平台中的SFT,其实仅仅是使用问答对去进行标注,真正实施到模型微调其实亦受限于硬件条件,若是使用一张4090再应用LoRA、QLoRA等技术,再进行这一文档的补充

示例

意图识别

场景

分类任务场景:基于用户和客服的对话,分类用户的具体意图。

过程

  • 客户首先建立了一份线上业务的标准评估集。基于prompt优化后,baseline模型(V0)达到X1%的准确率。
  • 发现一些描述接近,但意图却明显相反的意图,模型很难分对。另一方面,如果再加一些 shots,会导致 prompt 过长,导致线上推理耗时增加,影响体验。因此,尝试构造 SFT 数据集。
  • 根据线上流量回放,标注了400多道 SFT 数据集。先用少量精调后发现模型在评估集上的准确率达到了X2%,相比X1%有提升。因此,将全量 SFT 数据集进行精调后 V1 模型,线上准确率进一步提升。
  • 后续从线上流量持续获取 SFT 数据集,继续在 V1 模型上增量精调后得到 V2 模型,进一步提升准确率。最终达到业务预期。