SFT 指令微调数据如何构建?
- 标签:大模型、AI、微调
🏛 业务架构师
SFT 数据构建我按"配比—来源—质控"三步讲,这是决定微调成败的 80%:
数据格式:标准的指令对(JSONL),如 {"instruction": "把这段客户反馈归类", "input": "……", "output": "售后类-物流延迟"},多轮任务用 messages 数组格式。
数据配比设计(最体现功力):单一任务数据超过 50% 模型会"走火"(别的都不会了),我的经验配比是——目标任务数据 40%~60%,通用指令数据(开源数据集如 Alpaca 类)30% 防遗忘,相邻任务数据 10%~20% 增强泛化。
数据来源三渠道:
- 业务沉淀:人工客服/人工操作的日志,是质量最高的"真数据",提炼成指令对;
- Self-Instruct 数据增强:用强模型按种子样本批量生成变体,再用强模型+人工过滤——量大但要严控质量;
- 开源领域数据集:直接可用,注意许可证合规。
质量控制铁律:数量服从质量——3000 条精标数据效果胜过 3 万条机器生成噪声;每条数据过三关(格式正确、答案准确、表述多样);抽 5% 人工全检。分层验证:留出 10% 做验证集,训练中监控防过拟合。
业务提醒:数据构建是持续资产,一次立项建成的数据集+质检 SOP,后续每次微调迭代都能复用——这才是微调项目留给企业最值钱的东西。
🏗 系统架构师
SFT 数据构建是微调工程中投入产出比最高的环节,我的方法论:
格式:instruction(含可选 input/context)→ output 对;Chat 模型用消息序列(system/user/assistant 多轮)。质量要求:output 必须是"理想答案"——风格统一、格式规范、事实正确,因为模型会无差别模仿包括缺点在内的一切。
构建路线(按成本递增):
- 真实业务数据改造:历史工单、人工客服对话清洗脱敏后转化——最贴分布,首选;
- 自我蒸馏(Self-Instruct/Evol-Instruct):用大模型生成指令与答案,人工抽检修正——量大,但要防"模型味"和错误知识传播(用比目标模型强的大模型生成);
- 人工标注:高风险领域(医疗法律)必须,成本高但质量可控;
- 开源数据掺配:通用 SFT 数据掺 10~20% 防遗忘。
质量工程:去重(语义级)、难度与多样性分层覆盖、事实性抽检(抽样 5~10% 人工全检)、长度分布控制。配比经验:几千条高质量 > 几万条平庸(LIMA 论文的结论仍成立:1K 精标数据足以对齐行为)。
架构闭环:数据版本化,与训练版本、评测结果三元绑定——线上 badcase → 归因到数据缺口 → 增补样本 → 重训回归,这个飞轮转起来,模型质量才可持续。
💻 全栈开发专家
SFT 数据构建我按「种子→扩增→清洗→配比」四步走:
1. 种子任务设计(质量之根):人工写 100~300 条覆盖核心场景的「黄金样本」,边界情况(模糊输入、超范围问题、需要拒答的)必须占一席——模型的行为边界是从数据学的。
2. 扩增生成:
- Self-Instruct / Evol-Instruct:LLM 基于种子演化新指令(加深、加约束、换领域);
- 用强模型(结合知识库)生成候选回答;
- 真实业务日志改写脱敏——最好的数据源永远是真实分布。
3. 清洗(最费工也最值):
- 去重:Embedding 语义去重 + MinHash;
- 质量过滤:规则(长度异常、格式错乱)+ LLM 打分(正确性/清晰度 1~5 分,留 3 分以上);
- 人工抽检 5%~10%。
4. 格式与配比:
json
{"messages": [
{"role": "system", "content": "你是XX助手"},
{"role": "user", "content": "……"},
{"role": "assistant", "content": "……"}]}配比上:拒答样本 ~10%、多轮对话占 30%+、防过拟合保留通用数据混合。
量的参考:风格/格式微调 1k~10k 条够;领域问答 5 万级;知识注入靠 CPT 不靠 SFT。质量 > 数量是铁律——LIMA 论文证明 1k 精品数据能调出好模型,我们实践一致:脏数据一万条不如干净数据一千条。