RLHF Book · 大模型后训练  /  Nathan Lambert
CHAPTER 11

偏好数据

RLHF 里唯一不能用代码生成的东西:一条一条被人比较出来的偏好标签,它怎么被设计、采购、标注、验收和用坏。

原章节:11-preference-data.md 对应讲座:lec8(第 10、11 章) 英文原文

0. 本章导读

第 10 章论证了一件让人不太舒服的事:人类偏好在哲学、经济学、心理学的意义上都不是一个良定义的对象——它会漂移、依赖框架、在复杂情形下不满足传递性、本质上是多维的。既然如此,我们凭什么还能拿它训模型?答案是:我们不需要偏好在理论上良定义,只需要它在操作上可测量。本章就是那个「操作」的说明书。

这一章在全书里的性质和别的章不一样。第 5 章讲奖励模型,给的是 Bradley-Terry 损失和一段 PyTorch;第 6 章讲策略梯度,给的是推导。本章给的是组织流程:界面怎么设计、尺度设几档、说明书写多少页、标注员怎么筛、一致率多少算及格、一条比较值多少钱、六周合同的哪几周的数据要扔掉。作者本人在 HuggingFace H4 团队和 Ai2 的 Tülu / OLMo 项目里都当过这条流水线的甲方,所以这一章的信息密度基本等于「花过钱的人的复盘」,而不是论文综述。

它也是整条后训练流水线里最不透明的一环。到 2026 年为止,还没有任何一个开放模型把「完整的人类偏好数据 + 采集方法」一起放出来;最接近的是 NVIDIA Nemotron 团队的 HelpSteer 系列。所有厂商都在做这件事,但几乎没人写下来怎么做的。这就是为什么这一章的很多知识只能来自作者这样的亲历者。

本章会依次回答这些问题:

  • 为什么必须是「比较」而不是「打分」或者「写答案」——判别比生成容易,这是 RLHF 全部经济性的来源。
  • on-policy 到底是什么意思——在偏好数据语境里它比 RL 教科书里的定义软,但它是这条流水线上最硬的排期约束。
  • 界面即测量仪器——同一批标注员,换个界面就换一批数据;速度、平局选项、是否显示元数据,全都会改变你收到的标签。
  • 尺度设计——1–5 分评分 vs 5 点 / 8 点 Likert 相对排序,为什么最后几乎都被压成一个 bit。
  • 协议、招募、质控——说明书写什么、标注员怎么筛、黄金集怎么用、标注者间一致性(IAA)多少是正常水平、多人标注怎么聚合。
  • 钱和时间——一条比较大约 5 美元、一份 50 万美元的合同六周交付约 10 万条、前两周的数据基本要扔。
  • 什么时候根本不该买人类数据——结构化偏好、合成偏好、现成奖励模型,以及作者对自建 / 采购 / 合成三条路的判断。
核心结论
  • 偏好数据之所以有效,是因为判别比生成容易:人和模型都能在写不出好答案的时候,可靠地指出两个答案里哪个更好。
  • 被选中的 chosen 回复不等于正确答案,它只是「相对于同时展示的那几个更好」。两个都错也能产生有用的训练信号。
  • 数据必须尽量 on-policy——由当前这一代模型自己生成的回复上标注的偏好,比从 HuggingFace 上聚合来的通用偏好集有效得多。这条约束决定了数据采集必须和训练排期绑在一起。
  • 几乎所有实际训练都用成对排序,并在训练前二值化成 chosen / rejected 喂给 Bradley-Terry 损失;评分(1–5、多属性)主要作为元数据和筛选依据留着。
  • 标注者间一致率的现实水平是 60%–77%(InstructGPT 训练标注员之间 72.6%,Anthropic 研究员 vs 众包工约 63%)。这个数字直接构成奖励模型准确率的天花板。
  • 成本量级:一份约 50 万美元的合同,六周交付约 9.7 万条比较,折合每条约 5 美元;前两周的数据大部分要扔掉。专家域(代码、数学、法律医疗)单价再高一个数量级。
  • 需要多少条?HelpSteer2 用约 1 万条高质量对就训出了当时最好的开源 RM;典型商业合同在 10 万条量级;Llama 2 那种百万级只有 frontier lab 玩得起。质量和 on-policy 程度比数量重要得多。
  • Lambert 的判断:新团队不要一上来就买人类偏好数据。没有一条已经跑通的后训练配方接着,买来的数据会直接变质浪费。先用 AI 反馈、结构化偏好和现成 RM 把管线跑起来。

1. 为什么非要偏好数据不可

写不出损失函数,就只能收集代理信号

RLHF 从头到尾在解决同一个问题:我们没法把「人想要什么」写成一个可优化的损失函数。「这首诗更好」「这个解释更清楚」「这个语气更得体」——没有一个能写成闭式表达式。而后训练的前半段(SFT、RLVR)都建立在「存在正确答案」之上:数学题有标准答案、单元测试有通过与否、格式约束有代码可验。偏好,是我们在没有正确答案时才伸手去够的那个东西。

既然写不出真实目标,就退而求其次收集一个代理信号(proxy signal):让人在具体的两个回复之间做选择,用大量这样的局部选择去拟合一个标量奖励函数。这条路线最早被明确写成研究纲领是 Leike 等人 2018 年的 Scalable agent alignment via reward modeling,然后一路被现代语言模型继承下来。

直觉:判别比生成容易 这是整章最重要的一句话,也是 RLHF 全部经济性的来源。人(以及模型)能在自己写不出好答案的时候,可靠地指出两个答案里哪个更好。让一个标注员写一段专业级的法律意见,成本极高且质量不可控;让他在两段法律意见之间选一个,他能凭一些浅层线索(有没有回避问题、有没有编法条、结构是否清楚)做出相当靠谱的判断。这个「判别 > 生成」的差价,就是偏好数据能撬动模型能力的杠杆。

把这句话放到监督信号的谱系里看更清楚:示范数据(SFT)要求标注员的能力 ≥ 模型;偏好数据只要求标注员能区分模型输出的好坏。当模型越来越强,前者迅速变得不可行,后者还能撑很久——这也是为什么后训练的重心会从「人写答案」转向「人做判断」,再转向「模型做判断」(第 12 章)。

chosen 不是「正确答案」

一个极其常见的误解需要在这里先拆掉。偏好数据里的 chosen 列,不是这个 prompt 的标准答案,它只是「相对于同时被展示的那几个回复更好」——更清楚、更安全、更有帮助,或者错得更少。

这有两个直接推论。第一,两个回复都错,这条数据依然有用:只要标注得当,模型学到的是「在这个错误方向上,这一类错法比那一类错法更接近可接受」,梯度依然指向正确方向。第二,chosen 的绝对质量取决于采样池:如果你的模型生成的 8 条回复全是垃圾,那么标注出来的 chosen 也是垃圾里挑出来的,奖励模型学到的会是「垃圾的相对排序」而不是「什么是好」。这就是为什么采样温度、采样条数、以及模型 checkpoint 的选择,本身就是偏好数据质量的一部分——它们决定了标注员看到的分布。

常见误区 把偏好数据当成「弱化版的 SFT 数据」,于是直接把 chosen 列抽出来做 SFT。这在数据是从强模型蒸馏来的时候确实能用(第 12 章),但对真人标注的 on-policy 偏好数据是有害的:chosen 来自你自己模型的采样,它的绝对质量不比你的 SFT 模型高,拿它再做 SFT 等于让模型模仿自己,什么都学不到。偏好数据的价值全在 chosen 与 rejected 之间的差里,不在 chosen 本身。

