English interface selected · this article is currently written in Chinese.
指令数据怎样选和生成:任务覆盖、答案审核与合成数据
English overview →具备清晰骨架、初步数学推导或工程验证,持续补充论据与实测。
数字花园
🌿 什么是数字花园与思想演进?
遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:
- 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
- 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
- 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
- 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
如果训练器已经正确处理了回答监督,下一步最容易想到的是多收一些问答。数量确实重要,但同一种简单样本复制一万次,并没有教会模型怎样处理缺失、歧义和新表述。
对本卷的任务,我们需要模型从实验材料中提取模型名、学习率和步数。真正的问题是:训练样本有没有覆盖实际会遇到的情况,答案又是否可靠?
指令数据的质量,要对照任务要求判断。 语言流畅、回答详细、来自更大的模型,都不能单独证明它适合当前监督目标。
下面继续使用虚构的 Cedar 实验记录,不将生成样例当作真实研究事实。
先列情况,再收数量
可以从一张任务覆盖表开始:
| 维度 | 应覆盖的变化 | 想发现的失败 |
|---|---|---|
| 信息完整度 | 三字段完整、缺一个、缺两个 | 缺失时编造,或已有信息也填空 |
| 数值表示 | 小数、科学计数法、中文数字 | 数值转换错误 |
| 文字组织 | 一句话、分段、表格转文本 | 只识别固定句式 |
| 干扰内容 | 背景方案、旧配置、解释段落 | 把其他实验的数据当成目标 |
| 信息边界 | 未说明、明确为零、含糊候选 | 把缺失和零混为一谈 |
| 输入长度 | 短材料、较长材料 | 关键字段被截断或忽略 |
这不是要求一开始填满所有组合。先选择任务必须支持的范围,标出尚未支持的情况,再为每类准备可核对的样本。
例如,第一篇已经把无法按规则区分多个候选值的记录放入歧义集。不能一边说任务只处理单一明确实验,一边用多实验冲突样本评价主指标,却不给选择规则。
覆盖表的价值在于让“不支持什么”具体可见,避免一个总体准确率掩盖边界。
同一个缺失字段,需要不止一种说法
如果所有缺失步数样本都写“记录未说明训练步数”,模型可能只记住这个短语。一旦真实材料只是没提步数,它又开始补写。
可以对同一事实设计不同表达:直接省略、说明未记录、提供其他字段但不谈步数。再检查输出是否都保持 steps:null。
同时加入明确为零的例子。例如某记录明确写“仅初始化,训练更新次数为 0”,如果我们的字段定义就是已完成更新次数,那么零是已知值,不是缺失。
这种成对比较帮助检查规则:只改变“是否明确记录”,预期只有相应字段变化。它比随意改写十种开场白更接近任务需求。
但同一原始材料的所有变体应共享来源分组,划分时放在同一侧。否则训练见过其中九种,测试第十种,很可能高估迁移能力。
答案审核至少分三层
第一层是格式审核:能否解析,键名和类型是否符合要求,有没有多余文本。
第二层是语义审核:科学计数法有没有换错,字段有没有混淆,缺失和零有没有区别。
第三层是证据审核:答案里的每个非空值,是否真的由当前材料支持。
例如,下面答案能通过 JSON 解析:
{"model":"Cedar-30M","learning_rate":0.002,"steps":10000}如果材料写的是 2e-4,且没有步数,两个字段都错了。一个格式检查器不会自动发现这些错误。
对可机械核对的部分,尽量使用确定性规则。数值解析可以检查 2e-4 与 0.0002 的对应;缺失判断、多个候选和指代关系可能仍需人工审核或更强的语义检查。
不要让一个模型同时生成答案、自由解释答案为什么正确,再把这段解释当作独立证据。生成与自我赞同可能共享同一个错误。
合成数据是生产流程,不是来源标签
Self-Instruct 研究了从种子任务生成指令和实例,再过滤后用于微调的过程。其方法包含相似性与无效实例过滤;这说明“生成”之外还需要筛选,不代表所有留下的答案都经过事实证明。Self-Instruct,第 2 节
在我们的提取任务里,可以采用两种不同流程:
| 方式 | 怎么生成 | 主要风险 |
|---|---|---|
| 先材料,后答案 | 从已有材料生成提取结果 | 模型可能读错或补写 |
| 先结构,后材料 | 先造已知字段,再写包含它们的文本 | 文本可能没忠实表达原结构 |
第二种看起来天然有标准答案,但仍需审核。假设先设学习率为 0.0002,生成文本却误写成 0.002,原先的结构就不再是这段材料的正确答案。
比较稳妥的起点是:先生成明确的字段记录,按有限规则渲染一批材料,再逐步增加更自然的改写。对改写后的材料重新检查字段支持关系,而不只是检查原始结构是否完整。
这份流程适合构建边界清楚的教学数据,不代表它能覆盖真实实验记录的全部复杂性。真实样本仍有不可替代的作用。
让生成器补短板,而不是无限扩大容易的部分
假设当前模型对完整短句很好,却经常把未记录步数补成默认值。下一批数据应该重点覆盖缺失与干扰,而不是再生成大量三字段齐全的短句。
但补难例也要有比例控制。如果一轮训练几乎全是缺失样本,模型可能转向“什么都填 null”的捷径。覆盖表应同时记录样本数、有效回答 token 和抽样比例。
人工审核预算也要按风险分配:新模板、数值转换、冲突候选和长材料可以提高抽查比例。抽查通过率必须与抽样方式一起报告,不能把重点抽查的困难子集错误率当作全库错误率。
如果需要估计整体质量,应另做代表性抽样;如果目的是找最危险的错误,则可以定向检查。两个目标可以并存,但统计含义不同。
去重时保留什么区别
把完全相同的问答重复训练,会增加其权重。格式变化很小的近重复,也可能让某一种模板占据大部分训练机会。
不过,不能把所有相似输入都删掉。两条材料可能只差 0 与“未记录”,却恰好教模型区分零值和缺失;这种差别对任务有意义。
因此,去重要结合来源分组和任务差异:相同来源的机械改写不应跨划分,具有不同关键事实的对比样本则应有意识保留。
还要检查答案冲突。如果同一输入对应两个不同数值,先判断是规范允许多种答案,还是标注错误。不能随便保留一条就认为数据已经干净。
第一卷的去重与污染提供了来源和相似性处理的背景;SFT 还需要把任务规则与标签一致性一起纳入。
数据版本应能解释每次改动
一条记录至少关联原始来源、任务规范版本、生成方式、生成器版本或身份、审核结果及划分分组。不要把所有数据最后混成只有 prompt 与 answer 的文件后,丢掉这些信息。
元数据用于追踪,不应被误拼进模型提示。尤其是“正确答案已审核”“测试集”等字段,不能成为模型可见的捷径。
当发现一类错误时,版本记录应说明删除或修正了哪些样本,是否改变各类比例,是否需要重新生成相关 token 文件。只改一个数据文件名,不足以复现实验。
怎样证明新增数据有帮助
可以从一个固定基线做三组比较:原始人工样本、加入经审核的针对性合成样本、加入相同预算的普通合成样本。
这样不仅问“多数据是否有用”,还问“针对错误类型补数据是否更有效”。应预先选择固定预算的口径,例如有效目标 token,并同时报告独立来源数量和重复次数。
若固定训练轮数,数据变多也意味着计算变多,结果同时包含预算效应;这不是无效实验,但结论要按实际比较条件表达。
评价应使用独立来源材料,并包含原来做得好的部分。缺失处理改善但完整字段遗漏增加,是一种取舍,不能只报前者。
本篇给的是数据实验设计,没有把自动生成数量或规则通过率当成真实微调收益。
两个检查理解的问题
第一,先生成一份正确 JSON,再让模型把它写成实验记录,是否就不需要审核文本与答案的一致性?请构造一个会失败的例子。
第二,为修复补写问题,加入大量缺失字段样本之后,模型开始全部输出 null。你会怎样修改覆盖表、抽样比例和评价指标?
下一篇讨论全参数微调、LoRA 与量化微调。数据目标清楚以后,再选择用哪些参数承载这次学习。
文章概念网络
从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。
50 / 50 个节点 · 正文标记术语与关键词概念
指令数据怎样选和生成:任务覆盖、答案审核与合成数据
回到原文 ↗最后更新于 2026-10-20
引用本文
@article{2026-10-20-llm-training-sft-04-data,
author = {枫语},
title = {指令数据怎样选和生成:任务覆盖、答案审核与合成数据},
journal = {枫语},
year = {2026},
month = {oct},
url = {https://meiluosi.github.io/posts/2026-10-20-llm-training-sft-04-data/}
}