对话数据准备:数据格式、清洗与质量评估
大家好,我是你们这堂课的老朋友。今天咱们聊聊RLHF落地时最基础、也最容易被忽视的一环——对话数据准备。
说实话,我见过太多团队,模型架构搞得花里胡哨,结果数据一塌糊涂,最后训练出来的模型像个“人工智障”。嗯,数据才是真正的护城河。今天我就把我在一线踩过的坑、总结的经验,掰开了揉碎了讲给你听。
一、对话数据格式:单轮 vs 多轮
先搞清楚一个基本问题:你的对话数据长什么样?
我个人习惯把对话数据分成两大类:单轮对话和多轮对话。别看名字简单,处理起来天差地别。
1. 单轮对话数据
说白了,就是“一问一答”。用户问一句,模型答一句,没有上下文依赖。
典型场景:FAQ问答、知识查询、简单指令。
数据格式示例:
{
"instruction": "请介绍一下RLHF的核心思想",
"response": "RLHF(Reinforcement Learning from Human Feedback)的核心思想是通过人类反馈来优化语言模型,使其生成更符合人类偏好的回答。"
}
这种格式最简单,但坑也不少。我在项目中遇到过一个问题:很多公开数据集里的单轮对话,其实隐含了上下文。比如用户问“它是什么原理?”,这个“它”指代不明。如果你直接当单轮数据用,模型学到的就是“猜谜语”。
2. 多轮对话数据
多轮对话就复杂多了。它需要保留完整的对话历史,模型才能理解当前语境。
典型场景:客服对话、任务型助手、角色扮演。
数据格式示例:
{
"conversation": [
{"role": "user", "content": "我想订一张明天去北京的机票"},
{"role": "assistant", "content": "好的,请问您希望什么时间出发?"},
{"role": "user", "content": "上午10点左右"},
{"role": "assistant", "content": "为您查询到以下航班:CA1234,10:30出发,价格1200元。需要预订吗?"}
]
}
这里有个关键点:轮次长度。我建议控制在3-8轮之间。太短了学不到上下文依赖,太长了模型容易“失忆”,而且训练效率低。
二、数据清洗与去重:脏数据是毒药
数据清洗,说白了就是“去杂质”。我见过最离谱的数据集里,居然有HTML标签、乱码、甚至整段英文夹杂中文。你想想看,模型学这种东西,能学好才怪。
1. 清洗步骤
我一般按以下顺序处理:
- 去除噪声:HTML标签、特殊符号、不可见字符。用正则表达式一把梭。
- 统一格式:全角半角转换、标点符号标准化。中文用中文标点,英文用英文标点。
- 过滤低质量:长度过短(比如只有“好的”)、重复内容(比如“哈哈哈”连续20个)、无意义内容(比如纯数字)。
- 语言检测:确保数据是目标语言。我遇到过中文数据集里混了20%的日文,查了半天才发现。
代码示例:
import re
def clean_text(text):
# 去除HTML标签
text = re.sub(r'<.*?>', '', text)
# 去除特殊符号(保留中文、英文、数字、基本标点)
text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9,。!?、:;""''()【】]', '', text)
# 合并多余空格
text = re.sub(r'\s+', ' ', text).strip()
return text
2. 去重策略
去重不是简单的“一模一样才删”。对话数据里,语义重复但表述不同的情况很常见。
我常用的方法:
- 精确去重:完全相同的文本直接删除。这个简单,用哈希表就行。
- 模糊去重:计算文本相似度(比如Jaccard相似度、编辑距离)。相似度超过0.9的,只保留一条。
- 语义去重:用Sentence-BERT等模型提取向量,计算余弦相似度。这个成本高,但效果最好。
三、数据质量评估标准:好数据长什么样?
数据清洗完了,怎么知道它好不好?我总结了一套“四维评估法”,你可以直接拿去用。
| 维度 | 评估指标 | 说明 |
|---|---|---|
| 完整性 | 字段缺失率 | 每条数据是否包含必要的字段(instruction、response等) |
| 一致性 | 格式统一率 | 数据格式是否统一,比如所有JSON字段顺序一致 |
| 准确性 | 语义正确率 | 回答是否与问题相关,是否存在事实错误 |
| 多样性 | 主题覆盖率 | 数据是否覆盖了足够多的领域和场景 |
嗯,这里要特别说一下多样性。我见过一个团队,数据量很大,但90%都是“天气查询”和“时间查询”。模型训练出来,问别的就胡言乱语。所以,我建议你统计一下数据中的意图分布,确保每个类别都有足够的样本。
知识体系总览
为了让你更直观地理解这一章的内容,我画了一张图。它展示了对话数据准备的三个核心环节,以及它们之间的关系。
好了,这一章的内容就到这里。数据准备是RLHF的基石,你花多少功夫在上面,模型就会回报你多少。下一章我们聊聊奖励模型的设计,那又是另一片天地了。