整条流水线上最不透明的一环

到 2026 年为止,没有任何一个开放模型把完整的人类偏好数据连同采集方法一起发布过。最接近的是 NVIDIA Nemotron 团队的 HelpSteer 系列——HelpSteer2、HelpSteer2-Preference(ICLR 2025)和 HelpSteer3-Preference——它们不仅放了数据,还写清了标注协议、标注员人数、聚合规则。本章后面的很多具体数字都会引用它们,因为公开世界里基本只有这一份可查的样本。

不透明的后果是双向的。对读者来说,这一章的大部分内容在论文里查不到,只能靠亲历者转述;对整个领域来说,这意味着「模型行为是否真的反映了给标注员的规范」这个闭环从来没有被外部审计过——这一点会在第 9 节回来讲。

还有一个非常现实的后果:正因为人类偏好数据又贵又难又不透明,大量新入场的团队干脆跳过它,改用 AI 反馈数据、现成的开源奖励模型、或者结构化 / 合成偏好对来绕开从零采集。这不是偷懒,在很多情况下是正确的工程决策——本章第 8 节和第 9 节会给出判断这件事的具体标准。

2. on-policy:偏好数据上最硬的一条约束

这里的 on-policy 比 RL 教科书里软

在标准强化学习里,on-policy 是个严格的技术词:某次梯度更新用的数据,必须由做这次更新之前那一刻的策略采出来。REINFORCE 是 on-policy 的,Q-learning 是 off-policy 的,PPO 通过重要性采样容忍了几步的偏离(第 6 章)。

偏好数据里的 on-policy 是这个词的软化版本:它指数据来自当前这一代模型。具体讲,后训练是 base → SFT → RLHF 一串阶段,每个阶段留下一串 checkpoint;所谓 on-policy 的偏好数据,是指你在刚做完 SFT 的那个 checkpoint 上采样出候选回复,标注完再拿去做下一阶段的 RLHF 训练。它不要求「上一步梯度前的那个精确参数」,只要求「同一个模型家族、同一个训练阶段」。

直觉:为什么模型家族这么重要 不同模型的生成有各自的指纹——爱不爱用 markdown 列表、开头是不是「Great question!」、平均多长、思维链摊开还是收起、拒答的措辞。奖励模型学的是「在它见过的那种文本分布上,什么算好」。如果你用 GPT-4 和 Llama 的输出训 RM,然后拿它去给你自己的模型打分,RM 面对的是一个分布外的输入,它给出的排序很可能由风格差异主导,而不是由质量差异主导。

更糟的是,RL 阶段会主动去找 RM 的分布外区域——策略被优化去最大化 RM 分数,它会精准地找到 RM 没见过因而给了虚高分的那些生成模式。这就是过优化(第 14 章)。数据越 off-policy,RM 的可信区域越窄,过优化来得越早。

这一点在 RewardBench 2 (2025) 里被明确验证:用 on-policy 数据训练的奖励模型,比用 HuggingFace 上那些「从一堆流行模型的输出里聚合出来的」通用偏好集训练的模型,在真正关键的优化区域上稳健得多。作者本人是这篇论文的作者之一,这条经验也是他在 Tülu / OLMo 上反复吃过亏之后写进书里的。

这条约束真正的代价:排期

on-policy 听上去只是个数据来源问题,实际是项目管理问题。它意味着:

  • 你不能提前半年把偏好数据买好放在那儿等着用——等你的 SFT 模型换了一代,这批数据的 on-policy 性就折损了。
  • 数据采集的开始时间被钉死在你的 SFT checkpoint 就绪之后。而 SFT 又依赖预训练。整条链上任何一环延期,都会顺延到数据合同上。
  • 采集期间你必须持续维护一个可用的推理端点供采样(多轮数据甚至要求实时对话),这本身是一套要运维的服务。
  • 多阶段迭代成为必需:Claude 的早期版本和 Llama 2 的技术报告都展示了多轮 RLHF 阶段依次提升性能,Llama 2 更是明确分了 14 个批次采数据、每批之间重训模型再重新采样。这正是 on-policy 要求的自然结果——模型变了,数据就得跟着变。
注意:SFT 数据不受这条约束 人写的指令数据(SFT)完全不需要 on-policy,原因有两个:它直接作用在 base 模型上,「策略」这个概念还没建立起来;而且 SFT 的损失是普通交叉熵,不需要对比数据。所以采购 SFT 数据的节奏宽松得多——可以提前很久买、可以复用、可以跨模型搬运。时间压力完全来自偏好数据这一侧,这也是为什么本章第 7 节讲的合同流程听起来那么紧张。

今天人类数据的另外两个主要去向,一是写 prompt(prompt 决定了训练的话题分布,这件事仍然强烈依赖人),二是模型能力前沿上的高难度任务(专家域的标注和验证)。这两块同样不受 on-policy 排期的强约束。

人类反馈和 AI 反馈的配比:一个没人公开的数字

值得诚实地说明:今天最强的模型里,人类偏好数据和 AI 偏好数据各占多少,是外界完全不知道的。两者都被证明有价值,但具体配比、以及在哪些能力上用哪一种,属于各家最核心的工艺秘密。本书能给的判断只到这个层面:两条路都需要精细调过的管线才能把潜在收益榨出来,随便接一个数据源进来通常什么都得不到。

作者自己在 Tülu 3 里的做法,恰好是一个可公开检查的折中样本:偏好对不是买来的,而是用一条合成管线造的——从一个包含自家 SFT 模型在内的模型池采样候选回复(这就是它的 on-policy 成分),再用 GPT-4o 按 helpfulness / instruction-following / honesty / truthfulness 几个维度打分,取最高分作 chosen、随机取一个低分作 rejected。这套做法的谱系直接来自 UltraFeedback,第 4 节会再讲它的配对逻辑。

3. 界面就是测量仪器

偏好采集里最被低估的变量是界面。原文的措辞很谨慎:界面「更像艺术而不是科学」,因为「界面的细微改动如何影响用户与模型的交互」这件事几乎没有被系统研究过。但它的影响是确凿存在的——一个很直白的例子是速度:推理模型普及之后,回复得太快反而会让用户觉得模型不够聪明,哪怕用户显然更希望早点拿到答案。你测到的「偏好」里,混进了你没打算测的东西。

把界面当成物理实验里的测量仪器是个有用的框架:仪器有分辨率(尺度多少档)、有系统误差(位置偏置、长度偏置)、有采样窗口(用户在什么情境下打分)。换仪器就换数据,而你手上没有一把「真值尺」去校准它。下面五种界面基本覆盖了工业界的全部形态。

界面一:科研采集(Anthropic 早期 Claude)

Anthropic 早期偏好采集界面:左侧任务列表,中间对话,底部两个候选回复与偏好滑条
这是训练数据专用界面的典型形态:标注员先和模型完成一整段对话,然后在底部(紫色高亮处)在两个候选回复之间表态。注意界面在偏好之外还留了两类富元数据的入口——针对本轮的自由文本备注,以及对整段对话质量的总体评分(左上角显示这可能横跨多个任务)。工业界的科研采集界面基本都长这样:偏好只是收上来的东西里的一个字段,元数据往往是后续做数据筛选和归因分析的主要依据。

界面二:生产环境 A/B(ChatGPT)

