第 12 章 第三部分:后训练数据工程

后训练数据采集与来源

四大来源对比(人工标注5-50$/条/开源数据池/模型合成0.001-0.1$/条/生产日志)、人工标注(InstructGPT 40人/培训/双盲审核)、开源数据池(OpenHermes-2.5/Tulu-3-SFT/Infinity-Instruct/ShareGPT/UltraFeedback/HelpSteer2/NuminaMath)、模型合成(强教弱/自举/结构化合成)、Magpie合成方法、生产日志(隐私/采样偏差/反馈信号/回流闭环)

数据采集 人工标注 开源数据池 模型合成 Magpie 生产日志

预训练数据靠”挖”,后训练数据靠”养”。

四大来源各有死穴:人工贵、开源杂、合成偏、日志脏。


12.1 四大来源全景对比

后训练数据有四大来源,各自的成本、质量、规模、适用阶段截然不同:

来源单条成本单条质量规模上限适用阶段主要风险
人工标注5-50 美元极高1 万-10 万SFT/偏好成本爆炸
开源数据池≈ 0 美元中-高10 万-1000 万SFT/偏好同质化/污染
模型合成0.001-0.1 美元中10 万-1000 万SFT/偏好/RL模型偏置
生产日志≈ 0 美元高10 万-1 亿SFT/偏好隐私/采样偏差

工业级配方通常是”混合四源”:

  • 5-10% 人工标注做”质量锚”
  • 30-50% 开源数据做”能力底盘”
  • 30-50% 模型合成做”长尾补充”
  • 10-20% 生产日志做”真实分布对齐”

下面逐一拆解。


12.2 人工标注:贵但准

12.2.1 InstructGPT 的 40 人标准

InstructGPT(Ouyang et al., 2022)是人工标注的标杆案例。OpenAI 招募了 40 名全职标注员:

  • 筛选严格:通过率 < 5%,要求本科以上学历、英语母语、通过 SFT 与偏好标注两轮测试
  • 培训密集:入职两周培训,覆盖指令理解、安全边界、偏好标定
  • 双盲审核:每条数据由 2 名标注员独立标注,分歧 > 1 分的进入仲裁
  • 持续校准:每周一次校准会议,对齐标注标准
  • 薪酬:时薪 30-50 美元,远高于众包平台

这套体系的产出是 13K 条 SFT 数据 + 33K 对偏好数据,质量极高。但成本惊人——单条 SFT 数据综合成本 20-50 美元,单对偏好数据 30-80 美元。

12.2.2 标注流程 SOP

工业级人工标注的标准流程:

1. 标注规范编写(20-50 页,含正反例)
2. 标注员筛选(测试 100 条,准确率 ≥ 85%)
3. 试标注 100 条 + 双盲交叉校验
4. 校准会议对齐分歧
5. 正式标注(每条 5-15 分钟)
6. 双盲复审(分歧 > 1 分仲裁)
7. 抽检 10% 进入终审

12.2.3 标注平台选择

平台单条成本适用场景备注
Surge AI5-15 美元高质量 SFT/偏好美国本土标注员
Scale AI3-10 美元大规模 SFT上市平台,流程规范
Labelbox2-8 美元通用标注灵活定义任务
Toloka0.5-3 美元大规模粗标众包,质量参差
自建团队5-30 美元核心数据长期最划算

踩坑经验:

  • 众包平台(Toloka/Clickworker)的偏好数据质量普遍低于专业平台 20-30%
  • 自建团队前 3 个月产能极低,但 6 个月后质量超过外包
  • 标注规范不写正反例,准确率永远上不去 80%

12.2.4 标注规范的”三必写”

一份合格的标注规范必须包含:

  1. 任务定义:明确要标什么,不要标什么
  2. 正例:5-10 个典型好样本,标注理由
  3. 反例:5-10 个典型坏样本,标注问题

例如标”有帮助性”偏好时,必须明确:

  • 正例:直接回答 + 必要细节
  • 反例:绕弯子 + 空话套话 + 不相关
  • 边界:在不确定时偏向”提供更多信息”还是”简洁”

12.3 开源数据池:免费但有坑

12.3.1 主流 SFT 数据池速查

数据集规模来源质量适用场景
OpenHermes-2.51MGPT-4 合成高通用 SFT
Tulu-3-SFT939K混合高标杆配方
Infinity-Instruct7M合成+开源中-高大规模 SFT
ShareGPT100K+用户分享中真实对话
WizardLM/Evol-Instruct250KGPT-4 进化高指令多样性
NuminaMath860K数学合成高数学能力
Magicoder110K代码合成高代码能力
OpenOrca4MGPT-4 蒸馏中通用

