合成数据
用模型生成训练数据。只要你能验证或过滤输出,它就管用;不能验证时,它会安静地失败。
好的训练数据是大多数微调项目的瓶颈。收集和标注又慢又贵。
于是:让模型来生成。这比听起来更管用——而它的失败方式很特别,值得在依赖它之前先弄明白。
真正管用的地方
把成功和失败分开的那个模式是验证。合成数据恰恰只在你能够检查输出的地方才可靠。
可验证的领域。 生成一道数学题,生成一个解答,验算一遍。生成代码,跑测试。通过的留下,失败的丢掉。生成器可以不可靠,因为过滤器可靠——这是这项技术最强的形态,也正是它推动了推理模型近来的进步。
格式与风格迁移。 你有真实的输入,但没有想要格式的输出。让一个强模型把它们产出,抽样人工看一眼,其余的直接用。格式靠目检很容易验证。
增补真实样本。 拿真实案例生成变体——不同的说法、边界情况、对抗版本。因为有真实数据锚定,漂移被限制住了。
填补覆盖缺口。 你的真实数据里,某个重要的边界情况只有三个样本。再生成三十个。
隐私受限的工作。 真实数据不能用于训练时,合成替代品不携带任何个人信息。
失败的地方
无法验证的事实性内容。 模型生成事实时产出的是自信的错误,而这些错误会变成训练目标。学生模型学会的,是以教师模型特有的方式出错。
分布收窄。 这一条最微妙。模型生成的文本比人类文本更干净、更统一、变化更少。拿它训练,学生模型学到的就是这个窄分布。带着拼写错误、截断、多语言混杂和古怪措辞的真实输入,落在它所见过的东西之外。
这种失败是安静的:在合成的留出数据上评测,表现极好;到生产环境成绩令人失望;而只要你不拿真实输入做评测,这个落差就看不见。
继承来的偏见。 生成器偏好什么,学生模型就学到什么,而且被放大。
递归退化。 拿「在输出上训练的模型」的输出再训练,如此反复,每一轮分布都收得更窄。多样性崩塌。每一代都用真实数据锚定,正是防止这件事的办法。
怎么把它用好
能验证的一律验证。 跑代码、验算数学、校验 schema。就这一条实践,把有用的合成数据和有害的合成数据分开了。
用真实输入锚定。 为真实输入生成输出,而不是两头都生成。真实输入保住了真实的分布,而分布恰恰是最容易丢掉的东西。
显式地强制多样性。 要求长度、语气、难度上有变化;在整个数据集上变换生成的 prompt。放着不管,模型只会产出一条窄带。
生成器要比目标模型强。 向下蒸馏是可行的;同尺寸的模型自己教自己,基本只是在强化已有的倾向。
使劲过滤。 对几乎相同的样本去重,凡是通不过校验的一律丢掉,再自己抽读一些。丢掉生成集的一半是常态,而且通常会让结果更好。
永远留出真实数据做评测。 没有商量余地。只在合成数据上评测,正好把这个技术造成的失败藏起来。
混合
纯合成的训练数据很少是最佳选择。混合效果更好:真实数据确立真实分布,合成数据填补缺口、增加体量。
真实数据够多的地方,就用它。稀缺的地方,在它周围做合成增补,胜过单用其中任何一种。
要点回顾
- 合成数据恰恰在输出可以验证的地方才可靠——数学、代码、schema、格式。
- 它在无法验证的事实上失败:生成器的错误会变成训练目标。
- 那种安静的失败是分布收窄:模型文本比现实更干净,所以学生模型在合成测试上得分漂亮,在真实输入上却表现不佳。
- 为真实输入生成输出,显式强制多样性,用更强的生成器,并狠狠过滤。
- 永远在真实留出数据上评测。
下一篇: 读懂模型基准测试