人工智能实践(语言智能)
第5讲:数据工程

5.3 合成数据

Self-Instruct、Evol-Instruct、MAGPIE、Persona-driven:通用合成数据的方法谱系与风险

为什么需要合成数据

人工写 SFT 数据太贵:一条高质量样本需要专家 5-15 分钟,1 万条就是近千小时。而合成数据的边际成本趋近于"调用一次 API"——Alpaca 以 5 万条样本、500 美元成本,开启了合成数据的飞轮时代

合成数据的方法谱系大致沿两条轴展开:

本节讲通用合成方法。如果你的目标语言是中文方言、藏语、或其他低资源场景,请在读完本节后继续看 5.4 低资源语言 SFT 数据合成——那里讨论翻译、跨语言迁移、原生标注、反向翻译、中转语言等针对低资源的专门路径,许多低资源方法都是本节通用方法的改写或混合。

一、Self-Instruct:合成数据的起点

Wang 等人(ACL 2023, arXiv:2212.10560)提出的 Self-Instruct 是整个谱系的母题。核心循环:

种子池初始化

准备 175 条人工编写种子任务(25 分类任务 + 150 非分类任务)。

迭代扩增

每轮从种子池抽取 8 条,加上已生成的 2 条新任务,作为 few-shot prompt 送给教师模型(如 GPT-3),要求生成新的指令。

实例生成

对每条新指令,再次请求教师模型生成对应的 input-output 对。

  • 非分类任务:先 input,后 output;
  • 分类任务:先 output(标签),后 input(样本),以缓解标签偏置。

过滤与去重

  • 使用 ROUGE-L < 0.7 剔除与池内指令过相似的样本;
  • 规则过滤:长度异常、包含 "image/picture" 关键词(文本模型无法处理)等。

成果:5.2 万条指令 + 8.2 万条实例,成本 < 100 美元。但 Wang 自己的审计发现 46% 的样本存在问题——这也是"合成后必须过滤"成为行规的起点。

二、Evol-Instruct / WizardLM:让指令"进化"

Xu 等(ICLR 2024, arXiv:2304.12244)提出通过五种"纵深"操作 + 一种"横向"变异对指令做重写,主动提升难度与多样性:

操作说明示例
Add Constraints加约束"用不超过 50 字"
Deepening深化"不仅解释是什么,还要说明为什么"
Concretizing具体化"举一个金融行业的例子"
Increase Reasoning加推理"给出三步推导过程"
Complicate Input复杂化输入在 input 里加入无关的干扰信息
In-Breadth横向(新话题)生成一个话题不同但难度相当的新指令

Prompt 模板:

# 重写以下指令,使之更加 {operation},但保持核心任务相同。
# 原指令:{seed}
# 新指令:

WizardCoder / WizardMath 将同一配方迁移到代码与数学,验证了 Evol 策略的通用性。

三、MAGPIE:从 Base Model "诱发" Prompt

Xu 等(ICLR 2025, arXiv:2406.08464)的 MAGPIE 是最近两年最惊艳的合成数据方法之一。核心思路:

只向对齐模型输入聊天模板前缀 token,让模型"自动补全"出一条用户指令

<|im_start|>user

模型会自动接着生成:

<|im_start|>user
请解释什么是区块链,并给出三个实际应用案例。<|im_end|>

然后将生成的指令重新喂回模型,得到回复。无需任何种子任务

MAGPIE 的三大优势

特性MAGPIESelf-Instruct
是否需要种子需要 175 条人工种子
多样性来源模型自身训练分布种子偏置
生成速度单次前向传播多次 API 调用(长 prompt)
成本极低(开源模型本地跑)依赖 API 成本

Llama-3-8B-Base 在 30 万条 MAGPIE 数据上微调后,可与 Llama-3-8B-Instruct 正面抗衡——这证明了一件关键的事:对齐数据并不神秘,它就藏在对齐模型的分布里

低资源警示:当教师模型对目标语言不流利时(如对藏语、盖丘亚语),MAGPIE 会退化——它只能"诱发"模型已经擅长的语言。低资源场景需结合 logit processor + 语言识别过滤,详见 5.4 低资源合成

四、Persona-Driven:PersonaHub

腾讯 PersonaHub(Chan/Ge et al., 2024, arXiv:2406.20094)走向"角色多样性"的极端:

  1. 从网络文本中合成 10 亿级 persona(如"一位研究量子纠错的博士生"、"一位在东京开居酒屋的大叔")
  2. 以每个 persona 为条件,生成该角色可能会问/写的指令与回复

