13. 合成数据在微调中有哪些应用?需要注意什么问题?

整理合成数据在微调中的用途、风险与实践要点。

简单回答

合成数据在微调中的主要应用包括:用强模型生成 SFT 数据(Self-Instruct)、生成偏好对数据用于对齐训练、数据增强(改写/复杂化已有数据)、以及生成特定领域的训练数据。核心风险是模型塌缩(Model Collapse)——如果合成数据质量不高或缺乏多样性,训出来的模型会退化,能力上限被限制在生成数据的模型之下。

详细解释

合成数据的主要应用场景

第一类是 SFT 数据生成。典型代表是 Self-Instruct 和 Alpaca 项目。思路是用强模型(如 GPT-4)根据一批 seed tasks 自动生成大量的 instruction-output 对。Alpaca 用 175 条 seed 任务让 GPT-3.5 生成了 52K 条 SFT 数据,成本只有几百美元,效果却相当不错。后续的 WizardLM 用 Evol-Instruct 进一步进化指令的复杂度,让生成的数据更有深度。

第二类是偏好数据生成。对齐训练(DPO/RLHF)需要 chosen/rejected 对。可以让强模型生成 chosen,弱模型或故意降质的模型生成 rejected。也可以让强模型对同一个 prompt 生成多个回答,然后人工或自动评分后配对。UltraFeedback 数据集就是用多个模型对同一 prompt 生成回答,再用 GPT-4 做 judge 排序。

第三类是数据增强。对已有的高质量数据做改写、加约束、复杂化。比如把一个简单问题改成多步推理问题,把一个英文指令翻译成多语言版本,或者给回答加上不同的格式要求。这样可以在不改变核心知识的情况下增加数据的多样性。

第四类是领域数据补充。某些垂直领域的标注数据很稀缺(如医疗、法律、金融),用强模型根据领域文档生成 QA 对是一种低成本的数据获取方式。

需要注意的问题

第一是 Model Collapse(模型塌缩)。如果用模型 A 生成的数据去训模型 B,然后用模型 B 生成的数据去训模型 C,这样迭代下去,模型的能力和多样性会逐步退化。这是因为每一代模型都只能学到上一代模型概率分布的一个"模糊近似",分布的尾部(少见但重要的模式)会逐渐丢失。解决方法是每一轮都混入真实人类数据,或者用 rejection sampling 确保合成数据的质量。

第二是能力天花板。用 GPT-4 生成的数据训出来的模型,理论上不可能超过 GPT-4——你只能蒸馏到它能力的一个子集。所以合成数据更适合用来做"能力对齐"(让模型学会正确的回答方式),而不是"能力突破"。

第三是多样性不足。模型生成的数据往往有固定的"风格偏好"——相似的句式结构、相似的推理模式、相似的回答框架。大量这种数据训练后,模型的输出也会变得千篇一律。需要通过调采样温度、使用不同的 seed prompt、混合多个生成模型等方式来增加多样性。

第四是许可和合规问题。用商业模型(GPT-4、Claude 等)的 API 生成数据来训练竞品模型,可能违反服务条款。OpenAI 的 ToS 明确禁止用其输出来训练竞争模型。实际操作中需要注意法律风险。

面试时可以这样答

合成数据在微调中用得非常广泛。最常见的是用强模型生成 SFT 数据,Self-Instruct 和 Alpaca 就是典型代表。也可以用来生成偏好对数据做对齐训练,或者对已有数据做增强——改写、复杂化、多语言翻译等。

但需要注意几个关键问题。第一是 Model Collapse,多代迭代生成的数据质量会逐步退化,分布的多样性会丢失,必须混入真实数据来兜底。第二是能力天花板,合成数据训出来的模型上限不会超过数据生成模型本身,适合做能力对齐不适合做能力突破。第三是多样性,模型生成的数据容易有固定风格,需要刻意增加多样性。第四是合规,用商业模型 API 生成训练数据可能违反服务条款。

实际操作中我觉得比较好的做法是:用合成数据做 70%~80% 的覆盖度,关键场景的数据还是要人工编写或审核,保证质量和多样性。

常见追问

  1. Self-Instruct 的具体流程是什么?seed task 怎么设计?
  2. 怎么检测合成数据的质量和多样性?
  3. Model Collapse 的量化衡量方法有哪些?