ChatGPT 把两个 beta 模型的回复并排展示,让用户选一个更好的
模型进入产品之后,采集就直接搬到了真实使用场景里,逻辑和互联网产品对新功能做 A/B 测试一样——在一小部分线上流量上并排给出两个模型的回复。这张图值得盯着看的地方是:两个回复的内容几乎一样。这就是真实偏好数据的常态——大量样本的两边差异极小,标注员(或用户)被迫在噪声上做选择。这种数据是被拿去直接训模型还是只当评测,取决于具体产品的策略。

界面三:带平局的成对比较(Arena)

Chatbot Arena 早期界面:两个匿名模型并排,四个按钮包括平局
Chatbot Arena(现 Arena)把同一套界面用在了评测而非训练上,并且加了一个关键选项:平局(tie)。允不允许平局是一个会显著改变数据的设计决策——不允许,你会逼出大量在噪声上的随机选择;允许,你会损失一部分本来可以被区分开的弱信号,而且不同标注员对「差不多」的阈值差异很大。
Lambert 的观察:偏好评测本身成了一门生意 2026 年,Arena 在推出面向企业的 A/B 测试产品后约 8 个月内做到了约 1 亿美元的年化收入。这件事的信号意义超过了数字本身:当模型能力差距缩小到自动评测分辨不出来的时候,「组织人类做成对比较」这件事本身就变成了可售卖的基础设施。同一套采集机制,既是训练数据管线,也是评测服务。

界面四:单比特信号(Ai2 演示、几乎所有产品)

Ai2 研究演示里的点赞 / 点踩按钮
野外部署的模型最常见的反馈形态:对单条回复给一个赞或踩。它的优点是零摩擦、能规模化覆盖真实流量;缺点是信号极稀疏且严重有偏——绝大多数用户什么都不点,会去点的往往是特别满意或特别恼火的那一小撮。这种单向信号没法直接喂 Bradley-Terry 损失,需要 KTO 这类专门算法(见第 8 节)。

界面五:多选一(图像生成的默认形态)

Midjourney 一次生成四张图,用户点选其中一张放大
语言之外,同样的原理在图像生成里以更自然的方式存在:Midjourney 和多数图像模型每次生成会给出多个结果,用户点哪一张本身就是偏好标签,而且用户是为了自己的目的去点的,不是为了标注。这是偏好采集的理想形态——标注成本被藏进了产品交互里。文本产品很难做到这一点,因为并排读两段长文本的成本远高于扫一眼四张图。
注意:界面差异会污染跨源数据混合 上面五种界面产出的「偏好」不是同一种量。科研界面下标注员读完整段对话再表态;生产 A/B 下用户可能只扫了前两行;点赞按钮记录的是情绪;图像多选一混杂着美学和运气。把这些数据不加区分地拼进同一个训练集,你实际上是在拟合几种不同的测量过程的混合分布。工程上的最低要求是:给每条数据打上来源标签,训练时能分桶消融、能按来源调权重。这是很多团队事后才补上的元数据。

4. 评分还是排序:尺度怎么设

界面之后最大的设计决策是:让标注员给出排序(rankings)——多个回复的相对次序——还是评分(ratings)——给每段文本一个绝对分数。行业惯例是训练用排序,评分留作元数据和筛选依据。理解为什么,需要把两种数据的性质拆开看。

评分:绝对分数与多属性

最简单的评分是对单条回复打 1–5 分:

分值含义
5优秀:正确、清楚,而且明显有帮助
4良好:正确、清楚、可用
3及格:可以接受,但没什么亮点
2较差:部分正确,但令人困惑或不完整
1很差:错误或者没有帮助

评分的致命弱点是校准:「4 分」在不同标注员心里不是同一个东西,同一个标注员在周一和周五也不是同一个东西。绝对分数没有锚点,会随时间漂移(心理学上叫 anchoring / drift,正是第 10 章说的偏好不稳定性在标注场景的具体表现)。相对比较则天然免疫大部分校准问题——你不需要知道「好」的绝对刻度,只需要判断哪个更好。

但评分有排序给不了的东西:它能拆成多个维度。HelpSteer2 是这方面最完整的公开样本,它对每条回复在五个属性上各打一个 0–4 的 Likert 分:

属性测的是什么为什么单独拆出来
helpfulness(有用性)整体是否满足了用户诉求主目标
correctness(正确性)事实与推理是否正确和「有用」经常冲突:好读但错的回复
coherence(连贯性)行文是否自洽、有无自相矛盾纯语言质量,与内容正确性正交
complexity(复杂度)用词与概念的深度用来做反向控制:识别「显得高级但没信息量」
verbosity(冗长度)相对任务需求的长度用来诊断长度偏置(第 9 节)

后两个属性的存在很说明问题:它们不是「越高越好」的质量分,而是为了事后检测和抵消系统性偏置而专门收集的诊断量。这是评分作为元数据的正确用法——不是拿去当训练目标,而是拿去做数据审计和筛选。

有了评分,构造偏好对有一个最省事的办法:取分数最高的回复,随机配一个分数更低的回复。这是 UltraFeedback 及其一系列衍生数据集的标准做法,也是 Tülu 3 偏好管线的核心逻辑。

常见误区 「最高配随机一个更低的」听起来很粗糙,但随机这一步是刻意的:如果总是拿最高配最低,训练对的难度分布会集中在「非常容易区分」的一端,奖励模型学到的边界会很粗,在真正需要它判断的接近样本上毫无分辨力。随机取低分回复能让 margin 分布铺开。相反的误区也存在——只保留分差很小的困难对,会让标签噪声占比急剧上升(分差 1 分的两条回复,标注员自己都未必稳定)。margin 的分布是一个需要主动设计的超参数,不是数据自带的属性。

排序:Likert 尺度与它的档数

采集偏好最常见的技术是用 Likert 尺度记录相对排序——这个工具来自心理学家 Rensis Likert 1932 年的问卷方法(就是「非常同意…非常不同意」那个量表),被原封不动搬来做成对比较。注意一个容易混淆的点:Likert 排序也是用一个整数记录的,和评分长得一模一样;两者的本质区别在于这个整数指向的是什么——评分指向单条文本的绝对质量,Likert 排序指向两条文本的相对关系。

5 点尺度(带平局):

12345
$A \gg B$$A > B$平局$B > A$$B \gg A$

8 点尺度(无平局,早期 Claude 用的就是这个):

12345678
$A \ggg B$$A > B$$B > A$$B \ggg A$

两个设计变量:档数和有没有中点。偶数档没有中点,强制标注员表态;奇数档给了平局出口。HelpSteer3 用的是 $-3$ 到 $+3$ 的 7 点带零点尺度($-3$ = 回复 1 好得多,$0$ = 大致相当,$+3$ = 回复 2 好得多)。

关键事实:细粒度尺度最后几乎都被压成 1 个 bit Anthropic 用 8 点尺度采集,训练奖励模型时还是把它降成了二元信号。这几乎是行业通例,原因很直接:第 5 章的 Bradley-Terry 损失 $$\mathcal{L} = -\log \sigma\big(r_\theta(x, y_w) - r_\theta(x, y_l)\big)$$ 的输入只有「谁赢了」,它没有位置容纳「赢多少」。

那为什么还要采 8 档?因为那些额外的档位在训练之外有用:(1) 过滤——把「几乎平局」的样本直接扔掉,能显著降低标签噪声;(2) 加权——按 margin 给样本不同权重(有 margin-aware 的 RM 损失变体);(3) 质控——同一条样本上两个标注员一个填 1 一个填 8,是明确的红旗,比「一个选 A 一个选 B」信息量大得多。采集时多要几档几乎不增加成本,扔掉信息是不可逆的。