12.3.2 偏好数据池速查

数据集规模来源质量备注
UltraFeedback64K多模型对比高4 维度评分
HelpSteer221K人工标注极高NVIDIA 出品
ShareGPT-Preference100K用户投票中偏差大
Anthropic-HH161K人工标注高Helpfulness+Harmlessness
Capreolus18K人工标注高金标数据

12.3.3 用开源数据的”三查”

开源数据不能拿来就用,必须做三查:

一查:来源可溯

  • OpenHermes-2.5 是 GPT-4 合成的,使用时要注意 OpenAI ToS 风险
  • ShareGPT 是用户上传的 ChatGPT 对话,含 PII 风险
  • OpenOrca 是蒸馏 13B 模型的,质量参差

二查:评测污染

# 检查数据是否包含 MMLU 测试集
from datasketch import MinHash
def check_contamination(dataset, benchmark, ngram=13):
    # 13-gram MinHash 检查
    ...

工业级要求污染率 < 0.1%,必扫 MMLU、GSM8K、HumanEval、IFEval、MT-Bench 等 20+ 评测集。

三查:分布对齐

  • 检查任务分布:不要全是闲聊
  • 检查语言分布:英文占比过高会拉低中文能力
  • 检查长度分布:超长数据(>8K)会拖慢训练

12.3.4 开源数据的同质化陷阱

很多开源数据集底层共享来源:

  • OpenHermes / OpenOrca / Infinity-Instruct 都部分来自同一批 GPT-4 合成
  • 直接混合会导致严重同质化,4-gram 重复率超过 60%

解决方案:

  1. 混合前做全量去重(MinHash + Jaccard 0.7)
  2. 控制单一来源占比 < 30%
  3. 用 Embedding 聚类找冗余簇,每个簇只保留 N 条

12.4 模型合成:便宜但有偏

12.4.1 三种合成范式

范式 1:强教弱(Distillation)

用 GPT-4 等强模型生成响应,弱模型学习。代表:OpenHermes、OpenOrca。

# 强教弱伪代码
prompts = load_prompts()  # 来自开源/合成
for p in prompts:
    response = gpt4.chat(p, temperature=0.7)
    save_to_sft_data(p, response)

优点:质量稳定,单条成本 0.01-0.1 美元 缺点:受限于强模型的能力上限,无法超越强模型

范式 2:自举(Self-Improvement)

用模型自己生成数据训练自己。代表:Self-Rewarding LM、SPIN。

# 自举伪代码
for round in range(3):
    responses = model.generate(prompts, temperature=0.8)
    filtered = reward_model.filter(responses)  # 只保留高质量的
    model.finetune(filtered)

优点:不依赖外部模型 缺点:容易”模式坍塌”,多样性骤降;需要严格的质量过滤

范式 3:结构化合成

用模板 + LLM 组合生成特定任务数据。代表:Magpie、Evol-Instruct。

# 结构化合成伪代码(数学领域)
template = "Generate a {difficulty} math problem about {topic}, with step-by-step solution"
for topic in ["algebra", "geometry", "calculus"]:
    for difficulty in ["easy", "medium", "hard"]:
        data = llm.generate(template.format(**...))

优点:可控性强,能定向补足能力短板 缺点:模板设计需要领域专家

12.4.2 Magpie 合成方法详解

Magpie(Xu et al., 2024)是 2024 年最有影响力的合成方法,核心思想是”让模型自吐 prompt”。

传统合成的痛点:需要先准备 prompt 池,prompt 池的多样性决定数据多样性。但人工准备 prompt 池容易饱和(Self-Instruct 175 种子 → 52K 数据后多样性饱和)。

Magpie 的洞察:对齐过的模型本身就是优秀的 prompt 生成器。直接让模型从空 prompt 开始生成,输出天然就是 (prompt, response) 对。

# Magpie 算法核心
def magpie_generate(model, n_samples):
    results = []
    for _ in range(n_samples):
        # 空 prompt,让模型自吐
        prompt = "<|im_start|>user\n"
        response = model.generate(prompt, temperature=1.0, max_tokens=2048)
        # response 的前半部分是 user prompt,后半部分是 assistant response
        user_msg, assistant_msg = parse_magpie_output(response)
        results.append((user_msg, assistant_msg))
    return results

Magpie 的关键参数:

  • temperature:1.0(必须高,否则多样性坍塌)
  • top_p:0.95
  • 采样数量:100K-1M
  • 后过滤:去重 + 质量过滤,保留 50-70%

