08. 微调数据应该怎么构造?数据质量和数量哪个更重要?

整理微调数据构造方法,以及数据质量与数量的权衡。

简单回答

微调数据的核心是质量远重要于数量。几千条高质量、多样化的指令-回答对,效果通常优于几十万条低质量数据。数据构造要关注三个维度:任务多样性(覆盖足够多的场景)、回答质量(准确、完整、格式好)、以及分布合理性(不要某一类任务占比过高导致模型行为偏斜)。

详细解释

数据质量为什么更重要?

LIMA 那篇论文的标题已经说得很直白:"Less Is More for Alignment"。他们用 1000 条精心挑选的高质量数据做 SFT,效果和用几万条数据训出来的模型接近甚至更好。后来 Alpaca、WizardLM 等工作也反复验证了这个结论:低质量数据不仅不帮忙,还会引入噪声,让模型学到错误的回答模式。

从原理上理解也很自然。SFT 不是让模型"学新知识",而是教它"怎么回答"。几千条数据已经足以让模型学会对话格式和任务模式,多出来的低质量数据只会稀释信号。

数据构造的关键维度

第一个维度是任务多样性。SFT 数据应该覆盖你希望模型处理的所有任务类型:开放问答、信息提取、摘要、翻译、代码生成、数学推理、角色扮演、拒绝(不该回答的问题)等。如果数据集 80% 是问答题,模型就会"以为"所有输入都该用问答方式回应,面对其他类型的任务时表现会差。

第二个维度是回答质量。每条数据的 output 部分应该是你期望模型输出的"标杆答案"。这意味着答案要准确、完整、逻辑清晰、格式规范。如果 output 本身就有事实错误、逻辑混乱、或者前后矛盾,模型学到的也是错误的模式。很多团队在这一步会用更强的模型(比如 GPT-4)生成 seed data,然后人工审核和修正。

第三个维度是分布合理性。不同类型的数据占比要有意识地控制。常见的问题是代码和数学数据占比太大导致通用对话能力下降,或者某种固定开头模式("当然可以,让我来帮你……")出现太频繁导致模型回答千篇一律。

数据构造的常见方法

人工编写是质量最高但成本也最高的方式,适合核心场景的 seed data。用强模型生成再人工筛选(Self-Instruct 思路)是性价比最高的方案,Alpaca 就是用 GPT-3.5 生成了 52K 条数据。从真实用户日志里提取和清洗也是一种重要来源,真实场景的数据分布是最有价值的。还有一种是数据增强——对已有数据做改写、复杂化、添加约束等,增加多样性。

数量的下限和上限

虽然质量更重要,但数量也不能太少。几百条通常不够——覆盖不了足够多的任务模式。1K ~ 5K 条高质量数据是一个不错的起点,10K ~ 50K 条是大多数项目的常见量级。超过 100K 以后,边际收益通常已经很小了,除非你的场景非常复杂或者需要覆盖的领域很广。

一个实用的判断框架

如果微调效果不好,先检查数据质量而不是增加数据量。具体的排查顺序是:先抽样看 output 是否有明显错误或质量问题 → 检查任务类型的覆盖度 → 检查数据分布是否偏斜 → 最后才考虑增加数据量。

面试时可以这样答

微调数据构造最核心的一条原则就是:质量远比数量重要。LIMA 用 1000 条精选数据就训出了很好的效果,这已经被大量后续工作验证了。原因是 SFT 不是教模型新知识,而是教它回答的格式和模式,几千条高质量数据就够了。

具体构造时关注三个维度。第一是任务多样性,要覆盖你希望模型处理的所有场景类型——问答、摘要、代码、拒绝等等,分布不能太偏。第二是 output 质量,每条数据的回答必须是"标杆答案",有事实错误或者逻辑问题的数据是有害的。第三是分布控制,避免某类数据占比过高导致模型行为偏斜。

实际操作中最常见的方案是用强模型生成 seed data 再人工审核,Self-Instruct 思路。数据量级上,1K ~ 5K 条高质量数据是起点,10K ~ 50K 覆盖大多数场景。如果微调效果不好,第一反应应该是查数据质量,不是加数据量。

常见追问

  1. 怎么判断 SFT 数据的质量够不够好?有没有量化的评估方法?
  2. 不同任务类型的数据配比一般怎么定?有没有经验值?
  3. 用强模型生成的数据做 SFT,会不会导致"模型蒸馏"效应?有什么风险?