合成数据微调实战:数据不够时怎么把小模型练出来
真实标注数据又贵又少?讲清用大模型生成合成数据微调小模型的完整流程、质量控制和避坑要点。
数据是微调的最大瓶颈
想让小模型在特定任务上表现好,微调几乎是必选项。但一动手就卡住:标注数据不够,人工标又贵又慢。
一个垂直领域任务,想标出几千条高质量样本,可能耗掉团队几周。这时候,合成数据就派上用场了。
基本思路:大模型当”老师”
用强模型(大模型)生成训练数据,再去微调小模型。这就是经典的蒸馏式合成:
大模型(强,但贵/慢)
↓ 生成大量标注样本
小模型(弱,但便宜/快)
↓ 微调后专精该任务
生产环境部署
好处:成本低、速度快、可规模化。代价:质量必须严控,否则垃圾进垃圾出。
完整流程
1. 定义任务和格式
先想清楚:
- 输入长什么样(用户问题?文档?)
- 输出要什么格式(JSON?分类标签?)
- 边界情况有哪些
格式不清,生成的数据就没法用。
2. 写种子集
不要凭空让大模型生成。先人工写几十条高质量种子样本,作为:
- 格式示范
- few-shot 示例
- 质量基准
种子质量决定合成质量上限。
3. 规模化生成
用大模型 + 种子示例批量生成。技巧:
- 多样化提示:变换措辞、场景、难度,避免千篇一律
- 覆盖长尾:主动构造罕见情况、边界、对抗样本
- 温度调节:适度提高多样性,但别让格式崩掉
4. 质量过滤(关键步骤)
生成的数据绝不能直接用,必须过滤:
- 格式校验:不符合 schema 的丢掉
- 规则过滤:明显错误、重复、过短的剔除
- 模型打分:用小模型或评审模型给样本质量打分
- 去重:语义近似去重,避免模型过拟合到重复模式
- 人工抽检:随机抽样人工检查,估算整体质量
过滤环节花的时间,通常比生成还多,但这是成败关键。
5. 微调与评估
用过滤后的数据微调小模型,然后在独立的人工标注测试集上评估。
- 别用合成数据当测试集(自欺欺人)
- 对比微调前后、对比大模型基准
- 关注是否出现”合成数据特有”的偏置
质量控制要点
| 风险 | 表现 | 对策 |
|---|---|---|
| 模式单一 | 输出千篇一律 | 多样化提示、混合来源 |
| 事实错误 | 看似合理实则错 | 引入检索/校验,人工抽检 |
| 格式漂移 | 结构不一致 | 强 schema 校验 + 过滤 |
| 偏置放大 | 继承大模型偏见 | 平衡样本,加对抗样本 |
| 过拟合 | 测试好生产差 | 独立测试集,加真实数据 |
混合策略:合成 + 真实
纯合成数据有个根本问题:分布可能偏离真实场景。
最稳的做法是混合:
合成数据(多、便宜) + 真实标注数据(少、精)
哪怕只有几百条真实数据,混进合成集里,也能显著提升泛化。真实数据贵,但它的价值极高,别省。
别踩的坑
- 直接用未过滤的合成数据:垃圾进垃圾出,模型学歪
- 用合成数据自评:当然高分,毫无意义
- 忽视分布漂移:合成集和真实输入差太远
- 模式太单一:小模型只学会一种问法,换个说法就懵
- 完全抛弃真实数据:泛化能力打折
落地清单
- 明确定义任务输入输出格式
- 人工写高质量种子集
- 多样化提示规模化生成
- 严格过滤:格式、去重、打分、抽检
- 混入真实标注数据提升泛化
- 用独立人工测试集评估
- 监控上线后的真实表现,持续补充数据
结语
合成数据是解决数据瓶颈的有效杠杆,但它不是”免费的数据”。它的价值取决于过滤和混合的质量。把大模型当老师、把人工当裁判、把真实数据当锚点,你就能用很小的标注成本,练出一个真正好用的小模型。