主题
📊 数据集构建与标注
没有高质量数据,微调就是浪费时间——数据决定了模型的上限
需要多少数据
| 数据类型 | 最低数量 | 推荐数量 |
|---|---|---|
| 指令微调(对话/问答) | 200 条 | 1000+ 条 |
| 分类任务 | 500 条 | 2000+ 条 |
| 文本生成(风格模仿) | 500 条 | 2000+ 条 |
| 复杂推理(法律/医疗) | 500 条 | 3000+ 条 |
数据太少(<100 条),模型学不到东西,甚至反而变差。
数据格式
微调数据标准格式是 Alpaca 格式:
json
[
{
"instruction": "审查以下合同条款是否有法律风险",
"input": "本合同签订后,任何一方不得以任何理由终止合同。",
"output": "该条款存在以下风险:1. '任何理由'过于绝对...建议修改为..."
},
{
"instruction": "分析以下招标文件的技术要求",
"input": "...",
"output": "..."
}
]常见格式变体
纯对话格式(ChatML):
json
[
{
"messages": [
{"role": "system", "content": "你是合同审查助手"},
{"role": "user", "content": "审查这条条款"},
{"role": "assistant", "content": "该条款存在..."}
]
}
]纯文本(文本续写/风格迁移):
json
[
{"text": "输入文本\n\n期望输出"}
]数据清洗清单
- [ ] 去除重复数据(语义重复,不是字符重复)
- [ ] 去掉明显错误(instruction 和 output 不匹配)
- [ ] 去掉太短或太长的样本(output <20 字或 >2000 字)
- [ ] 统一格式(全是 JSON 或全是对话)
- [ ] 检查 instruction 是否太模糊("帮我做" → "请审查以下合同条款")
- [ ] 检查是否有脏数据(乱码、非目标语言、无关内容)
- [ ] 按 8:1:1 拆分为训练集/验证集/测试集
标注工具
自制标注(推荐小规模)
python
# 用 Python 脚本 + Excel 管理
import json
data = []
with open('contracts.txt') as f:
for line in f:
data.append({
"instruction": "审查以下合同条款",
"input": line.strip(),
"output": "" # 手动填写
})
with open('dataset.json', 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=2)专业工具
- Label Studio:开源标注平台,支持文本分类、NER、对话
- Doccano:轻量文本标注,支持情感分析、序列标注
- GPT/AI 辅助标注:用大模型生成初版标注,人工修正
数据增强
数据不够时:
- 同义词替换:把"审查合同"变成"审核协议"
- 句式变换:主动变被动,长句变短句
- 反向生成:给 GPT output,让它反向生成 input
- 翻译增强:中→英→中,得到变体
注意
数据增强不能替代真实数据。增强 2-3 倍可以,增强 10 倍会导致模型过拟合到你的人造模式。
法眼场景示例
以合同审查为例,好的数据长这样:
json
{
"instruction": "请审查以下合同条款的合规性和风险点",
"input": "第三章:违约责任\n3.1 若乙方逾期交付,每逾期一日,支付合同总金额千分之五的违约金。",
"output": "【风险等级】中\n【分析】千分之五的日违约金折合年化 182.5%,超出法定上限...\n【建议】降低至万分之五,并设置违约金上限不超过合同总额的 20%。"
}🎯 本章要点
- 微调最少 200 条数据,推荐 1000+;数据质量比数量更重要
- 标准格式是 Alpaca(instruction/input/output),对话用 ChatML 格式
- 数据清洗七步:去重→查错→限长→统一格式→查模糊→查脏→拆分
- 数据不够用增强但别超过 3 倍,专业标注可用 Label Studio
加载练习题中...