07. 偏好数据(Preference Data)怎么构造?有哪些采集方式?
整理偏好数据的结构、采集方式与质量控制要点。
简单回答
偏好数据是 DPO/RLHF 训练的基础,格式是三元组:(prompt, chosen_response, rejected_response),表示在给定输入下,哪个回答更好、哪个更差。采集方式主要有人工标注比较、从模型采样再过滤、用 AI 模型打分判断三种。数据质量的关键在于 chosen 和 rejected 之间的"差距"要有意义,差距太小模型学不到对比信号,差距太大又容易过拟合。
详细解答
偏好数据的结构和用途
偏好数据的标准格式是:
这种数据用来训练 Reward Model(RLHF 流程)或直接用 DPO/IPO/KTO 等方法训练策略模型。本质上是在告诉模型"这两个回答,这个更好",让模型学习什么样的回答是更符合人类偏好的。
和 SFT 数据的区别在于:SFT 数据是在告诉模型"正确答案是什么",是绝对标准;偏好数据是在告诉模型"相比之下哪个更好",是相对比较。相对比较比绝对标准更适合捕捉细粒度的质量差异,特别是在开放性任务上。
人工标注比较
最传统、质量也最可控的方法。流程是:先用模型生成两到四个候选回答,交给人类标注者比较打分,判断哪个更好或者按质量排序。
这种方式能获得真实的人类偏好信号,但存在几个工程挑战。标注一致性问题:不同标注者对"好回答"的理解可能不一样,需要详细的标注规范和一致性校验(Cohen's Kappa 系数来度量)。专业任务的门槛:代码、医学、法律这类专业内容,普通标注者判断不了哪个更好,需要领域专家。成本和速度:人工标注的速度和产能瓶颈让这个方法难以大规模扩展。
实践中通常把任务按难度分层:简单任务(安全性、礼貌性、格式)可以用普通标注者;专业任务用专家;争议较大的任务(涉及价值观判断)需要多人标注投票。
从模型采样再过滤
这种方法不依赖人工判断,而是利用模型本身的输出差异来构造偏好对。常见思路有几种。
一种是用不同质量的模型生成对比:用强模型(GPT-4)和弱模型(更小的开源模型)分别生成回答,把强模型的回答作为 chosen,弱模型的作为 rejected。Ultrafeedback 数据集就是类似的思路。
另一种是在同一个模型的多次采样里过滤:对同一个 prompt,采样多个回答,通过规则(比如代码执行通过为 chosen,执行失败为 rejected)或奖励模型打分来区分 chosen 和 rejected。
还有 Rejection Sampling 配合偏好数据的思路:采样 N 次,正确的进 SFT,把正确的和错误的组合成偏好对进 DPO 训练。DeepSeek-R1 的训练链路就包含了这样的设计。
这类方法的优点是可扩展性强,成本低;缺点是 chosen 和 rejected 的差距可能不够"有意义"——两个都是废话,只是一个稍微好一点点,这样的偏好对对模型帮助不大。
RLAIF:用 AI 来评判
用 GPT-4 或 Claude 等强模型来充当评判者,判断两个候选回答哪个更好,生成偏好标签。这是目前扩展性最好的方式。
实现要点是设计好评判 Prompt,明确告诉 AI Judge 评判维度(准确性、有帮助性、无害性、流畅性等),以及提供具体的评分标准。直接问"哪个更好"容易有位置偏见(倾向于选第一个出现的),可以通过交换顺序分别评判再取一致性来缓解。
AI Judge 的局限是它有自己的偏见:倾向于选更长的回答、更自信的措辞、更结构化的格式,而不一定是真正更准确的。在专业领域(数学对错、代码能否执行)上,用规则验证比 AI Judge 更可靠。
偏好数据的质量要点
chosen 和 rejected 的差距要合适。差距太小(两个回答几乎一样好)模型学不到有用的对比信号;差距太大(一个完美一个一塌糊涂)模型容易过拟合到表面特征。研究发现,"难区分的偏好对"对模型的提升往往比"容易区分的偏好对"更有价值。
偏好的一致性很重要。同一个模型对同一类任务的偏好判断要稳定,前后矛盾的偏好标签会让模型训练信号混乱。实践中通常对每条数据做多次判断取一致的结果,争议太大的数据直接丢弃。
面试时可以这样答
偏好数据的格式是三元组:prompt、chosen(较好的回答)、rejected(较差的回答),用来做 RLHF 或 DPO 对齐训练。
采集方式主要三种。人工标注比较是质量最高的,但成本高、扩展性差,专业领域还有门槛要求;从模型采样过滤是用强弱模型对比、或者执行验证器来区分 chosen 和 rejected,可扩展但偏好质量参差不齐;RLAIF 是用 AI 模型当 Judge,成本低扩展性好,但有位置偏见、长度偏见这些系统性问题。
质量上有一个很重要的点:chosen 和 rejected 的差距要"有意义"。差距太小学不到对比信号,差距太大容易过拟合。真正有价值的偏好数据是那些"难区分但确实有差异"的对,这类数据对模型提升最大。
实际项目里我一般会混合使用多种来源:有验证器的任务(代码、数学)用规则过滤,开放性任务用 AI Judge 配人工抽查,专业领域找领域专家标注关键样本。
常见追问
- DPO 对偏好数据的格式有什么具体要求?数据噪声对 DPO 训练的影响大吗?
- 怎么评估一批偏好数据的质量?有没有自动化的评估方法?
- 如果 chosen 和 rejected 都是错误的,只是错的程度不同,这类数据能用吗?