SFT 数据集应该如何构建?高质量指令数据有哪些标准?
简化版
SFT 数据通常由指令或多轮消息及目标回答组成,核心不是盲目堆数量,而是保证正确、相关、多样、边界清晰且与线上任务分布一致。数据还要去重、脱敏、控制长度,并按用户、实体或时间合理划分训练集和测试集,防止泄漏。
详细版
一套可用的 SFT 数据流水线包括:
- 从业务目标和失败案例定义任务分布;
- 制定标注规范、正确答案标准与拒答边界;
- 收集或生成候选数据,并由规则和人工审核;
- 去重、纠错、脱敏,清理模板残留和互相矛盾的样本;
- 覆盖常规请求、难例、边界、无答案和安全样本;
- 使用目标模型的 Chat Template 格式化;
- 按实体、来源或时间切分,避免相似样本跨集合泄漏;
- 保留独立测试集,训练后按任务切片评估。
高质量数据的四个关键词是正确性、相关性、多样性和一致性。合成数据可以扩量,但生成模型的错误、偏好和固定句式也会被学生模型学走,必须抽检和过滤。
完整版教学
记忆钩子:微调题先分清目标是改行为、补知识还是降成本,再谈 SFT、LoRA、QLoRA 和评估上线。
一、SFT 在优化什么
因果语言模型通常用下一 token 预测损失训练。SFT 把期望回答作为目标序列,让模型提高这些目标 token 的概率。模型会学习答案内容,也会学习长度、语气、格式、拒答方式和数据中的错误。
因此数据不是普通文档集合,而是对模型行为的示范。
二、先定义线上分布
数据集应来自明确任务:用户会问什么、输入多长、允许使用哪些信息、答案怎样才算正确。只收集理想问题会让模型在线上边界输入上失效。
应同时覆盖高频常规样本、少见但高风险样本、容易混淆的反例、信息不足场景和对抗输入。
三、正确性比表面流畅更重要
回答语气自然但事实错误,会直接把错误监督写入权重。审核要检查事实、计算、引用、代码可运行性和是否满足指令,不能只看文字是否顺畅。
多位标注者意见不一致时,应先完善规则并记录争议,而不是随机挑一个答案。
四、多样性与一致性并不冲突
多样性指任务、长度、语言、用户表达和难度覆盖充分;一致性指相同规则下的答案边界一致。数据可以有不同写法,但不能一部分样本允许某行为,另一部分又无解释地禁止。
模板化合成数据若开头、结构完全相同,会让模型过度模仿模板。应检查重复率和语言模式,而不只是文件哈希。
五、数据泄漏怎么发生
同一用户会话的不同轮次、同一文档的相邻切片或同一道题的改写,若被随机拆到训练集和测试集,测试分数会虚高。更稳妥的做法是按会话、实体、文档来源或时间分组切分。
正式测试集不应参与 Prompt 调试、样本生成和超参数选择,否则它也会逐渐变成训练信息。
六、合成数据能不能用
合成数据适合覆盖稀缺场景和扩充表达方式,但要控制来源模型、生成 Prompt 和过滤规则。可以用确定性规则检查格式,用外部工具验证计算或代码,再对高风险样本人工复核。
教师模型更强不代表每条输出都正确,自动评分模型也可能与生成模型共享偏差。
七、数据治理
记录数据来源、授权、版本、清洗规则和变更历史;删除密钥、个人信息和无权使用的内容。上线后把真实失败案例回流为候选样本,但必须重新审核,不能直接把用户日志投入训练。
八、面试拆解算例
微调题可以用一个小项目来拆:基座模型 7B,业务只需要客服问答风格统一,训练集初筛 30,000 条,清洗后留下 8,000 条高质量样本。若全量微调,7B 参数按 BF16 仅权重就约 14GB,训练还要梯度和优化器状态;若用 LoRA,只训练低秩增量,显存压力会明显下降,但表达能力受 rank 和目标模块影响。
base_model: 7B
raw_samples: 30000
clean_samples: 8000
lora_rank: 8 or 16
learning_rate: 1e-5 ~ 2e-4
validation_split: 5% ~ 10%
| 方案 | 适合目标 | 主要风险 | 验收重点 |
|---|---|---|---|
| Prompt | 临时改格式、少量约束 | 长提示不稳定 | 单轮成功率 |
| RAG | 接入动态知识 | 检索召回不足 | 引用与命中率 |
| SFT/LoRA | 固化行为和领域表达 | 遗忘与过拟合 | 回归集与人工偏好 |
| 全量微调 | 深度改模型能力 | 成本高、风险大 | 全面评测 |
数据清洗 -> 训练/验证切分 -> 小步试训 -> 回归评测 -> 灰度上线
| | | |
去噪去重 防泄漏 看 loss 看坏例
因此回答「SFT 数据集应该如何构建?高质量指令数据有哪些标准?」时,不要直接说“用微调”。先问目标是什么、数据是否足够干净、是否有动态知识,再选择 Prompt、RAG、PEFT 或全量微调,最后用评估集证明它确实变好了。
九、常见误区与追问
- 误区:微调就是把业务文档喂给模型让它记住。 微调更适合塑造行为格式、任务风格和领域表达,动态知识与事实更新通常更适合 RAG。
- 追问:为什么这个问题不用 Prompt 或 RAG 解决? 面试里要先说明目标是改行为、补知识还是接外部数据,再选择微调方案。
- 误区:训练集越大越好。 SFT 更怕低质、冲突、模板化和泄漏数据;少量高质量样本常常胜过大量脏样本。
- 追问:上线前你会看哪些评估? 至少要覆盖基准集、人工偏好、回归用例、安全红线、延迟成本和灾难性遗忘检查。
- 误区:LoRA/QLoRA 省显存就没有代价。 参数高效方法降低训练成本,但 rank、目标模块、量化误差和合并部署都会影响最终质量。
十、加强记忆
SFT 数据就是模型的行为教材:答案要对,场景要像线上,边界要一致,难例要覆盖,训练与测试要真正隔离;低质量数据越多,模型只会更稳定地学错。