Prompt 示例:

Persona: 一位研究气候变化的海洋生物学家
Task: 根据该角色的专业背景与关注点,生成一条这个人可能会写的技术提问。
Output:

效果:在 7B 学生模型上复现了接近 GPT-4 的 MATH 性能。Persona-Driven 本质上是"可控多样性生成器"——通过显式枚举 persona 空间来扩展指令空间。

五、反向翻译:Humpback

Li 等(ICLR 2024 Oral, arXiv:2308.06259)提出的 Humpback / Instruction Back-Translation 颠倒了常规的流向:

  1. 给模型大量未标注的网页文档
  2. 教它为每篇文档反向预测一条可能的用户指令
  3. 这样得到(指令, 文档)对,经 1-5 分自评过滤到精选子集

Humpback-65B 在 AlpacaEval 上击败 Guanaco、LIMA 和 Falcon-Instruct——且没有用更强教师的蒸馏。这一思路后来被 COIG-Kun(中文反向翻译)直接继承。

六、质量控制:Judge Filtering

Self-Instruct 自己的审计(Wang et al. 2023,200 条抽样,54% 三维度全对 → 46% 至少有一处问题,这是 2022 年 GPT-3 做教师下的数字)奠定了"合成后必须过滤"的行规。现代管线(GPT-4 / Claude-3.5 做教师)错误率显著降低,但"过滤"本身作为流程固定环节已不再是可选项。LLM-as-Judge 是最主流的过滤工具(详见第 8 讲 LLM as Judge):

JUDGE_PROMPT = """你是一位 SFT 数据质检员。请从以下维度对一条(指令, 回复)对打 1-5 分:
- 相关性:回复是否回答了指令?
- 准确性:回复的事实是否正确?
- 完整性:回复是否覆盖指令各子问题?
- 流畅性:语言是否自然?
- 安全性:是否包含有害内容?

仅返回 JSON:{"relevance": x, "accuracy": x, ..., "overall": x, "keep": true|false}

指令:{instruction}
回复:{response}
"""

关键实践

  • Judge 模型应强于生成模型(如生成用 GPT-3.5、Judge 用 GPT-4)
  • 单点打分 < 配对比较(Nemotron-4 报告):Chat-Hard 上奖励模型作为 Judge(0.87)> LLM-as-Judge(0.54)
  • 多 Judge 投票可显著降低位置偏置、长度偏置(详见第 8 讲 LLM as Judge)

七、合成数据的三大风险

合成数据"看起来很美",但忽视以下三个风险会导致训练塌陷。

风险 1:模式坍塌(Mode Collapse)

合成回复在风格上趋同——开头句、结尾句、段落结构高度一致。微调后的模型会继承这种"GPT 腔",失去行文多样性。缓解:在 system prompt 中主动扰动风格("风趣的"/"严肃的"/"口语化的");多 persona 混合。

风险 2:过拟合指令模板

Alpaca 系模板:"Below is an instruction... Write a response..." 训练数据里出现几万次,模型会过度依赖这个前缀,对不符合该模板的 prompt 泛化能力下降。Humpback 和 LIMA 的"反模板"策略正是回应这一问题。

风险 3:教师模型偏置的传递

当 Claude-3.5 是教师时,学生模型会继承 Claude 的回避倾向("作为 AI,我不能……");用 GPT-4 当教师,则继承 OpenAI 的格式偏好(列表、bullet point 过多)。Aya Expanse 的"数据套利"(针对不同子任务从不同教师模型采样)是对这一风险的系统回应

八、方法对比速查

方法种子需求多样性成本适合场景
Self-Instruct175 条基础合成基线
Evol-Instruct种子 + 变异高(纵深)高(多轮 API)提升难度/推理
MAGPIE高(模型分布)极低大规模通用指令
PersonaHubpersona 池极高风格/视角多样性
Humpback少量中(受语料约束)利用无标注语料

本节小结

要点内容
Self-Instruct合成数据的母题:种子 + 自举 + 过滤
Evol-Instruct通过 5+1 种变异提升难度与多样性
MAGPIE从对齐模型前缀诱发 prompt,无需种子
PersonaHub角色多样性驱动的可控生成
Humpback反向翻译:从未标注文档找指令
Judge合成后必须过滤(Self-Instruct 2022 自评三维度全对率 54%)
风险模式坍塌 / 模板过拟合 / 教师偏置传递

下一步