Magpie 的效果:

  • 4-gram 多样性比 Self-Instruct 高 35%
  • 任务覆盖率比 Evol-Instruct 高 20%
  • 在 Llama-3-8B 上 SFT 后,MT-Bench 7.8(接近 GPT-3.5)

12.4.3 模型合成的偏置陷阱

合成数据天然带有”模型偏置”:

  1. 风格偏置:合成数据风格高度一致,模型学后会”千篇一律”
  2. 能力偏置:合成数据只能覆盖强模型已有的能力,无法引入新能力
  3. 价值观偏置:合成数据继承强模型的价值观,可能与目标用户群体不符
  4. 安全偏置:合成数据可能过度安全,导致模型拒答率过高

应对方案:

  • 用 3-5 个不同模型合成,混合降低偏置
  • 在合成数据中混入 20% 真实数据
  • 做严格的多样性度量(4-gram ≥ 0.6,InsTag ≥ 1000)

12.5 生产日志:免费但脏

12.5.1 生产日志的价值

生产日志是模型上线后用户与模型的真实交互记录,包含:

  • 用户 prompt
  • 模型 response
  • 用户反馈(点赞/点踩/重新生成/复制)
  • 后续追问

这是最接近”真实分布”的数据,但也是最脏的数据。

12.5.2 生产日志的四大风险

风险 1:隐私泄露

用户 prompt 中可能包含 PII(姓名、电话、身份证、地址)。

应对:用 Presidio 等工具做 PII 检测与脱敏,单条数据 PII 检出率必须 < 0.01%。

风险 2:采样偏差

活跃用户 ≠ 全体用户。重度用户的数据会主导训练。

应对:

  • 按用户 ID 哈希采样,每用户最多贡献 N 条
  • 按活跃度分层采样

风险 3:反馈信号噪声

用户的”点踩”未必表示质量差,可能是答案不符用户预期(用户错了)。

应对:

  • 只用”点赞 + 复制”作为正信号
  • “点踩 + 重新生成”作为弱负信号
  • 用 Reward Model 做二次过滤

风险 4:分布漂移

用户行为会随时间变化(节日、热点事件),直接用历史数据训练可能错配当前需求。

应对:

  • 用最近 30 天数据
  • 按周重新采样

12.5.3 生产日志的回流闭环

工业级生产日志回流闭环:

1. 日志采集:用户交互 + 反馈 → 数据湖
2. 隐私脱敏:Presidio + 规则过滤
3. 质量过滤:Reward Model 评分 + 长度过滤
4. 反馈加权:点赞+3,复制+2,点踩-2,重生成-1
5. 多样性采样:用户去重 + 任务聚类
6. 标注转化:高分自动转 SFT,低分转偏好负样本
7. 配方注入:控制日志数据占比 ≤ 20%
8. 训练 + 评测 + 上线

踩坑经验:

  • 日志数据占比超过 30% 会让模型”过拟合”当前用户群
  • 必须用 A/B 测试验证日志数据的实际贡献
  • 日志数据的”复制率”比”点赞率”更可靠

12.6 四大来源的工业配比

不同团队的来源配比差异巨大,但有几个经验法则:

12.6.1 按团队规模配比

团队规模人工开源合成日志
大厂(百人+)10-15%30-40%30-40%15-20%
中型(20-50人)5-10%40-50%35-45%5-10%
初创(<20人)2-5%50-60%35-45%0-5%

12.6.2 按训练阶段配比

  • SFT 阶段:开源 50% + 合成 30% + 人工 10% + 日志 10%
  • DPO 阶段:人工 20% + RLAIF 50% + 开源 20% + 日志 10%
  • RLVR 阶段:合成 70% + 开源 30%(必须可验证)

12.6.3 按”质量锚”思路配比

不管比例如何,必须有 5-10% 的人工金标数据作为”质量锚”,用于:

  • 校准 Reward Model
  • 评估其他来源数据的质量
  • 训练最后的精修阶段

12.7 来源选择的决策树

要补什么能力?
├─ 通用对话 → 开源(OpenHermes/Tulu-3-SFT)+ Magpie 合成
├─ 数学推理 → 开源(NuminaMath)+ 模板合成
├─ 代码能力 → 开源(Magicoder)+ 真实 GitHub 数据
├─ 工具调用 → 合成(xLAM/Glaive)+ 真实 API 日志
├─ 安全对齐 → 人工标注(不可外包)+ Constitutional
├─ 多轮对话 → 合成(UltraChat)+ 生产日志
└─ 偏好对齐 → 人工(金标)+ RLAIF(规模)+ UltraFeedback(开源)

第 13 章将深入 SFT 指令数据的构建方法,重点拆解 Self-Instruct、Evol-Instruct、Magpie 三大合成范式。