4. 数据集构建(上):提示词设计原则与开源偏好数据集

好,咱们进入RLHF流水线的核心环节——数据集构建。说实话,这一步做不好,后面整个模型训练都是白搭。我见过太多团队把精力全砸在算法调参上,结果数据一塌糊涂,最后模型输出全是垃圾。嗯,咱们今天先聊上半部分:提示词怎么设计、有哪些现成的开源数据集可以用、以及数据清洗的那些坑。

4.1 提示词设计原则:别让模型猜你的心思

提示词(Prompt)是什么?说白了,就是你给模型下的指令。但很多人把它想得太简单了。我刚开始做RLHF时,随手写了个“请回答用户问题”,结果模型给出的回复五花八门,有的像客服,有的像哲学家,完全没法对齐。

为什么会这样?因为模型不知道你期望它扮演什么角色。所以第一条原则就是:明确角色与场景

核心原则一:角色锚定

提示词里必须告诉模型“你是谁”、“你在做什么”。比如:

  • ❌ 错误示例:“解释一下量子计算。”
  • ✅ 正确示例:“你是一位物理学教授,正在给大一新生科普量子计算。请用生活化的比喻解释。”

第二条原则:控制输出格式。模型天生爱自由发挥,你得给它画个框。我在项目中遇到过,模型回答问题时突然开始写诗,虽然挺有才,但完全跑题了。所以提示词里要明确:

  • 输出长度(“请用不超过200字回答”)
  • 输出结构(“请分三点列出”)
  • 输出风格(“请用正式语气”)

第三条原则:避免歧义与偏见。你想想看,如果提示词里带着隐含的倾向性,模型就会放大这种偏见。比如“为什么苹果手机比安卓好?”——这问题本身就预设了“苹果更好”。正确的做法是:“请客观比较苹果和安卓手机的优缺点。”

我的小技巧:写提示词时,先自己读一遍,问自己“如果我是模型,我能理解这个指令吗?我会不会误解?” 如果答案是否定的,那就改。

4.2 开源偏好数据集介绍:站在巨人的肩膀上

自己从头收集偏好数据?那成本太高了。好在社区已经贡献了不少高质量数据集。我挑几个最常用的给你讲讲。

4.2.1 Anthropic HH(Helpful & Harmless)

这是Anthropic团队开源的偏好数据集,也是RLHF领域最经典的基准之一。它包含约16万条对话,每条对话都有两个回复,标注者会选出更“有帮助且无害”的那个。

属性 说明
数据量 约16万条
标注方式 二选一偏好标注
覆盖场景 日常问答、伦理困境、危险请求等
语言 英文为主

我个人习惯用这个数据集做基线测试。它最大的优点是平衡了“有帮助”和“无害”——有些回复虽然很贴心,但可能泄露隐私或鼓励危险行为,这种数据在HH里会被标记为“有害”。

注意:HH数据集里有些标注存在争议。比如关于政治话题的偏好,不同标注者可能有不同立场。使用时建议做一次交叉验证。

4.2.2 OpenAssistant(OASST1)

这是由LAION社区众包构建的数据集,规模更大,约6.6万条对话树。每条对话包含多个回复,标注者会给出质量评分(1-5星)。

它和HH最大的区别是什么?OASST1更注重多样性。它覆盖了35种语言,话题从编程到哲学无所不包。我记得有一次做多语言对齐实验,HH数据集在中文上表现很差,但OASST1里中文数据就丰富得多。

对比维度 Anthropic HH OpenAssistant
数据规模 16万条 6.6万条对话树
标注粒度 二选一 多级评分
语言覆盖 英文为主 35种语言
适用场景 安全对齐 通用偏好学习

4.2.3 其他值得关注的数据集

  • Stanford SHP:聚焦于“有帮助性”,每条数据包含两个回复,标注者选出更实用的那个。适合做实用性对齐。
  • PKU-SafeRLHF:北京大学出品,专门针对安全对齐。它把“有害”细分为多个类别(如歧视、暴力、隐私泄露等),方便做细粒度分析。
  • ShareGPT:从ChatGPT用户分享的对话中爬取,质量参差不齐,但胜在真实。我建议只用它做辅助数据,别当主力。

4.3 数据清洗与格式标准化:脏活累活但必须干

拿到开源数据集后,别急着用。我吃过这个亏——直接拿HH数据集训练,结果模型输出一堆乱码。后来一查,数据里混着HTML标签和特殊字符。嗯,从那以后我养成了数据清洗的习惯。

4.3.1 清洗步骤

  1. 去重:检查是否有完全相同的对话对。有些数据集在众包时会出现重复提交。
  2. 过滤低质量数据:比如回复长度小于10个字符的、全是标点符号的、或者明显是机器生成的垃圾文本。
  3. 清理特殊字符:去掉HTML标签、Unicode控制字符、多余的空格和换行。
  4. 语言检测:如果你只做中文模型,那就把非中文数据过滤掉。别指望模型能自动忽略——它学得可快了,连法语都会学进去。

我曾经踩过的坑:有一次用OASST1训练,模型突然开始输出西班牙语。排查了半天,发现数据集里混着几条西班牙语对话,模型直接学会了。从那以后,我每条数据都做语言检测。

4.3.2 格式标准化

RLHF训练通常需要统一的数据格式。我推荐使用JSON格式,结构如下:

{
  "prompt": "用户的问题或指令",
  "chosen": "被选中的回复",
  "rejected": "被拒绝的回复",
  "metadata": {
    "source": "Anthropic HH",
    "language": "en",
    "category": "helpful"
  }
}

为什么要加metadata?因为后期分析时,你可以按来源、语言、类别做分组统计。比如“HH数据集里,哪些类别的偏好最一致?”——有了metadata,你就能快速回答这个问题。

我的建议:标准化时,把prompt和回复都做一下tokenize检查。如果某个prompt的token数超过模型最大长度,要么截断,要么丢弃。否则训练时会报错,而且很难排查。

4.4 知识体系总览

下面这张图帮你理清本章的核心逻辑:从提示词设计出发,到数据集选择,再到清洗标准化,最终产出可用的训练数据。

数据集构建(上):核心流程 提示词设计 角色锚定 格式控制 · 避免偏见 开源数据集 Anthropic HH OpenAssistant · 其他 数据清洗 去重 · 过滤低质量 清理字符 · 语言检测 格式标准化 JSON统一格式 添加metadata 可用训练数据 prompt + chosen + rejected 可直接用于RLHF训练 提示:每个阶段都可能需要迭代,尤其是数据清洗和格式标准化

好了,这一章的内容就到这里。提示词设计、数据集选择、数据清洗与标准化,这三步走完,你手里就有了一份可用的训练数据。下一章咱们接着聊数据集构建的下半部分——偏好标注策略与数据增强。到时候见。

专注资料整理