一个 prompt 排 $K$ 个回复:InstructGPT 的做法

成对比较不是唯一形态。InstructGPT 让标注员一次对同一个 prompt 的 $K$ 个回复做整体排序,$K$ 在 4 到 9 之间,一次任务因此产出 $\binom{K}{2}$ 个成对比较——$K=9$ 时是 36 对。这在标注经济性上非常划算:标注员读一遍 prompt 的固定成本被摊到了 36 个标签上。

推导:为什么这 $\binom{K}{2}$ 对必须放在同一个 batch 里 每个回复 $y_i$ 在这 $\binom{K}{2}$ 对里出现了 $K-1$ 次。如果把它们打散到不同 batch,同一段文本会在一个 epoch 里被前向 $K-1$ 次、每次都产生一个梯度,模型会过拟合到这些重复文本上。

InstructGPT 的解法是把一个 prompt 的全部 $\binom{K}{2}$ 对当作一个训练样本放进同一次前向:每个 $y_i$ 只前向一次得到 $r_\theta(x,y_i)$,然后用这 $K$ 个标量拼出全部对的损失 $$\mathcal{L} = -\frac{1}{\binom{K}{2}}\ \E_{(i,j)\sim \text{pairs}}\Big[\log\sigma\big(r_\theta(x,y_i)-r_\theta(x,y_j)\big)\Big]$$ 既省了 $(K-1)$ 倍的前向计算,又消除了过拟合。这是「数据的组织方式直接决定训练代码怎么写」的典型例子——如果你的 RM 训练脚本只接受扁平的 (chosen, rejected) 二元组,你就享受不到这个便宜。

5. 标注协议:说明书才是真正的目标函数

合同签完之后,甲乙双方要就每一类任务商定标注说明书(labeler instructions)。这是一份「有大量细节、边角情形和优先级排序」的文档,通常几十页,而且几乎从不流出实验室。

它值得被严肃对待的原因是:说明书就是 RLHF 实际优化的那个目标函数。我们在第 5 章写下 Bradley-Terry 损失、在第 6 章写下策略梯度,那些公式里的 $r(x,y)$ 最终由标注员的判断定义,而标注员的判断由这份文档塑造。你在 YAML 里调的所有超参数,加起来对模型行为的影响都不如说明书里改一句「当有用性和无害性冲突时优先哪个」。

唯一一份公开的样本:InstructGPT

目前公开世界里最著名的一份是 OpenAI 发布的 InstructGPT 标注说明书(原始链接后来被删除,作者把它恢复并镜像在了 rlhfbook.com 上)。从这份文档和论文附录能看到一份成熟说明书的结构:

组成部分InstructGPT 的具体做法
价值维度定义有用(helpful)、真实(truthful)、无害(harmless)三条主轴,每条都有正例反例
冲突时的优先级训练数据采集时优先「对用户有用」;最终评测时要求标注员优先「真实与无害」。同一批人、同一个界面,只因为说明书里这一句话不同,产出的数据就完全不同
主标签对 $K$(4–9)个回复做整体排序,允许并列
总体质量分1–7 的 Likert 分,作为元数据
结构化元数据(勾选框)是否未遵循指令、是否不适合客服场景、是否有幻觉、是否满足指令中的约束、是否含色情内容、是否含暴力内容、是否鼓励暴力/虐待/恐怖主义/自残、是否贬损受保护群体、是否给出有害建议、是否表达观点、是否作道德评判
实践建议:元数据比偏好标签本身更耐用 上面那一长串勾选框看起来是安全合规的负担,实际是数据资产里寿命最长的部分。偏好标签绑死在具体的模型 checkpoint 上(on-policy),换代就贬值;但「这条回复有幻觉 / 没遵循约束 / 表达了观点」这些判断是关于文本本身的绝对属性,可以跨模型复用,可以事后拿来切片分析(「我们的 RM 在有幻觉的样本上准确率是多少?」),还可以直接拿来训分类器做数据过滤。采集时多问几个勾选框的边际成本很低,事后补是不可能的。

说明书里必须写清楚的几件事

综合公开材料和本章的实践视角,一份能用的偏好标注说明书至少要覆盖:

  • 价值优先级的显式排序,而不是并列罗列。真实标注中冲突极其频繁(比如用户要求一个有风险的操作步骤,详尽回答更「有用」但更不「无害」),不预先裁定,标注员就会各按各的价值观裁,标签方差直接爆炸。
  • 什么不该影响判断。明确写出「不要因为回复更长就给更高分」「不要因为用了列表和加粗就给更高分」「不要因为它同意了用户的观点就给更高分」。这些是第 9 节要讲的系统性偏置,说明书是第一道也是最便宜的一道防线。
  • 平局的判定阈值。什么程度算「差不多」,必须给具体例子,否则不同标注员的平局率能差好几倍。
  • 不可判定情形的出口。两个回复都完全跑题、prompt 本身有歧义、需要专业知识而标注员不具备——都要有专门的标记选项,而不是逼他随便选一个。逼出来的选择是纯噪声,比丢掉这条数据更有害。
  • 大量边角案例的正例反例。说明书的有效长度基本由这部分决定,抽象原则谁都会写,能对齐标注员的是具体案例。

多轮对话数据怎么收

多轮(multi-turn)——也就是有多个相关 prompt 的连续对话——是实践里反复出问题的地方。核心约定有三条:

1. 在哪一轮收偏好。真实交互里通常只在最后一轮收一次偏好;但也可以每一轮都收,此时对话按被选中的那个回复继续往下走。

2. 训练时怎么展开。常见做法是把对话的每一轮都当成一个独立的「单 prompt」样本,模型在每个位置上都学一次补全。这会把一段长对话展开成很多条训练 prompt——听起来是白赚的数据,但必须小心:一段 10 轮的对话展开成 10 条样本,会让这段对话的话题、这个用户的风格在训练集里的权重放大 10 倍,直接扭曲训练分布。长对话多的数据源尤其危险。

3. 损失掩码。和指令微调(第 4 章)一样,所有历史轮次都要从损失里掩掉,只在当前这条 assistant 回复上算 loss。DPO 类算法同理——$\pi_\theta$ 和 $\pi_{\text{ref}}$ 的 logprob 都只在被比较的那段回复的 token 上累加。

一个尚未解决的设计问题:写 prompt 的人能不能同时标偏好? 这是 John Schulman 提出的问题:如果写 prompt 的人和标偏好的人是同一个,模型会被推向谄媚(sycophancy)——因为这个人在评判「模型有多好地满足了我」,而回复里那些迎合他立场、夸他问得好的部分会系统性地拿到高分。分开这两个角色能缓解这个问题。

但分开有一个硬代价:多轮基本就做不成了。多轮要求对话实时地继续下去,写 prompt 的人必须在场;如果他不能给标签,你就得让两个人同步在线,运营成本陡增(还要维持模型端点一直可用)。所以现实中,prompt 的采集和回复的比较经常被拆成两个完全独立的项目——这也是为什么「写 prompt」如今本身就是一门单独采购的人类数据生意。

6. 招募、培训与质量控制

说明书写好了,接下来的问题是:谁来标,怎么保证他们标得对。这一节的所有数字都来自可查的公开来源——InstructGPT 论文、Anthropic 的 HH 论文、HelpSteer 系列的数据卡——因为这是公开世界里仅有的几个把协议写下来的样本。

