章节导航 第 12 章 / 共 20 章
后训练数据采集与来源
四大来源对比(人工标注5-50$/条/开源数据池/模型合成0.001-0.1$/条/生产日志)、人工标注(InstructGPT 40人/培训/双盲审核)、开源数据池(OpenHermes-2.5/Tulu-3-SFT/Infinity-Instruct/ShareGPT/UltraFeedback/HelpSteer2/NuminaMath)、模型合成(强教弱/自举/结构化合成)、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 AI | 5-15 美元 | 高质量 SFT/偏好 | 美国本土标注员 |
| Scale AI | 3-10 美元 | 大规模 SFT | 上市平台,流程规范 |
| Labelbox | 2-8 美元 | 通用标注 | 灵活定义任务 |
| Toloka | 0.5-3 美元 | 大规模粗标 | 众包,质量参差 |
| 自建团队 | 5-30 美元 | 核心数据 | 长期最划算 |
踩坑经验:
- 众包平台(Toloka/Clickworker)的偏好数据质量普遍低于专业平台 20-30%
- 自建团队前 3 个月产能极低,但 6 个月后质量超过外包
- 标注规范不写正反例,准确率永远上不去 80%
12.2.4 标注规范的”三必写”
一份合格的标注规范必须包含:
- 任务定义:明确要标什么,不要标什么
- 正例:5-10 个典型好样本,标注理由
- 反例:5-10 个典型坏样本,标注问题
例如标”有帮助性”偏好时,必须明确:
- 正例:直接回答 + 必要细节
- 反例:绕弯子 + 空话套话 + 不相关
- 边界:在不确定时偏向”提供更多信息”还是”简洁”
12.3 开源数据池:免费但有坑
12.3.1 主流 SFT 数据池速查
| 数据集 | 规模 | 来源 | 质量 | 适用场景 |
|---|---|---|---|---|
| OpenHermes-2.5 | 1M | GPT-4 合成 | 高 | 通用 SFT |
| Tulu-3-SFT | 939K | 混合 | 高 | 标杆配方 |
| Infinity-Instruct | 7M | 合成+开源 | 中-高 | 大规模 SFT |
| ShareGPT | 100K+ | 用户分享 | 中 | 真实对话 |
| WizardLM/Evol-Instruct | 250K | GPT-4 进化 | 高 | 指令多样性 |
| NuminaMath | 860K | 数学合成 | 高 | 数学能力 |
| Magicoder | 110K | 代码合成 | 高 | 代码能力 |
| OpenOrca | 4M | GPT-4 蒸馏 | 中 | 通用 |
12.3.2 偏好数据池速查
| 数据集 | 规模 | 来源 | 质量 | 备注 |
|---|---|---|---|---|
| UltraFeedback | 64K | 多模型对比 | 高 | 4 维度评分 |
| HelpSteer2 | 21K | 人工标注 | 极高 | NVIDIA 出品 |
| ShareGPT-Preference | 100K | 用户投票 | 中 | 偏差大 |
| Anthropic-HH | 161K | 人工标注 | 高 | Helpfulness+Harmlessness |
| Capreolus | 18K | 人工标注 | 高 | 金标数据 |
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%
解决方案:
- 混合前做全量去重(MinHash + Jaccard 0.7)
- 控制单一来源占比 < 30%
- 用 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 模型合成的偏置陷阱
合成数据天然带有”模型偏置”:
- 风格偏置:合成数据风格高度一致,模型学后会”千篇一律”
- 能力偏置:合成数据只能覆盖强模型已有的能力,无法引入新能力
- 价值观偏置:合成数据继承强模型的价值观,可能与目标用户群体不符
- 安全偏置:合成数据可能过度安全,导致模型拒答率过高
应对方案:
- 用 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 三大合成范式。