English interface selected · this article is currently written in Chinese.
偏好对怎样构建:共同上下文、候选差异与标注偏差
English overview →具备清晰骨架、初步数学推导或工程验证,持续补充论据与实测。
数字花园
🌿 什么是数字花园与思想演进?
遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:
- 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
- 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
- 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
- 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
一份偏好数据通常有三个主要字段:prompt、chosen、rejected。真正困难的部分却不在字段名,而在这三个内容是否构成有效比较。
如果两个答案依据的材料不同,较长答案总被选中,或标注后截断删掉了关键错误,那么训练器仍然可以读入文件,但监督含义已经改变。
本篇接着反馈标准,检查偏好对从候选生成到训练输入的整个过程。例子继续采用虚构的 Cedar 实验记录。
先保证两边回答的是同一个问题
设共同提示为:
同一验证集共 100 条,原方案成功 70 条,新方案成功 78 条。只有一次运行,无耗时和独立测试结果。请简洁解释这次改动能说明什么。
一个偏好对可以表示为:
{ "prompt_id": "cedar-example-01", "prompt": "同一验证集共100条,原方案成功70条,新方案成功78条。只有一次运行,无耗时和独立测试结果。请简洁解释这次改动能说明什么。", "chosen": "本次验证成功率提高了8个百分点,但尚不能判断提升是否稳定,也不能比较耗时。", "rejected": "结果证明新方案在所有任务上稳定提升8倍,而且运行更快。", "criterion_version": "evidence-first-v1", "reason_codes": ["unsupported_generalization", "wrong_magnitude", "unsupported_speed"]}这是本卷的审核记录示意,不是声称所有训练器都直接接受这些元数据字段。输入模型的内容和管理字段应分开处理。
共同提示包括任务、材料、系统约定和必要历史。如果一边看到了补充实验,另一边没有,就不能把结果直接当成同一条件下的回答偏好。
对话数据的共同前缀要到 token 层检查
有些数据保存完整对话,而不是单独 prompt 与 completion。转换时需要确认双方共享的历史一致,差异从要比较的回答开始。
不能把 chosen 一侧较长的上下文当成公共提示,再接 rejected 的回答。也不能因为自然语言看起来相同,就忽略模板、角色标记或特殊 token 不同。
例如 TRL 0.23.1 的 RewardTrainer 要求隐式提示格式:把共同提示分别放进 chosen、rejected 两侧,不单独提供 prompt 列;它也支持对话格式并应用聊天模板。因此,上面的审核记录需要先转换,不能原样当作该接口的训练数据。数据能被接收也不等于比较成立。TRL 0.23.1 Reward Modeling
对抽样记录,应并排保存两侧最终序列,检查共同输入、回答边界和结束标记。这里继承第三卷的模板原则,只是从一条示范扩展成两条候选。
候选太差,可能只教会容易的区别
上面的例子同时存在夸大、算错和编造速度,比较很容易。它适合检查标注标准,却不足以覆盖所有训练需要。
若全部 rejected 都是明显乱码,模型可能学会区分“正常文本”和“乱码”,却仍无法比较两段都通顺、其中一段轻微越过证据边界的回答。
候选可以覆盖多个难度:明显错误、局部错误、事实都对但组织不同、存在真实取舍。也要保留“两者都差”或“无法区分”的情况,按规范处理。
难例并非越多越好。过于含糊的比较容易产生不稳定标签。应先确定差异是否真实且可解释,再决定它适合训练还是适合讨论规范。
候选来源会限制训练看见的错误
同一模型用相同采样设置生成的多个答案,可能高度相似;多个模型生成的候选可能更丰富,却也可能引入明显的模型风格差异。
如果 chosen 总来自模型 A,rejected 总来自模型 B,训练器可能利用固定开场白或格式,而不是我们在意的证据支持关系。
因此,要记录生成模型、版本、采样设置和生成时间,但在标注展示中隐藏不必要的身份信息。训练与评价应包含不同来源组合,检查是否只学会辨认某个模型的文风。
重新生成候选也会改变数据分布。它不是简单地增加样本数量,而是改变我们让模型比较的答案空间。
长度偏差要检查,不要机械消灭
较长答案有时确实更完整;也可能只是重复同一结论、使用更多礼貌话。短答案可能更符合用户需求,也可能省略关键限制。
可以先统计 chosen 与 rejected 的 token 长度差,再分组查看偏好是否过度依赖长度。重点抽查“更长但没有新增信息”与“更短但保留关键证据”的对比。
不过,强行把每对答案裁成相同长度会破坏内容,也可能删掉真正决定偏好的部分。长度匹配可以用于专门的诊断集合,不应无条件替代原始任务比较。
相同原则适用于格式、引用数量和语气。诊断某种表面特征,不意味着它在所有任务中都不重要,而是要确认模型是否把它当成了不可靠捷径。
展示顺序会影响标注,字段顺序不应泄漏答案
标注时可以随机把候选放左边或右边,保存原始选择后再映射成 chosen/rejected。不能永远把预期较好的回答放在左侧。
如果用模型评审,同样要检查交换顺序后的稳定性,并保留评审提示与输出。已发表的模型评审研究讨论了位置、冗长等偏差,支持我们将这些作为诊断项,而不是把评审结果视为无误标签。MT-Bench 与 Chatbot Arena
某一对交换顺序后结果不同,不足以单独证明整个评审器不可用;但大量此类变化意味着标签对展示方式敏感,需要修订流程或增加审核。
一条排序展开成多对,不能当成独立证据翻倍
若同一个提示生成四个候选,并得到严格排序,可以展开成六个两两比较:
每个候选会出现在三对中。这六对共享同一个提示与答案,不是六个完全独立任务。
InstructGPT 的奖励建模部分专门讨论了同一排序任务内比较的相关性,并按提示组织比较以处理重复使用的问题。InstructGPT,第 3.5 节
在自己的数据里,至少要保存排序或提示分组,明确每个提示的训练权重。若某提示有十个候选,另一个只有两个,直接把所有对混合等权,会大幅增加前者的影响。
四个候选得到六对,只是标签展开的数量变化,并不等于获得六倍新的语义覆盖。
划分与去重要围绕共同来源
同一提示的所有候选、所有两两比较和材料改写,应留在同一划分中。否则训练见过某答案与 A 的比较,测试再拿它与 B 比较,评价独立性会变弱。
还应检查不同提示是否来自同一原始材料或同一模板事实。第一卷的来源分组仍然适用,不能因为数据变成偏好对就从零开始随机拆分。
完全相同的 chosen/rejected 不是有意义的严格偏好。若清洗把原来不同的两段文本变成相同内容,标签也需要重新处理,而不是继续保留胜负。
截断后,标注理由还成立吗
假设 rejected 的前半段准确,最后一句才夸大为“全面优于旧方案”。若训练长度上限恰好删掉最后一句,两侧剩下的文字可能都合理。
此时原来的偏好标签已经不再有完整依据。仅检查 token 长度合规,无法发现这一问题。
应尽量保证比较所需材料与关键回答内容完整保留。无法保留时,可以排除、改写为合适长度并重新标注,或采用其他明确政策。不要偷偷截断后仍称它为原来的比较。
尤其要记录因长度排除的来源和类型,避免系统性丢掉复杂回答,再误以为训练已经覆盖长文本判断。
一个小型数据验收集怎么安排
准备包含以下情况的记录:正常偏好、相同答案、双方都差、平局、共同历史不一致、顺序交换、关键错误在末尾、同一排序展开多对。
检查转换后哪些进入训练,哪些被保留但不用于当前二元目标,哪些需要人工重审。每种处理都应有理由和计数。
训练前再抽样回答三个问题:这对回答的共同条件是什么?选择依据是什么?转换后的模型输入是否仍保留这个依据?
这比只验证字段是否存在更接近偏好数据真正的质量要求。
两个检查理解的问题
第一,同一提示的四个答案展开成六对,为什么不能把它们随机分散到训练集和测试集,再把六对都当独立样本?
第二,rejected 的错误位于最后一句,截断后消失了。保留原偏好标签会让模型学习什么?你会怎样修改数据处理政策?
下一篇讨论奖励模型怎样从比较中学习,把成对标签变成一个明确的概率模型。
文章概念网络
从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。
34 / 34 个节点 · 正文标记术语与关键词概念
偏好对怎样构建:共同上下文、候选差异与标注偏差
回到原文 ↗最后更新于 2026-10-20
引用本文
@article{2026-10-20-llm-training-preference-02-pairs,
author = {枫语},
title = {偏好对怎样构建:共同上下文、候选差异与标注偏差},
journal = {枫语},
year = {2026},
month = {oct},
url = {https://meiluosi.github.io/posts/2026-10-20-llm-training-preference-02-pairs/}
}