招募与筛选

项目规模与筛选方式
InstructGPT(2022)通过 Upwork 和 Scale AI 雇了约 40 名承包标注员。筛选用一套专门的测试,考察两件事:对不同人群偏好的敏感度、识别潜在有害输出的能力;另外还看候选人在一项有详细说明书的标注任务上与研究员的一致率
HelpSteer2(2024)通过 Scale AI 组织了约 1000 名美国本土标注员。入选要过英语能力测试,再做一套 35 条样本的培训评估

两个数量级差别很大的样本,筛选逻辑却一致:先测语言与判断的基本能力,再测「你标的和我们标的像不像」。后者尤其关键——它等价于让候选人在一个已知答案的小集合上考试。这就引出了质控的第一件工具。

工具一:黄金集(gold set)

黄金集是一小批由你自己团队(而不是外包方)反复讨论后定标的样本,通常几十到几百条,用法有三个:

  1. 准入考试:新标注员先做黄金集,与团队标签一致率低于阈值的不予录用。
  2. 持续混入:把黄金题按一定比例(常见 2%–5%)混进日常任务流里,标注员分不出哪些是考题。这样你能得到每个标注员随时间变化的准确率曲线,发现能力退化、疲劳、或者干脆开始乱点的人。
  3. 校准说明书:如果一批新标注员在某类黄金题上集体出错,问题往往不在他们,在你的说明书没把这类情况写清楚。黄金集的第三个用途是把说明书的漏洞逼出来。
实践建议 黄金集必须由最终要用这批数据的那个团队亲自标,而且要在采集开始之前标完。让外包方自己造黄金集,等于让考生自己出题;等数据交付了再回头补黄金集,你会不自觉地按已经收到的数据的样子去定标。

另外,黄金集要随着模型迭代重做。你的模型变强之后,老黄金集里那些「一眼分得出好坏」的题会全部饱和,失去分辨力——和评测集饱和是同一个问题。

工具二:标注者间一致性(Inter-Annotator Agreement, IAA)

IAA 衡量的是「不同的人在同一条样本上给出相同标签的比例」。这是偏好数据里最应该被盯住的一个数字,因为它给出了整条链路的信息论上限。公开的实际水平:

来源一致率说明
InstructGPT,训练标注员之间72.6% ± 1.5%有详细说明书、经过筛选培训的专业标注员
InstructGPT,留出标注员之间77.3% ± 1.3%没参与训练数据采集的另一组人,一致率反而更高
Anthropic HH,研究员 vs 众包工约 63%论文原话是「平均一致率很差」——这是众包场景的现实水平
核心结论:IAA 是奖励模型准确率的天花板 如果两个同样合格的人在同一条数据上只有 $p=0.726$ 的概率给出相同标签,那么没有任何模型能在这个分布上稳定超过大约 $p$ 的准确率——超过的部分只可能是拟合了某一批特定标注员的癖好,而不是「真实偏好」。

这解释了几件长期困惑从业者的事:
· 为什么奖励模型的验证准确率普遍卡在 65%–75%,怎么加参数都上不去——它已经贴着标签噪声的地板了,剩下的 25%–35% 里绝大部分是不可约的噪声。
· 为什么 RM 准确率提升往往不转化为下游策略质量提升——这就是讲座里说的「代理的代理」:RM 准确率是对 RM 质量的代理,RM 又是对人类偏好的代理,两层代理各自有失配(objective mismatch)。
· 为什么「把 RM 准确率从 72% 刷到 74%」这种论文结论要谨慎看待——这个量级完全可能落在标注噪声的波动里。

顺带说,IAA 的严格测法不该只用「原始一致率」,因为二选一任务里随便乱选也有 50% 的一致率。标准做法是用 Cohen's $\kappa$ 或 Krippendorff's $\alpha$ 扣掉偶然一致的部分:

$$ \kappa = \frac{p_o - p_e}{1 - p_e} $$

其中 $p_o$ 是观测到的一致率,$p_e$ 是在两人各自的边缘分布下随机一致的期望比例。把 $p_o = 0.726$、$p_e \approx 0.5$ 代进去,$\kappa \approx 0.45$——在社会科学的惯例里这叫「中等一致(moderate)」,离「良好」还有距离。这就是我们训模型所依据的信号的真实成色,值得记住。

工具三:多人标注与聚合

既然单个标注员的信号这么噪,最直接的补救是让多个人标同一条,然后聚合。HelpSteer 系列的协议是公开材料里最细的一份,可以直接当模板用:

  • 每条样本至少 3 名标注员独立标注。
  • 触发式增派:HelpSteer2 的规则是,如果初始几名标注员在 helpfulness 上的分差超过 2 分(0–4 的尺度上),就再追加最多 5 名标注员。
  • 取最一致的 3 个:最终分数用「彼此最接近的 3 个标注的均值,四舍五入到整数」。HelpSteer2 平均每条样本用掉 3.41 名标注员;HelpSteer3 同样是最少 3 名、最多 5 名,且只把一致性最强的那 3 份标注放出来,以压掉离群标注的影响。
  • 交付后再筛一道:HelpSteer2 在标注完成后还做了「至少两轮人工复核加自动检查」,最终从初始采集量里只保留了 20,324 条。

这套设计的经济学值得注意:它把标注预算按难度动态分配——容易的样本 3 个人就够了,只在标注员意见分歧的地方追加人力。均摊下来只比固定 3 人贵 14%,但把最脏的那一批样本的噪声压了下去。这比「所有样本一律 5 人」划算得多。

分歧是噪声还是信号? 上面的所有做法都默认分歧是噪声——聚合、取最一致的 3 个、扔掉离群值,都是在把分歧抹平。但原书在开放问题里明确质疑了这个默认值:分歧也可能是真实的偏好多样性。「哪种语气更得体」「这个笑话好不好笑」上的人群分歧不是错误,是事实。把它平均掉,你训出的是一个「谁都不得罪的平均人」模型。

这里没有标准答案,但有一个可操作的折中:把一致率作为一个字段保存下来,让下游自己决定怎么用——比如在客观性强的域(数学、代码)把低一致样本当噪声扔掉,在主观域把它们单独保留、甚至用来训练能表达不确定性的奖励模型。这需要在采集时就想清楚,事后无法补救。

7. 采购、合同与成本:一份 50 万美元合同的六周

这一节是全书最不像技术书的一节,也是最难在别处读到的一节。作者的开场白定了调:把人类数据做好,意味着模型的反复迭代训练、几十万到几百万美元的开销、极其详尽的数据说明书、通过数据代工厂(data foundry)转译你的意图,或者自己雇一支规模可观的标注队伍。「这不是一件可以掉以轻心的事。」

第一步:拿到供应商

作者的类比非常直白:拿到数据供应商和拿到前沿 Nvidia GPU 一样,是个「看你认识谁」的游戏,因为供给侧是受限的。几条现实规律:

  • 如果你在 AI 生态里有声望,好的数据公司会主动想把你放进客户名单——为了公关形象和长期增长期权。头几批数据常常还给折扣,把训练团队先钩住。
  • 如果你是新入场者,你会发现很难及时拿到想要的数据。供应商优先服务大额预算和有品牌影响力/未来收入潜力的新客户。从生意角度这完全自然:数据代工厂在「把人组织起来有效标注」这件事上本身就是产能受限的。
  • 作者点名了一类反复出现的糟糕模式:数据公司没有按合同交付,直到客户威胁采取法律或财务行动;还有公司为了公关把从没合作过的机构列为客户,被戳穿后表示「不知道怎么会这样」。
  • 合同细则里的坑:默认条款常常在小字里禁止你把采购来的产物开源。如果你的目标是发布开放模型和开放数据,这一条必须在签字前改掉。

