06. SFT 数据应该怎么构造?数据质量和数量哪个更重要?
整理 SFT 数据构造原则、质量数量权衡与工程流程。
简单回答
SFT(Supervised Fine-Tuning,监督微调)数据的核心是"指令-回答对",构造重点在于多样性(任务类型覆盖要广)、质量(回答要准确、有帮助、格式规范)、以及与目标任务的相关性。质量远比数量重要——LIMA 论文证明 1000 条精选数据微调出来的效果能接近 50000 条数据的结果。数量在到达一定阈值之后边际效用急剧下降,但低于这个阈值也会有明显欠拟合。
详细解答
SFT 数据的本质
SFT 的目标是把预训练好的"会预测文本"的模型,调整成"会按指令行事的助手"。预训练模型知道很多知识,但不知道怎么"对话"、怎么"遵循指令"、怎么"给出有帮助的回答"。SFT 就是在教它这个。
所以 SFT 数据本质上是在向模型展示"好的指令跟随行为是什么样子的"。格式通常是:
SFT 数据的构造原则
多样性是第一位的。任务类型要覆盖广——问答、摘要、翻译、代码生成、数学推理、角色扮演、创意写作等。如果数据全是一种类型(比如全是问答),模型会在其他类型任务上能力退化。指令的表达方式也要多样,同一个任务用不同方式表述,模型才能学到指令的本质,而不是记住固定的触发词。
质量是核心。回答必须是真实准确的(特别是事实性内容,不能有幻觉)、格式规范(Markdown 格式的结构化回答在需要详细解释的任务里效果好)、有帮助(真正解决了用户的问题,而不是绕开或空洞应付)。一条有明显错误的数据,不只是贡献了零信息,而是带来了负面影响——模型会学到"犯这种错误是正常的"。
长度分布要合理。全是短回答会让模型学不会写长文档;全是长回答会让模型在简单问题上也废话连篇。任务性质决定了合理的回答长度,构造数据时要有意识地平衡。
回答风格要一致。如果一批数据的回答风格千差万别(有的极其正式,有的随意口语,有的用 Markdown,有的纯文本),模型的输出风格会变得不稳定。特别是做特定应用场景的微调,风格一致性很重要。
数量 vs 质量
LIMA 论文(Less Is More for Alignment,2023)是这个话题最有影响力的工作。他们用 1000 条精心挑选的高质量 SFT 数据微调 LLaMA-65B,在很多评测维度上接近用 50000 条 Alpaca 数据微调的模型效果,有些指标甚至超过。结论是:对齐需要的数据量比想象的少,但每条数据的质量必须高。
但"质量比数量重要"不代表数量无所谓。当数据量低于某个阈值(比如几百条),模型确实会欠拟合。特别是对于任务类型多样性,数量不够就覆盖不了足够多的场景。真正的经验是:在保证质量的前提下扩大数量,而不是用大量低质量数据凑数。
数据构造的实际流程
一个比较成熟的 SFT 数据构造流程通常是:
先定义任务清单和能力矩阵——你希望模型在哪些任务上有什么样的表现,把这些需求列出来,再反推每个任务需要多少数据、什么质量的数据。
然后分类型构造数据:对于有标准答案的任务(数学、代码、知识问答),可以从现有数据集(GSM8K、HumanEval、MMLU 等)转换,或者用强模型生成再验证;对于开放性任务(创意写作、角色扮演),需要人工参与设计回答标准;对于对话数据,多轮对话的格式和质量要特别注意。
构造完之后做数据质检:抽样人工审核,检查准确性和一致性;用模型辅助过滤明显低质量样本(过短、重复、有事实错误);对数据集做多样性分析,看任务类型分布是否合理。
面试时可以这样答
SFT 数据本质上是在给模型展示"好的指令跟随行为",格式是指令-回答对。构造的关键原则是多样性、质量、与目标任务相关性。
多样性指任务类型要覆盖广,问答、摘要、代码、推理、对话都得有,表达方式也要多样,不然模型只会应对特定触发词。质量要求回答准确、有帮助、格式一致,一条有明显错误的数据是负收益。
数量 vs 质量这个问题,LIMA 那篇论文给了很清晰的答案:1000 条精选数据微调出来的效果能接近 50000 条普通数据。结论是质量远比数量重要,但数量低于某个阈值也会有欠拟合。实际做法是先保质量,在保证质量的前提下再扩大量。
工程上,我一般会先定能力矩阵——模型要在哪些任务上多强,再反推数据需求,分类型构造,最后做抽样人工质检。有标准答案的任务可以靠验证器自动过滤,开放性任务就需要人工参与。
常见追问
- SFT 数据里,对话数据(多轮)和单轮指令数据哪个更难构造?
- 如果业务数据量很少(几百条),你会怎么做 SFT?
- SFT 之后模型在训练集上的任务表现好,但泛化差,是什么原因?