第三章:数据准备——人类偏好数据的收集、标注规范与质量控制
数据,是RLHF的燃料。没有高质量的人类偏好数据,再好的算法也是空中楼阁。这一章,我们聊聊数据准备的那些事。
3.1 人类偏好数据从哪来?
说白了,就是让人来当裁判。给模型两个回答,让标注员选哪个更好。或者给一堆回答,让标注员排个序。
我刚开始做RLHF时,天真地以为随便找几个人标注就行。结果模型学了一堆奇怪的东西——比如总是用「尊敬的」开头,或者回答特别啰嗦。后来才明白,标注员的背景、偏好、甚至当天的心情,都会影响数据质量。
3.2 收集策略:对比对 vs 排名
两种主流方式,各有千秋。
| 方式 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 对比对 | 给两个回答,选更好的 | 标注简单,一致性高 | 信息量有限 |
| 排名 | 给多个回答,排序 | 信息更丰富 | 标注难度大,容易疲劳 |
我个人习惯用对比对作为主力。为什么?标注员只需要做二选一,疲劳度低,质量容易控制。排名虽然信息量大,但标注员排到第5个时,基本就开始乱点了。
我的经验: 先用对比对收集大量数据,再用排名做小规模精标。这样既保证了数量,又保证了质量。
3.3 标注规范:别让标注员猜
标注规范,就是给标注员的「游戏规则」。写不好,数据就废了。
我曾经见过一个项目,标注规范写了20页,结果标注员根本看不懂。最后模型学到的偏好全是噪音。
好的标注规范,应该包含以下几点:
- 明确评价维度: 有用性、安全性、诚实性、无害性。每个维度都要有具体例子。
- 给出边界案例: 比如「两个回答都不好怎么办?」「两个回答一样好怎么办?」
- 设置陷阱题: 插入已知答案的题目,检测标注员是否认真。
注意: 标注规范不是写论文,要通俗易懂。我建议用「好回答长这样」「坏回答长那样」的方式,配图配例子。
3.4 质量控制:数据清洗三板斧
数据收集完了,别急着用。先做质量控制。
我一般用这三招:
- 一致性检查: 同一道题给不同标注员,看他们选的是否一致。一致性低于70%的题目,直接扔掉。
- 异常值检测: 标注员如果总是选左边,或者总是选右边,说明有问题。标注时间太短(比如3秒选完)的也要剔除。
- 交叉验证: 让资深标注员抽检10%的数据,重新标注。不一致的,打回重做。
嗯,这里要注意:质量控制不是一次性的。我建议每收集1000条数据,就做一次质量审计。发现问题,及时调整标注规范。
3.5 数据格式:对比对与排名
数据格式,决定了模型怎么吃数据。我推荐用JSON格式,清晰易读。
对比对格式
{
"prompt": "请解释什么是量子纠缠",
"chosen": "量子纠缠是...(好的回答)",
"rejected": "量子纠缠就是...(差的回答)",
"source": "标注员A",
"timestamp": "2024-01-15 10:30:00"
}
排名格式
{
"prompt": "如何提高编程效率?",
"rankings": [
{"rank": 1, "response": "最好的回答..."},
{"rank": 2, "response": "次好的回答..."},
{"rank": 3, "response": "最差的回答..."}
],
"source": "标注员B",
"timestamp": "2024-01-15 11:00:00"
}
你想想看,这种格式的好处是什么?模型可以直接读取,不需要额外解析。而且方便做数据增强——比如把对比对里的chosen和rejected互换,就能生成新的训练样本。
3.6 知识体系:数据准备全流程
下面这张图,是我自己总结的数据准备流程。每次做新项目,我都会拿出来对照一遍。
这张图里,我特别想强调反馈循环。很多团队做完数据就扔给模型,不管了。其实应该根据模型的表现,反过来优化数据收集策略。比如模型总在安全性上犯错,那就多收集安全相关的偏好数据。
3.7 避坑指南
最后,分享几个我踩过的坑:
- 数据量不是越多越好: 我曾经收集了100万条对比对,结果模型学到的全是噪音。后来发现,标注员之间的一致性只有50%。后来只用了10万条高质量数据,效果反而更好。
- 标注员要培训: 别以为给个规范就行。我建议先让标注员做50道测试题,通过率低于80%的,重新培训。
- 数据要版本管理: 每次修改标注规范,都要生成新版本。不然模型训到一半,发现数据变了,那才叫崩溃。
核心总结: 数据准备不是一次性工作,而是持续优化的过程。好的数据,能让RLHF事半功倍。坏的数据,再好的算法也救不了。