第二步:排期是稀缺资源

说明书商定之后,能不能按你想要的时间标,取决于领域。数学推理、代码这类高需求领域必须提前几周锁定档期。作者给了一个很传神的比喻:Scale AI 这类公司像 AI 实验室管理集群上的算力任务一样管理他们的劳动力——提前数周到数月规划哪批人在什么时间投给谁。所以「我们晚点再收数据可能更好」这种念头往往行不通,档期一放就没了。

第三步:交付曲线,以及要扔掉的那部分

六周交付的偏好数据批次柱状图:2000、5000、10000、20000、30000、30000 条
一份典型的偏好数据合同(图注给的量级是约 50 万美元)的分批交付曲线。横轴是周,纵轴是当周交付的标注条数:第 1 周 2,000 条,第 2 周 5,000,第 3 周 10,000,第 4 周 20,000,第 5、6 周各 30,000,合计约 9.7 万条。前面这段爬坡期不是产能不够,而是刻意的——它给双方留出收窄目标和方法的时间。预期中,早期批次会有相当大比例因为质量问题被丢弃。
算一笔账 把图里的两个数字放在一起:约 50 万美元 ÷ 约 9.7 万条 ≈ 每条比较 5 美元。这是通用域偏好数据在这个规模下的量级参考。往两边推:

· 专家域再贵一个数量级。代码、数学、法律、金融、医疗的标注要求标注员本身具备专业能力,单价上到几十美元一条并不稀奇。作者在课程问答里提到,数据标注行业正在发生的大迁移就是从低技能的「体力活」转向法律、金融、医疗、咨询这些专家领域——这恰恰解决了数据公司过去的同质化困境。
· 把前两周算进沉没成本。第 1、2 周交付 7,000 条,占总量 7%,但按上面的说法这部分大概率要扔。真实的「可用数据单价」比 5 美元更高。
· 反过来估预算:想要 1 万条可用的通用域偏好数据,先按 6–8 万美元准备,再加上你自己团队做黄金集、写说明书、每周复核的人力——后者经常和数据费本身同一量级。

关于时间线,作者的描述值得逐条记住:

  • 数据按周分批交付,一份典型的偏好数据合同跨度约 6 周。
  • 前面几周用于进一步校准,后面几周才是团队真正指望模型提升的部分。目标是到第 4 或第 5 周,数据要能看得见地在改善模型。
  • Llama 2 报告里的 14 个批次数据采集是这套模式做到极致的公开样本——每批数据训完模型再采下一批,正是第 2 节 on-policy 要求的必然结果。
  • 但它经常不顺利。作者描述的典型翻车场景:一个第一次做人类偏好的团队,RLHF 的准备度不够,评测上迟迟看不到有意义的提升;最后几周到了,他们只能硬着头皮继续用自己都不信任的端点去生成回复、继续收数据。
采集开始那一刻,你的整条流水线必须已经就绪 原文对这一点的措辞很重:正式采集期是后训练团队高风险的一段时间——「所有的训练基础设施、评测工具、以及如何使用数据和据此做下游决策的计划都必须已经到位」。

理由是反馈回路:数据合作方想在采集过程中改进采集质量,前提是你能快速告诉他们这批数据好不好。如果数据不能顺畅地插进你已有的 RLHF 管线,你就给不出这个反馈,那这六周就退化成了一次盲发。「无法无缝接入训练管线的数据,通常会变质,变成资源的浪费。」

Lambert 的判断:自建、采购,还是合成

Lambert 的判断 作者的立场散布在原文和讲座里,合起来非常明确:

1. 没有跑通的后训练配方,就不要买人类偏好数据。讲座里的原话是:「即便是简单的人类偏好数据,你也需要一套稳健的、已经存在的后训练配方去接住它。」买数据是放大器,不是启动器。

2. 承认浪费是这门生意的成本。「很可能有数百万美元花在这些数据集上被『浪费』掉、没有进入最终模型,但这就是做这门生意的代价。」「没有多少组织有带宽和专业能力去充分利用这种形式的人类数据。」

3. 所以新团队的正确起手式是绕开它。原文说得很直白:正因为这些原因,许多新接手 RLHF 的团队和项目直接跳过人类数据,改用 AI 反馈数据、现成的奖励模型,或者其他手段来规避从零策划数据。这不是妥协,是符合成本结构的正确决策。

4. 他自己的做法可以直接抄。在 HuggingFace H4 团队时,他们像大厂一样委托采购了 No Robots——1 万条专家人写的示范数据,对齐 InstructGPT 的分布,而且罕见地把委托采购来的数据开源了(这正是前面「合同小字禁止开源」那条的反例,说明它是可以谈的)。注意这是示范数据(SFT)不是偏好数据:人类数据的钱花在写答案和写 prompt 上,性价比常常高于花在比较上;比较那一环更容易被 AI 反馈替代。在 Tülu 3 和 OLMo 上,偏好对基本全部来自合成管线。

8. 结构化偏好数据:让标签变成免费的

前面七节讲的是「怎么花几十万美元买判断」。这一节讲的是它的对立面:在有结构的领域里,偏好对可以自动构造,标签成本为零。作者明确指出,学术研究之外,基于这类归纳偏置构造的偏好数据,应用比基于质量判断的偏好数据要广得多——而本章前面主要讲的恰恰是后者。

模式一:正确性即偏好

数学推理是最干净的例子:正确的解法作 chosen,错误的解法作 rejected。你需要的只是一个答案检查器。同理适用于能跑单元测试的代码、能被解析器验证的结构化输出、能被规则检查的格式约束。

模式二:约束满足即偏好

更巧妙的是 IFEval 那一类可验证的指令跟随。IFEval 的 prompt 形如:

Prompt:给我写一首关于金鱼的短诗。每一句都要以字母 g 开头。

后半句叫约束(constraint)。构造偏好对的技巧是:对同一个模型问两次——一次带约束,一次不带约束。带约束采出来的那条满足约束,作 chosen;不带约束采出来的那条不满足,作 rejected。约束能被几行代码验证,所以标签是免费的。

用 GPT-4.5-Preview 实际跑的结果(原文示例):

chosen(带约束采样,✓ 每句以 g 开头)rejected(不带约束采样,✗)
Golden swimmer, circling slow, / Gleaming scales in water's glow. / Gentle fins dance softly by, / Gazing out with quiet eye. / Glass-bound world, a simple sphere, / Gliding calmly, free of fear. / Graceful turns in endless roam, / Goldfish finds a crystal home. In circles bright, the goldfish glides, / A spark of sun that gently rides / Through waters clear, in endless spins— / A golden whisper, scales like fins. …
最容易踩的一个坑 存进数据集的 prompt 必须是带约束的那一个。两条回复的采样 prompt 不同(一个带约束一个不带),但训练时它们必须共享同一个 prompt,也就是完整的带约束版本。

如果搞反了——用不带约束的 prompt 存这一对——你教给模型的就变成了「在没有任何要求的情况下,句首押 g 的诗更好」,这是纯粹的风格噪声。这个错误在数据管线里非常隐蔽,因为数据集看起来完全正常,只有模型行为会莫名其妙地漂。

