跳到主要内容

5.10 训练数据是怎么造出来的

前一节留下的问题​

5.9 帮你做完了决定:这个需求该走微调。它还塞给你两条硬规矩——数据质量远比数量重要、先建评测集再动手。

然后就没了。那几千条数据本身,到底从哪来?

这一节补上。它也是 4.1~4.2 那条线的另一半:预训练数据讲的是「怎么从互联网淘出十几万亿 token」,后训练数据讲的是「怎么从零造出几千条精品」——一个是淘金,一个是打磨。

三条路,成本和天花板各不相同。

路一:人写。贵,但它定义什么叫「好」​

最原始的做法:雇人,一条一条写。

5.2 提过 InstructGPT(2022)的数字:标注员手写了约 1.3 万条示范。听起来不多,但每一条都要读懂问题、想好结构、写出一个「模范答案」——这是实打实的智力劳动。

今天几乎没人靠纯人写凑够数据量了。但人写这一步并没有消失,它换了个位置:

人不再负责生产数据,人负责定义什么叫好。

具体体现在两样东西上:

一是标注规范书。 5.3 提过它有几十页。里面写的不是「请写出好答案」这种废话,而是极其具体的判例:遇到用户带错误前提的问题该纠正还是顺着答、拒答时要不要解释理由、代码答案要不要带注释、多长算啰嗦。规范书本质上是把「好」这个模糊概念,拆成几百条可执行的判断。

二是一小批「金标准」样本。 几十到几百条由最懂业务的人亲手写的答案,作用不是拿去训练,而是当标尺——用来校准标注员、校准模型裁判(7.5 节那套流程)、以及在后面两条路里当筛选的参照。

