什么是SFT
SFT(Supervised Finetune)简介
- 在自然语言处理(NLP)领域,Supervised Finetuning(SFT)是一种至关重要的技术手段,用来提升大模型在某一特定领域的表现。通过精细的策划和实施,SFT 能够指导模型的学习过程,确保其学习成果与既定目标高度吻合。
- SFT 指的是,用户提供一份标注好的数据集,即,包含输入的 prompt 和预期输出的 response。然后,在已有的某个基座模型上继续调整参数,来达到和下游任务对齐的目的。
而用我们大白话来讲述,其实SFT就是标注回答。
为什么要去使用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 模型,进一步提升准确率。最终达到业务预期。