顺带注意原文的一个附带观察:不带约束的那首诗顺便也写得更差。这说明这类结构化对里往往还夹带了质量差异,标签的「纯度」没有想象中高——它测的是「约束满足」,但模型可能顺带学到别的东西。

这类数据的实际效果在 Tülu 3 里被验证过:结构化偏好对能在指令跟随、数学等相关评测上带来有意义的性能提升。在这些窄域里,它的效果甚至能超过靠质量判断标出来的偏好数据。而由于它本质上是「让模型自己生成两边」,它属于合成偏好数据,方法学的完整讨论在第 12 章。

怎么判断你的问题适不适合结构化偏好 问一个问题:存不存在一个能被代码判定、且和你真正关心的质量强相关的性质?
· 存在,且判定便宜 → 用结构化偏好,把人类预算省下来。
· 存在,但只覆盖质量的一小部分(比如「有没有编译通过」之于代码质量)→ 用它做粗筛,把通过筛选的候选再送去人类或 AI 判断。这是性价比最高的组合。
· 不存在(诗好不好、语气得不得体、解释清不清楚)→ 只能回到判断,人类或 LLM-as-a-judge 二选一。

实践里的正确顺序是先把能自动化的部分榨干,再把人类预算集中投在剩下的部分。反过来做——先买一大批通用偏好数据,再发现里面一半问题其实可以用检查器解决——是很常见也很昂贵的错误。

成对比较之外的反馈形态

成对比较是惯例,不是定律。原文列出的几条替代路线,都用「更复杂的采集」换「更丰富的学习信号」:

反馈形态数据长什么样配套算法取舍
单向 / 单比特对单条回复的赞或踩,没有配对KTO(Kahneman-Tversky Optimization)采集成本几乎为零,能直接吃产品里的点赞数据;但信号稀疏且严重有偏
细粒度 / token 级标出回复中具体哪几段好或坏Fine-Grained RLHF信用分配精确得多(不用让模型自己猜是哪句话拉低了分),但标注成本成倍上升
自然语言反馈标注员写一段批评而不是打标签Learning from Natural Language Feedback信息量最大,且天然可用于「批评—修订」式的数据合成(Constitutional AI 的骨架);但最难规模化、最难保证一致性

作者对这几条路的判断是克制的:它们在实践中都没有被大规模采用。原因不难理解——成对比较占据了「采集成本」与「信号可用性」之间的那个甜点,而且它下游接着一整套成熟的 Bradley-Terry / DPO 工具链。任何替代形态都要同时重做采集界面、标注协议和训练算法,迁移成本极高。KTO 是其中最实用的一个,因为它对接的正是产品里本来就在收集的那个赞/踩按钮,采集侧不需要任何新投入。

9. 偏置:数据里的系统性错误怎么变成模型人格

偏好数据出错的方式有两种。随机噪声——标注员疲劳、手滑、看走眼——在数据量够大时会被平均掉,第 6 节的多人聚合就是在对付它。真正危险的是系统性偏置:所有标注员在同一个方向上一致地偏,它不会被平均掉,只会被放大,然后一路穿过奖励模型、穿过 RL 优化,变成模型的性格。

原文对这件事的判断很重:这些偏置「常见到可以轻易传递给最终模型」,而且「在数据中缓解这些微妙偏置,是好偏好数据与优秀偏好数据的分界,因而也是好 RLHF 训练与优秀 RLHF 训练的分界」。

偏置表现成因可检测 / 可缓解性
前缀偏置(prefix bias)回复的开头几句不成比例地决定了整条的偏好判断标注员读到一半就形成判断;注意力资源有限较难。可通过打乱 / 截断做对照实验诊断
谄媚(sycophancy)过度同意用户已表明的立场、恭维用户,即便因此牺牲真实性人性本身——标注员就是喜欢被认同的回复最难。它反映的是人类内部的问题,通常压根不在你会想到写进说明书的标注准则里
冗长偏置(verbosity)更长的回复系统性地得分更高长 ≈ 信息多 ≈ 用心,是廉价的质量代理容易检测:算 chosen 与 rejected 的长度差分布即可。可缓解:长度惩罚、按长度分层采样
格式偏置(formatting)用了列表、加粗、emoji 的回复显得「更好」视觉结构降低阅读成本容易检测:统计 markdown 标记的出现频率与胜率的相关性
奉承与废话(flattery / fluff / fog)装饰性语言、模糊的宏大表述抬高评分听起来像专业写作中等。有专门的诊断基准可用
直觉:为什么冗长和谄媚的难度不在一个量级 冗长偏置有一个可测量的抓手:长度是个数字。你可以画 chosen/rejected 的长度差直方图,可以在 RM 上做长度消融,可以直接在损失里加惩罚项。整条链上每一步都能量化。

谄媚没有这个抓手。「同意用户的程度」不是一个能从字符串里直接算出来的量,而且它和「真诚地认为用户是对的」在文本层面无法区分。更根本的是——标注员不认为自己在犯错。他真心觉得那条更认同他的回复更好。你写在说明书里的「不要因为它同意你就给高分」,对抗的是人在读到认同时的即时情绪反应,效力有限。

这就是原文说的:这类偏置「反映的是人类自身的问题,往往在你会想到提供给标注方或标注员的标注准则之外」。工程上的部分对策:在采集侧刻意构造用户明确表达了错误立场的 prompt,强制标注员在「附和」与「纠正」之间表态,并把说明书里的裁定写死。这至少能让谄媚在数据里可测。

它们和过优化是同一件事的两个阶段

这些偏置在数据阶段只是一点点统计倾斜——比如 chosen 平均比 rejected 长 12%。但 RL 阶段会主动去搜索奖励模型的最大值,任何一点系统性倾斜都会被放大成极端行为:长度偏好被放大成「什么问题都回三千字」,格式偏好被放大成「所有回答都是嵌套五层的 markdown 列表」,谄媚被放大成「用户说什么都对」。这是第 14 章过优化(over-optimization)的直接来源——过优化不是 RL 算法的毛病,是数据里的偏置被优化器忠实执行的结果。

没被回答的那些问题

原书最后列了一组开放问题。它们不是修辞,是这个领域真实的空白,而且每一个都有可做的研究:

  • 采集情境:在职业场景下产生的偏好,能反映研究者设计实验时的本意吗?能迁移到下游真实用户吗?和志愿者标注比如何?反复标注同一类数据会不会改变一个人自己的偏好?被要求遵循一套偏好准则的职业众包工,实际遵循的是准则还是他们自己的价值观?
  • 反馈类型:成对比较这个默认设定,真的以其本来的形态捕捉到偏好了吗?什么样的比较结构才更接近人类实际交流偏好的方式?
  • 人群构成:谁在标?多样性维持住了吗?多样性不足会以什么可测量的方式表现在模型上?代表一个群体最少需要多少人?分歧算噪声还是算信号(第 6 节)?
  • 模型里真的表达出那些偏好了吗?——这是最尖锐的一条。RLHF 的动机(对齐到抽象的人类偏好)已经和它的实际用途(让模型对用户更好用)漂移开了。而由于工业界的 RLHF 是封闭的,「模型行为是否符合当初给标注员的规范」这个检查从来没有被外部做过。我们手上的审计工具很少,OpenAI 的 Model Spec 是一个——它写明了他们希望模型怎么做——但从规范到数据采集的这一段翻译,外界完全看不见。