一个实践建议,和 7.4 节的结论完全一致:标准由一个懂业务的人拍板,比多人投票好。评测标准和数据标准都是产品决策,多人投票会把它稀释成谁也不满意的平均值。真需要多人时,要量标注者之间的一致率(Cohen's kappa,7.5 深入层有公式),低于 0.6 说明规范书还没写清楚——该改的是规范,不是催标注员再仔细点。

路二:让强模型写。省,但有天花板​

5.2 的深入层已经点过这条路:用当前最强的模型生成候选答案,人工筛选修改,当作 SFT 数据。开源社区的大量指令数据集都是这么来的。

它便宜到几乎不用算账,但有两个硬边界:

  • 天花板是老师。 学生学的是老师的输出,所以它大致不会超过老师。想造出「比现有最强模型更好」的数据,这条路走不通。
  • 合规是灰区。 6.5 节提过:用别家闭源模型的输出训练自己的模型,可能违反对方服务条款。这是工业界一个现实的问题。

所以蒸馏适合「我要一个便宜的小模型,达到大模型八成水平」,不适合「我要做出最好的模型」。

路三:让模型自己写,再筛。这是现在的主力​

第三条路的思路听起来像永动机:让要训练的那个模型自己生成答案,挑出好的,再拿回去训它自己。

自己造数据训自己,怎么可能变强?

关键在于一个不那么显然的事实:模型的「最好一次」比它的「平均一次」好得多。

同一道题让它答 20 遍,这 20 份答案的质量是有分布的——有平庸的,也有那么一两份思路清晰、结构漂亮的。如果你有办法把好的那份挑出来,你就得到了一份高于模型平均水平的数据。拿这些数据回炉训练,模型的平均水平就被拉向了它原来的上限。

这叫拒绝采样(rejection sampling,也叫 best-of-N 筛选)。而「挑出好的那份」靠的正是这一章前面训出来的东西——5.3 的奖励模型,或者 5.5 的可验证答案(数学题验算、代码跑测试)。

注意这里发生了什么:5.3 那个「判断比创作容易」的杠杆,被第二次用上了。 第一次用它是为了训奖励模型,这次是为了造数据。

自己拖一遍就明白它有多大威力,以及它什么时候会反噬:

🎮 动手实验
拒绝采样:让模型自己写 N 份,挑最好的那份
同一道题让模型采样 N 个答案,用一把「尺子」给它们打分,只留最高分的那条当训练数据。拖动 N,再换换尺子的精度——注意第三把尺子会发生什么。
校准过的奖励模型,或可自动验证的任务(数学题验算、代码跑测试)
选中答案的真实质量
73.5
比「随便选一份」
+21.1
采样成本
8 倍
池中最好的那份
93.5
3045607590随便选一份(52)110203040采样份数 N
尺子很准时,这是一台印钞机。N 从 1 加到 40,选中答案的真实质量从 52.4 涨到 86.1——模型本身一个参数都没变,你只是把它「运气好那一次」筛了出来。 把这些筛出来的答案当作新的示范数据回炉训练,模型的平均水平就被拉到了接近它「最好那一次」的位置。 数学和代码之所以是这套方法的主场,正因为它们的尺子几乎完美:答案能验算、代码能跑测试([5.5 节](./05-dpo-grpo.mdx)的 RLVR 同源)。
💡 要点:拒绝采样把 [5.3 节](./03-rlhf.mdx)那个杠杆又用了一次——判断比创作容易。模型「运气好那一次」的水平,明显高于它的平均水平;有一把尺子能把那一次挑出来,就等于凭空造出了比模型平均水准更好的训练数据,再拿去回炉训练。
但这条杠杆完全架在尺子的可靠性上。尺子不准时,N 越大,你挑中的越是「最会骗尺子的那条」而不是「最好的那条」——曲线会掉到连随便选一个都不如。这就是 [5.4 节](./04-ppo.mdx) reward hacking 在数据构造里的形态。
候选池与打分偏差是固定种子生成的教学构造;曲线是精确期望(对所有大小为 N 的子集求平均),不是单次抽样。

三个实验:

实验 ①:尺子很准时,这是一台印钞机。 保持「🎯 尺子很准」,把 N 从 1 拖到 40。选中答案的质量从 52 涨到 86——模型一个参数都没改,你只是把它运气好那一次筛了出来。这就是为什么数学和代码是这套方法的主场:它们的尺子几乎完美(答案能验算、代码能跑测试)。

实验 ②:换成「🙂 尺子一般」。 同样的 N,曲线低了一截。实践含义很直接:与其把算力砸在加大 N 上,不如先花力气把尺子校准。

实验 ③:换成「🙈 尺子很差」,然后慢慢拖大 N。 红线先涨了一点,然后一路往下掉,最后跌破了「闭着眼随便选一份」的基线。

你花了 40 倍的采样成本,得到的数据比不筛还差。

原因不难理解:N 越大,你越有机会遇到「真实质量平平、但恰好把尺子骗得很高」的那一条。尺子的噪声越大,这种样本越容易在竞争中胜出。 这就是 5.4 节 reward hacking 的数据版,也是古德哈特定律的标准形态——一个指标一旦被当成筛选目标,它就不再是个好指标。

「自己教自己」这个说法在哪里不准确

「模型自己造数据训自己」听起来像凭空长本事,容易让人以为可以无限循环下去。有三处不准确。

一、变强的不是知识,是稳定性。 拒绝采样没有给模型任何新知识——它做的是把「偶尔能做对」变成「经常能做对」,把分布的尾部往上提。所以它对「模型其实会、只是发挥不稳」的任务效果最好,对「模型压根不会」的任务毫无用处(回扣 5.9:微调教不会新知识)。

二、它会收敛,不会永动。 每一轮筛选都在收窄分布——好处是稳定性上升,坏处是多样性下降。轮数多了,模型的输出会变得越来越同质、越来越「一个味儿」。这和 4.1 讲的模型崩溃是同一个机制在小尺度上的表现。实践上的对策是:每轮掺入新的真实数据、保留一定采样温度、并盯住输出多样性这个指标。

三、它完全架在尺子上。 实验 ③ 已经演示了:尺子不准时,这套方法是在系统性地往训练数据里掺毒,而且掺得越多越努力就越糟。所以顺序不能颠倒——先有可靠的评测和尺子,再谈造数据。

这里要点破本书结构上的一个张力:全书是按生产流水线的顺序讲的(数据 → 训练 → 后训练 → 推理 → 评测),但真做项目时,顺序几乎是反的——先建评测集和尺子(第 7 章),再回头动手造数据、训模型。读的顺序图省事,做的顺序图靠谱,这两件事不必强行统一,但你得知道它们不一样。

数据飞轮:让生产环境替你攒数据​

上面三条路都是「开工前先造一批」。还有第四种数据,它不用造——它自己会长出来。

系统上线之后,真实用户的每一次交互都是数据。把它接成一个闭环——这叫数据飞轮:

  1. 留轨迹:记录真实的输入、输出、以及用户的反馈信号(点赞点踩、有没有重问、有没有中途放弃);
  2. 做错误分析(7.4 节那一整套):逐条读、归类、找出占比最大的失败模式;
  3. 修正:把这些失败案例的正确答案写出来——这时候人写的效率最高,因为你已经知道模型错在哪了;
  4. 回炉:修正后的样本进 SFT 数据,同时进评测集当回归测试;
  5. 回到第 1 步。

这个闭环的价值在于它是定向的。凭空造一万条数据,大部分模型本来就会;而从生产回流的每一条,都对应一个真实发生过的失败——同样一条数据,价值高出一个量级。

两个必须注意的地方:隐私(真实用户数据进训练集是有合规门槛的,通常需要脱敏和明确授权),以及抽样偏差(日志里只有还在用的人;试了一次就走的那批人,他们的失败案例不在你的日志里——7.4 的 caution 讲过这件事)。

别忘了配比​

最后一件容易被漏掉的:后训练数据也有配比问题,和 4.2 节讲的预训练配比是同一类问题,只是维度不同:

  • 任务分布:问答、改写、抽取、代码、拒答……各占多少?照着你的真实流量配,而不是照着「哪类数据好造」配。
  • 难度分布:全是简单题,模型学不到东西;全是难题,学不动。要有梯度。
  • 掺通用样本防遗忘:5.9 提过——在窄数据上训得太狠会丢通用能力。业界常见的做法是每批数据里保留一小部分通用样本,成本极低,效果明显。
  • 拒答样本要专门造:模型默认不会说「我不知道」(5.6 节讲过原因——训练信号里几乎没有奖励弃权的样本)。想让它学会恰当拒答,就得专门构造这类示范,它不会自己长出来。
本节要点
  • 后训练数据三条路:人写(贵,但它定义什么叫好)、蒸馏(省,天花板是老师且有合规灰区)、拒绝采样(现在的主力)。
  • 人写这一步没消失,只是换了位置:从「生产数据」变成「写规范书 + 造金标准」。标准由一个懂业务的人拍板优于多人投票;一致率低说明规范没写清,该改规范。
  • 拒绝采样:让模型采样 N 份、用尺子挑最好的、回炉再训。它把 5.3「判断比创作容易」的杠杆用了第二次——模型的最好一次远好于平均一次。
  • 但它完全架在尺子上:尺子不准时 N 越大越糟,最后跌破「随便选一份」的基线(古德哈特定律 / reward hacking 的数据版)。先有可靠的尺子,再谈造数据。
  • 它变强的是稳定性不是知识,而且会收敛不会永动——多轮筛选让多样性下降,要掺真实数据、盯多样性指标。
  • 数据飞轮:生产日志 → 错误分析 → 修正 → 回炉 + 进评测集。回流数据是定向的,单条价值高出一个量级;注意隐私与「流失用户不在日志里」的抽样偏差。
  • 后训练也有配比:任务分布照真实流量配、难度要有梯度、掺通用样本防遗忘、拒答样本必须专门造。
📝 动手自测0/4
1. 「让模型自己生成答案、筛选后再训练自己」为什么不是永动机?
2. 实验 ③ 里用一把很差的尺子做 best-of-N,N 越大质量反而越低、最后跌破「随便选一份」的基线。为什么?
3. 在拒绝采样里,被淘汰的那些答案应该怎么处理?
4. 为什么「模型学会恰当拒答」需要专门构造数据,而不会自己长出来?

延伸阅读​