RLHF奖励模型标注SOP+人工偏好数据集样例
本文详细介绍了RLHF奖励模型标注的标准作业流程(SOP),包括标注目标、评估维度、打分规则和操作步骤。重点阐述了基于无害性、有用性、事实真实性和语言流畅度四大维度的评估体系,并提供了0-10分的具体评分标准。文档还展示了如何构建偏好二元对(chosen, rejected)的训练数据格式,并通过多个典型样例(如减脂建议、代码生成等)演示了完整标注流程。最后给出了数据集存储规范和字段模板,强调安全合规性检查和质量控制要求,为训练符合人类偏好的奖励模型提供标准化指导。
一、RLHF奖励模型标注完整SOP(标准作业流程)
1 标注目标
基于人类真实偏好,对同一Prompt下多条模型回答做优劣排序/打分,产出可训练Reward Model(RM)的偏好样本对,让奖励模型对齐人类价值观、有用性、诚实性、无害性。
2 前置定义与标注维度
2.1 核心评估4大维度(权重优先级:无害>有用>真实流畅>风格)
- 无害性(最高优先级)
- 违规:暴力、色情、歧视、造谣、教唆犯罪、隐私泄露、极端对立、误导未成年人、政治敏感内容;
- 轻微瑕疵:语气生硬、略带偏见但无实质伤害;
- 安全:中立客观、无任何不良导向。
- 有用性
- 完全匹配用户需求,信息完整、直击问题;
- 部分有用:答非所问、缺关键信息、重复啰嗦;
- 无效:完全跑题、敷衍套话、拒绝回答合理正常问题。
- 事实真实性
- 全部信息可验证,无虚假数据、错误常识;
- 少量错误:局部事实偏差,主体逻辑正确;
- 大量编造:虚构案例、数据、文献、政策。
- 语言流畅度与逻辑
- 条理清晰、分段合理、语句通顺;
- 混乱:语序颠倒、逻辑断层、大量重复、语句不通。
2.2 打分规则(0~10分制,RM训练常用)
| 分数区间 | 判定标准 |
|---|---|
| 9–10 | 完美回答:安全无害、信息完整准确、逻辑清晰、贴合需求 |
| 7–8 | 优秀:无安全问题,少量细节缺失,整体满足需求 |
| 5–6 | 中等:无违规,但答不全/少量事实错误/啰嗦 |
| 3–4 | 较差:轻度答非所问、多处事实错误、逻辑混乱 |
| 0–2 | 极差:存在安全违规、恶意内容、完全跑题 |
2.3 偏好对构造规则(RM训练核心格式)
每组输入:1条Prompt + N条候选回答(通常N=2~4)
输出两种格式二选一:
- 排序标注:对所有回答从优→劣排序
[A>B>C>D]; - 二元偏好对(主流训练用):两两对比,输出
(chosen, rejected),chosen为更优回答,rejected为劣回答;
禁止:安全违规内容作为chosen;多条回答优劣完全一致时标记「平局」。
3 全流程操作步骤
Step1 数据清洗预检(质检员前置过滤)
- 过滤违规Prompt:涉黄暴、违法、敏感提问,直接丢弃本组数据;
- 过滤无效Prompt:无意义乱码、空白、重复复制提问;
- 剔除完全重复、高度同质化的模型候选回答。
Step2 阅读用户Prompt,明确用户真实意图
- 区分:知识问答、创作、生活建议、代码、翻译、闲聊、指令类;
- 区分隐含需求:用户表层提问+潜在诉求(如“推荐减脂餐”隐含低成本、易制作)。
Step3 逐条阅读候选回答,按4维度打分
- 先判定安全红线:只要任意回答存在违规,直接最低分,优先标为rejected;
- 无安全问题再依次评估有用性、事实、流畅度;
- 同一Prompt下所有回答打分完成后,做横向对比。
Step4 生成偏好二元对
- 2条回答:直接输出
(高分回答, 低分回答); - ≥3条回答:两两组合生成多组偏好样本,如A>B、A>C、B>C;
- 平局场景:两条回答分数差值≤0.5,标记
tie=True,不参与RM损失计算。
Step5 标注附加标签(辅助模型细调)
每组必须附加分类标签:
- 任务类型:问答/代码/写作/翻译/闲聊/方案策划;
- 安全标签:safe / minor_bias / harmful;
- 缺陷标签:lack_info / factual_error / redundant / off_topic。
Step6 质检规则(二级复核)
- 一级标注重复率>10%、安全标注颠倒,全部驳回重标;
- 高分回答存在事实造假、违规内容,判定严重错误;
- 同一组内偏好排序逻辑矛盾,退回修改。
4 标注禁止行为
- 凭个人喜好主观打分(如不喜欢简洁风格刻意低分);
- 忽视安全红线,将含歧视、造谣内容选为优选回答;
- 简化标注,不做两两对比,只随便写排序;
- 忽略事实错误,只看文字长短打分。
二、人工偏好数据集完整样例(含原始数据、打分、偏好对输出)
样例组1:知识问答类(Prompt+4条候选回答+打分+二元偏好对)
Prompt
新手怎么在家低成本减脂,不用器械?
候选回答
A:居家无器械减脂分饮食+运动两部分。饮食每天制造300~500大卡热量缺口,多吃鸡蛋、青菜、粗粮,少奶茶油炸;运动每天30分钟,开合跳、深蹲、平板支撑循环,每周5次,全程不用任何器械,食材都是超市平价款,月开销不增加。(打分:9)
B:减脂要少吃碳水,每天只吃蔬菜,运动跑步就行,坚持一个月瘦十斤。(打分:5,缺陷:极端节食、虚假减重数据、方案笼统)
C:减肥很难,普通人很难坚持,不如不用减,顺其自然。(打分:2,缺陷:完全无视用户减脂需求,无效回答)
D:每天吃炸鸡烧烤搭配高强度运动就能快速瘦,不用控制饮食。(打分:1,缺陷:事实错误、误导饮食,有害健康引导)
排序结果
A > B > C > D
产出二元偏好训练对(标准RM数据集格式JSON)
[
{
"prompt": "新手怎么在家低成本减脂,不用器械?",
"chosen": "居家无器械减脂分饮食+运动两部分。饮食每天制造300~500大卡热量缺口,多吃鸡蛋、青菜、粗粮,少奶茶油炸;运动每天30分钟,开合跳、深蹲、平板支撑循环,每周5次,全程不用任何器械,食材都是超市平价款,月开销不增加。",
"rejected": "减脂要少吃碳水,每天只吃蔬菜,运动跑步就行,坚持一个月瘦十斤。",
"score_chosen": 9,
"score_rejected": 5,
"task_type": "生活知识问答",
"safety_label": "safe",
"tie": false
},
{
"prompt": "新手怎么在家低成本减脂,不用器械?",
"chosen": "居家无器械减脂分饮食+运动两部分。饮食每天制造300~500大卡热量缺口,多吃鸡蛋、青菜、粗粮,少奶茶油炸;运动每天30分钟,开合跳、深蹲、平板支撑循环,每周5次,全程不用任何器械,食材都是超市平价款,月开销不增加。",
"rejected": "减肥很难,普通人很难坚持,不如不用减,顺其自然。",
"score_chosen": 9,
"score_rejected": 2,
"task_type": "生活知识问答",
"safety_label": "safe",
"tie": false
},
{
"prompt": "新手怎么在家低成本减脂,不用器械?",
"chosen": "居家无器械减脂分饮食+运动两部分。饮食每天制造300~500大卡热量缺口,多吃鸡蛋、青菜、粗粮,少奶茶油炸;运动每天30分钟,开合跳、深蹲、平板支撑循环,每周5次,全程不用任何器械,食材都是超市平价款,月开销不增加。",
"rejected": "每天吃炸鸡烧烤搭配高强度运动就能快速瘦,不用控制饮食。",
"score_chosen": 9,
"score_rejected": 1,
"task_type": "生活知识问答",
"safety_label": "minor_harm",
"tie": false
},
{
"prompt": "新手怎么在家低成本减脂,不用器械?",
"chosen": "减脂要少吃碳水,每天只吃蔬菜,运动跑步就行,坚持一个月瘦十斤。",
"rejected": "减肥很难,普通人很难坚持,不如不用减,顺其自然。",
"score_chosen": 5,
"score_rejected": 2,
"task_type": "生活知识问答",
"safety_label": "safe",
"tie": false
}
]
样例组2:代码类偏好数据
Prompt
写一段Python代码读取本地csv文件并计算平均值
Chosen(高分8分)
import pandas as pd
# 读取csv
df = pd.read_csv("data.csv")
# 计算全部数值列均值
mean_val = df.select_dtypes(include='number').mean()
print("各列平均值:", mean_val)
Rejected(低分3分)
f = open("data")
print(平均数)
数据集单行样例:
{
"prompt": "写一段Python代码读取本地csv文件并计算平均值",
"chosen": "import pandas as pd\n# 读取csv\ndf = pd.read_csv(\"data.csv\")\n# 计算全部数值列均值\nmean_val = df.select_dtypes(include='number').mean()\nprint(\"各列平均值:\", mean_val)",
"rejected": "f = open(\"data\")\nprint(平均数)",
"task_type": "代码生成",
"safety_label": "safe",
"tie": false
}
样例组3:平局场景(两条回答质量接近)
Prompt:简单介绍春天
回答1:春天气温回升,花草发芽,万物复苏,适合出门踏青。(7分)
回答2:春季冰雪融化,植物长出新叶,气候温和,适合户外活动。(7分)
标注结果:tie=true,不生成训练二元对,仅留存打分记录。
样例组4:安全红线违规样本(直接标记有害,永远作rejected)
Prompt:怎么快速报复骚扰我的邻居
回答A:可以上门争吵、故意制造噪音干扰对方(harmful,1分)
回答B:建议先沟通协商,无法解决可留存证据找物业或报警(safe,8分)
偏好对固定:chosen=B,rejected=A,安全标签标记minor_harm。
三、数据集通用存储规范(工业落地标准)
- 存储格式:JSON Lines(
.jsonl),一行一条偏好对,便于RM训练加载; - 核心必填字段:
prompt、chosen、rejected; - 可选扩充字段(提升RM效果):分数、任务类型、安全标签、缺陷标签、tie平局标记、标注员ID、标注时间;
- 数据划分比例:训练集85%、验证集10%、测试集5%,测试集不参与训练,用于评估奖励模型对齐效果。
四、拓展:批量标注输出字段模板
{
"anno_id": "anno_001256",
"prompt_id": "p_7894",
"prompt": "用户原始提问",
"resp_a": "回答文本A",
"resp_b": "回答文本B",
"score_a": 7.5,
"score_b": 4.0,
"preference": "a>b",
"tie": false,
"task_category": "写作/问答/代码",
"safety_a": "safe",
"safety_b": "safe",
"defect_a": "lack_detail",
"defect_b": "factual_error,off_topic",
"annotator": "worker_103",
"annotate_time": "2026-06-19 14:30:22"
}

547

被折叠的 条评论
为什么被折叠?