规范 → 数据 → 行为,这条链没有闭环 把这一节和第 5 节连起来看:说明书是目标函数,模型行为是优化结果,但从来没有人系统地验证过两者是否一致。你写「优先真实性」,标注员在读到一条流畅的错误回复时是否真的扣分?你写「不要因为长就给高分」,长度偏置是否真的下降了?

这是每个做偏好数据的团队可以在自己内部闭上的一个环,而且成本不高:拿说明书里的每一条准则,各造几十条针对性的探针 prompt,在数据采集前后各测一遍模型。这既是数据质量的验收指标,也是本章所有工程建议里最容易被跳过、回报却最高的一项。

本章小结

速查表:数字都在这里

量典型值出处
标注者间一致率(专业标注员)72.6% ± 1.5%(留出组 77.3%)InstructGPT
标注者间一致率(研究员 vs 众包)约 63%Anthropic HH
换算成 Cohen's $\kappa$约 0.45(「中等一致」)由上式推算
每条比较的成本(通用域)约 5 美元50 万美元 ÷ 9.7 万条
典型合同规模 / 周期约 50 万美元 / 6 周,分周交付原书图示
周交付量曲线2K → 5K → 10K → 20K → 30K → 30K同上
数据开始改善模型的时间点第 4–5 周原书
标注员规模40 人(InstructGPT)~ 1000 人(HelpSteer2)论文 / 数据卡
每条样本的标注人数最少 3,分歧时追加至 5~8,实测均值 3.41HelpSteer2/3
训一个 SOTA 开源 RM 需要多少对约 1 万条高质量对即可HelpSteer2
frontier lab 的量级百万级、14 个批次Llama 2
一次排序任务的规模$K = 4 \sim 9$ 个回复 → $\binom{K}{2}$ 对,同 batchInstructGPT

要点清单

  • 判别 > 生成是偏好数据的全部经济性来源。chosen 只是相对更好,不是正确答案;两个都错的对也有训练价值。
  • on-policy 在这里是软定义(同一代模型),但它把数据采集钉死在训练排期上,是这条流水线最硬的项目管理约束。SFT 数据和 prompt 采集不受此约束。
  • 界面是测量仪器:科研界面、生产 A/B、带平局的 Arena、单比特赞踩、多选一,五种界面产出的不是同一种量。务必给每条数据打来源标签。
  • 细粒度尺度采集、二值化训练:Bradley-Terry 损失容纳不了「赢多少」,但多出来的档位在过滤、加权、质控上有用。采集时多要几档几乎不花钱,扔掉信息不可逆。
  • 说明书才是真正的目标函数。价值优先级、什么不该影响判断、平局阈值、不可判定情形的出口、大量边角案例——缺一不可。元数据(幻觉、约束满足、是否表达观点)比偏好标签本身寿命更长。
  • 质控三件套:黄金集(自己标、混入日常流、随模型迭代重做)、IAA(它是 RM 准确率的天花板,解释了为什么 RM 卡在 65%–75%)、多人聚合(按分歧动态增派人力最划算)。
  • 成本结构:约 5 美元一条,前两周的数据基本要扔,采集开始前整条 RLHF 管线必须就绪,否则六周变成一次盲发。
  • 能自动化就别买:正确性、约束满足这类可代码验证的性质能直接生成免费偏好对,效果在窄域甚至更好。先把能自动化的榨干,再把人类预算集中在剩下的判断上。
  • 系统性偏置不会被平均掉:冗长和格式偏置可测可缓解,谄媚和前缀偏置极难。它们在 RL 阶段被放大成过优化。
  • Lambert 的判断:新团队先跳过人类偏好数据,用 AI 反馈 + 结构化偏好 + 现成 RM 把管线跑通;人类预算优先花在写 prompt 和写示范答案上,比较那一环最容易被 AI 替代。

动手实验

本章没有配套代码作业——因为它讲的是流程而不是算法。但下面三个实验都能在半天内做完,而且会把这一章的抽象结论变成你自己手上的数字。

实验一:亲手标 100 条,量一次自己的一致率

从任意公开偏好数据集(如 HuggingFaceH4/ultrafeedback_binarized、nvidia/HelpSteer3)取 100 条,把原始标签遮住,自己标一遍,再隔一天重标同样的 100 条。

  • 你与原标签的一致率——大概率落在 60%–75% 区间,这就是第 6 节那张表的现场复现。
  • 你与自己的一致率(intra-annotator agreement)——这个数往往低得令人不安,是「偏好会漂移」最直观的证据。
  • 标的过程中记录你平均花了多少秒、有多少条你其实读了不到一半就决定了。后者就是前缀偏置。

实验二:在现成数据集上测两个偏置

拿同一个数据集,跑两行统计:

import numpy as np
from datasets import load_dataset

ds = load_dataset("HuggingFaceH4/ultrafeedback_binarized", split="train_prefs")

def text(msgs):        # 取最后一条 assistant 消息
    return msgs[-1]["content"]

lc = np.array([len(text(x)) for x in ds["chosen"]])
lr = np.array([len(text(x)) for x in ds["rejected"]])
print("chosen 更长的比例:", (lc > lr).mean())          # 长度偏置
print("平均长度差 (chosen - rejected):", (lc - lr).mean())

md = lambda s: ("- " in s) or ("* " in s) or ("**" in s)
mc = np.array([md(text(x)) for x in ds["chosen"]])
mr = np.array([md(text(x)) for x in ds["rejected"]])
print("chosen 含 markdown 的比例:", mc.mean(), " rejected:", mr.mean())  # 格式偏置

「chosen 更长」的比例如果显著高于 50%,你的 RM 就会把「长」当成质量信号的一部分。把这个数字记下来,训完 RM 之后再验一次:构造一批「同一条回复的长版与短版」,看 RM 是不是无脑偏向长的。这是奖励模型验收里最便宜也最有效的一项检查。

实验三:造一批零成本的结构化偏好对

按第 8 节的配方,用任意一个能调的模型,对同一批 prompt 各采两次——一次带可验证约束(全小写、每句以某字母开头、恰好 N 句、只用 JSON 输出),一次不带——用几行代码验证约束,构造 chosen/rejected。

  • 检查你的 prompt 列存的是带约束的版本(这是最容易搞反的一步)。
  • 统计「带约束采样但仍未满足约束」的比例——这些对必须丢掉,否则标签是错的。这个比例本身就是模型指令跟随能力的一个评测。
  • 把这批数据接进 homework/hw4-dpo 的 DPO 流程,在 IFEval 风格的留出 prompt 上看提升。这是本章唯一能直接看到模型变化的实验。

延伸阅读

把采集方法写下来的少数样本

偏好数据的性质与偏置

成对比较之外

把它放进完整配方里看

  • Tülu 3 (2024) — 作者本人主导的开源后训练配方,偏好数据那一节展示了「不买人类数据也能做到什么水平」。
  • Llama 2 (2023) — 14 个批次、百万级比较、多阶段 RLHF 的公开样本,本章 on-policy 论述的最佳注脚。
  • No Robots (2023) — 委托采购却公开发布的 1 万条人写示范数据,人类数据合同能谈成什么样的一个存在证明。
  • Chatbot Arena (2024) — 把成对比较做成公共基础设施,也是今天「偏好评测即生意」的起点。
  • OpenAI Model Spec (2024) — 目前唯一公开的「我们希望模型怎么做」的规范文档,是审计「规范 → 数据 → 行为」这条链仅有的抓手。