2.数据准备
数据是微调的基石。高质量的数据能让模型事半功倍,而低质量的数据则会导致模型学到错误的模式。本章介绍微调数据的准备方法。
# 2.1 数据格式
# 2.1.1 常见数据格式
指令格式(Instruction Format)
最常用的格式,包含指令、输入和输出三部分:
{
"instruction": "将以下英文翻译成中文",
"input": "Hello, how are you?",
"output": "你好,你怎么样?"
}
1
2
3
4
5
2
3
4
5
对话格式(Conversation Format)
适用于多轮对话场景:
{
"conversations": [
{"role": "user", "content": "什么是机器学习?"},
{"role": "assistant", "content": "机器学习是人工智能的一个分支..."},
{"role": "user", "content": "它和深度学习有什么区别?"},
{"role": "assistant", "content": "深度学习是机器学习的一个子集..."}
]
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2.1.2 数据文件格式
| 格式 | 特点 | 适用场景 |
|---|---|---|
| JSONL | 每行一个 JSON 对象 | 最常用,便于流式处理 |
| JSON | 整个文件是 JSON 数组 | 数据量较小时 |
| CSV/TSV | 表格格式 | 简单结构的数据 |
# 2.2 数据收集
# 2.2.1 数据来源
| 来源 | 优点 | 缺点 |
|---|---|---|
| 公开数据集 | 现成可用,质量有保证 | 可能不完全匹配需求 |
| 业务数据 | 贴合实际场景 | 需要清洗和标注 |
| 人工标注 | 质量可控 | 成本高,速度慢 |
| 模型生成 | 成本低,速度快 | 质量参差不齐 |
# 2.2.2 常用公开数据集
通用指令数据
- Alpaca:52K 条指令数据,由 GPT-3.5 生成
- ShareGPT:用户分享的 ChatGPT 对话
- BELLE:中文指令数据集
特定任务数据
- MMLU:多任务语言理解
- GSM8K:数学推理
- HumanEval:代码生成
# 2.2.3 Self-Instruct 方法
让模型自己生成指令和回答:
- 准备少量种子任务作为示例
- 让模型生成新的指令
- 让模型为新指令生成回答
- 过滤低质量数据
- 重复以上步骤
# 2.3 数据清洗
# 2.3.1 常见数据问题
| 问题类型 | 描述 | 影响 |
|---|---|---|
| 重复数据 | 相同或高度相似的样本 | 导致过拟合 |
| 噪声数据 | 错误、乱码、无意义内容 | 学到错误模式 |
| 格式错误 | JSON 解析失败、字段缺失 | 训练报错 |
| 长度异常 | 过长或过短的样本 | 影响训练效率 |
| 标签错误 | 输出与输入不匹配 | 学到错误映射 |
# 2.3.2 清洗要点
- 格式检查:确保数据格式正确,字段完整
- 去重:去除完全相同或高度相似的样本
- 长度过滤:过滤过长或过短的样本
- 质量过滤:去除低质量、无意义的内容
# 2.3.3 去重策略
- 精确去重:基于哈希值去除完全相同的样本
- 模糊去重:使用相似度算法去除高度相似的样本(如编辑距离、余弦相似度)
# 2.4 数据质量评估
# 2.4.1 自动评估指标
| 指标 | 说明 |
|---|---|
| 长度分布 | 输入输出的长度统计 |
| 词汇多样性 | 词汇的丰富程度(Type-Token Ratio) |
| 困惑度 | 文本的流畅程度 |
| 重复率 | 重复 n-gram 的比例 |
# 2.4.2 人工抽检
自动指标无法完全反映数据质量,建议进行人工抽检:
- 随机抽样:从数据集中随机抽取 100-500 条样本
- 评估维度:指令是否清晰、输出是否正确、格式是否规范
- 质量分级:A级(高质量)、B级(需修正)、C级(丢弃)
# 2.5 数据增强
当数据量不足时,可以通过数据增强扩充数据集。
# 2.5.1 常用增强方法
| 方法 | 说明 |
|---|---|
| 同义词替换 | 用同义词替换部分词语 |
| 回译 | 翻译成其他语言再翻译回来 |
| 句式变换 | 改变句子结构,保持语义不变 |
| 指令改写 | 用不同方式表达相同的指令 |
# 2.5.2 注意事项
- 增强后的数据要保持语义正确
- 避免引入噪声
- 控制增强比例,避免数据分布偏移
# 2.6 数据划分
# 2.6.1 划分比例
| 数据集 | 比例 | 用途 |
|---|---|---|
| 训练集 | 80-90% | 模型训练 |
| 验证集 | 5-10% | 超参数调优、早停 |
| 测试集 | 5-10% | 最终评估 |
# 2.6.2 划分原则
- 随机划分:确保各集合分布一致
- 分层划分:按类别比例划分,保持类别平衡
- 避免泄露:确保测试集中的数据不会出现在训练集中
# 2.7 最佳实践
# 2.7.1 数据量建议
| 任务类型 | 建议数据量 |
|---|---|
| 简单分类 | 1K-10K |
| 复杂生成 | 10K-100K |
| 领域适配 | 1K-10K(高质量) |
| 指令遵循 | 10K-50K |
# 2.7.2 质量优先原则
- 1000 条高质量数据 > 10000 条低质量数据
- 宁可数据少一些,也要保证质量
- 低质量数据可能导致模型学到错误模式
# 2.7.3 数据多样性
确保数据覆盖多种场景:
- 指令多样性:不同的表达方式
- 输入多样性:不同的输入类型和长度
- 输出多样性:不同的回答风格和详细程度
- 难度多样性:简单到复杂的任务
编辑 (opens new window)
上次更新: 2025/12/19, 15:17:48