Skip to content
🔗 分享本题
查看我的学习进度 →

🧠 图解记忆:从人喂模型到模型自己制造训练燃料——合成数据是双刃剑。

背景(面试必答题)

2023 年:LLM 预训练依赖互联网爬取的数万亿 Token 人类文本
2025 年后:高质量人类语料接近枯竭
      → 合成数据(模型用自己的输出来生成训练数据)成为主流训练范式

三种主流合成数据生成方法

方法 1:Self-Instruct(自指令)⭐

python
# 核心流程:让一个大模型用少量种子示例自动生成大量指令-回答对
seed_tasks = [
    {"instruction": "将以下句子翻译成英文", "input": "你好世界", "output": "Hello World"},
    {"instruction": "总结以下段落", "input": "...长文本...", "output": "...摘要..."},
]

# 使用 teacher model 生成更多任务
def generate_tasks(seed_tasks, model, num_per_seed=10):
    all_tasks = []
    for seed in seed_tasks:
        prompt = f"基于以下示例,生成 {num_per_seed} 个类似的任务。\n\n"
        prompt += f"示例: instruction={seed['instruction']}, input={seed['input']}"
        response = model.generate(prompt)
        # 解析 response 中的新任务
        new_tasks = parse_generated_tasks(response)
        all_tasks.extend(new_tasks)
    return all_tasks

优点: 零成本、覆盖面广 缺点: 可能放大模型偏差,需要人工校验或过滤

方法 2:教师-学生蒸馏(Teacher-Student Distillation)⭐⭐

python
# 大模型(教师)用小数据集标注 → 小模型(学生)学习这些标注
teacher_model = load("gpt-4")  # 高质量但贵
student_model = load("qwen2.5-7b")  # 快速且便宜

# 步骤 1: 教师模型为每个样本生成高质量回答
annotations = []
for question in unlabeled_questions:
    answer = teacher_model.generate(question)  # 质量高
    annotations.append({"question": question, "answer": answer})

# 步骤 2: 用标注数据训练学生模型
student_model.sft(annotations, epochs=3)
# 学生模型获得接近教师的能力,但推理速度快 10x、成本低 100x

工业应用: LLaMA、BLOOM、Yi 等开源模型都有大量合成数据参与训练

方法 3:偏好对构建(Preference Pairs)⭐⭐⭐

python
# 用于 RLHF/DPO 的训练:同一 prompt 生成多个回答,排序选出好/坏的回答
prompts = [...]  # 一批 prompt
responses = {}  # 每个 prompt 生成 N 个回答

for prompt in prompts:
    responses[prompt] = [model.generate(prompt) for _ in range(N)]
    # 方式 A: 用另一个打分模型评估并排序
    scores = rater.evaluate_all(responses[prompt])
    preferred = max(responses[prompt], key=lambda x: scores[x])
    rejected = min(responses[prompt], key=lambda x: scores[x])
    
    # 方式 B: 用规则筛选(长度、格式、安全等)
    preferred = filter_by_rule(responses[prompt])
    rejected = exclude_responds(responses[prompt])

# 生成的 (prompt, preferred, rejected) 三组数据用于 DPO 训练
dpo_dataset = build_preference_dataset(prompts, responses, preferred, rejected)

2025-2026 趋势: DeepSeek R1 的 GRPO、RLVR(Verifiable Rewards)等都是合成数据的极端形式——不需要任何人工标注。

风险与争议(面试加分点)

风险说明
数据污染 / 模型坍缩模型在"自己的产出的产出"上训练 → 能力退化、多样性下降
分布偏移合成数据偏向模型的"舒适区",覆盖盲区不足
评估混淆模型在自己的合成测试集上表现好 ≠ 真正能力提升
版权 / 隐私用有版权的人类文本来生成合成数据再卖出去,法律灰色地带

工程最佳实践

  1. 混合策略:合成数据 + 人工精选数据组合使用(如 70:30),避免纯合成数据
  2. 严格过滤:建立多层过滤器(困惑度、重复检测、安全分类器)
  3. 外部验证:永远用独立于合成过程的真实评测集验证能力

面试话术:

"合成数据本质上是把'高质量人类标注'的需求从人力转移到模型自身。Self-Instruct 解决了指令覆盖问题,教师蒸馏解决了质量对齐问题,偏好对构建解决了行为对齐问题。但它的核心风险是模型在'自己产出的数据'上训练可能导致能力退化——所以工业界通常混合使用合成数据和人工数据,并保持独立的验证集。2026 年的趋势是更少的标注工人、更多的合成数据迭代,但关键在于每次迭代的评估必须严格。"