做模型平台的人常遇到这种局面:训练集堆了一大堆,验证集随手从训练集里切一块,测试集干脆省掉,上线后效果一路飘红却查不出问题出在哪。这篇不讨论具体某个模型要多少条数据,而是按「训练 / 验证 / 测试」三种用途分工,给出每类数据集该覆盖什么、怎么切分、什么情况下这套分法不适用,最后附一份可以直接照着走的排查顺序。
做模型平台的数据工程师,最常见的翻车不是数据不够多,而是三种数据集没分清。训练集堆了一屋子,验证集随手从训练集里切一块,测试集干脆省掉,等上线后效果一路飘红,回头查却找不到问题出在哪一环。
这篇不讨论某个具体模型要喂多少条数据,那种数字每个项目都不一样,真要看参考量级,去站内资料库页面核对当时的记录。这里只按「训练 / 验证 / 测试」三种用途分工,讲每类该覆盖什么、怎么切、什么时候这套分法不适用,最后给一份能照着走的排查顺序。
先按用途分三类,别按文件格式分
三类数据集的分工很明确:训练集负责让模型学到数据分布;验证集负责在训练过程中做选择,比如早停、挑检查点、调超参;测试集负责在完全不参与任何决策的前提下,给出一次最终判断。三者混在一起,后果是很具体的。
- 验证集被反复用来调参,等于变成第二个训练集,最终指标虚高,线上表现打脸
- 测试集一旦被看过、被拿来改模型,就彻底失去意义,只能重新划一批
- 数据集不是按 txt / jsonl / parquet 分家,而是同一个池子里切出三份,分区方式是先分层再切,不是随机抽
- 如果你的场景只是提示词调试或 RAG 检索质量验证,根本不需要训练集,一份固定的评测题集加一份留出集就够了
训练集:覆盖度比条数更重要
很多人上来就先问「要多少条」。更该先问的是「覆盖了哪些子任务」。先把平台要支撑的能力拆成若干子任务,每个子任务对应训练数据里的一类样本,避免某一类被另一类淹没。样本条数是可以补的,覆盖缺口往往补不上。
- 分层统计
- 按长度、语种、领域、格式分别做分布统计,看哪一档明显偏少
- 近似去重
- 不只是字符串完全相同的去重,语义相近、模板套出来的样本也要识别出来
- 标注一致性抽样
- 同一批样本抽一部分复核,出现互相矛盾的标签,模型学到的就是噪声
去重这件事有个顺序要求:必须在切分之前做完,而且要做近似去重。否则训练集和验证集之间会残留近重复样本,验证指标看起来很好,其实是在背答案。长尾缺口靠重复堆量补不上,只能靠定向补充,补的时候记得记录来源,方便后面追溯。
验证集与测试集:怎么切、切多少、怎么用
| 对比项 | 验证集 | 测试集 |
|---|---|---|
| 数据来源 | 从训练分布里切 | 尽量贴近真实上线分布 |
| 主要用途 | 训练中做选择:早停、选点、调参 | 最终一次性判断 |
| 样本特点 | 覆盖各类子任务为主 | 包含边缘、少见、异常样本 |
| 使用次数 | 可以反复使用 | 原则上只跑一次,跑了留痕 |
| 被污染的后果 | 指标虚高 | 直接作废,需重划 |
- 切分前先分层按任务类型、长度档位、来源分别分层,再在每层内部切,避免某一类样本整体落到测试集或全部留在训练集
- 测试集要含边界样本空输入、超长输入、格式错误输入都要放进去,否则线上第一批坏例子就能打穿平台
- 封存与留痕记录谁在什么条件下跑过测试集,被反复使用过的测试集应当降级为验证集,并重新划一批新的测试集
- 小数据量的替代方案数据总量只有几百条量级时,硬切三份会让每份都太少,此时更适合交叉验证,或者只保留一份留出集
不适用的情况要说清楚:这套三分法默认你有一定数据量、且任务分布相对稳定。如果你的任务分布每周都在变,或者平台主要做的是在线检索增强而非参数训练,那么重点应该放在滚动更新的评测题集上,而不是死守固定的训练验证测试划分。
落地清单:入库前按这个顺序过一遍
上面讲的是原则,真正干活时需要一份可执行的顺序。下面这五步建议固化进你的数据流水线,每一步都留下记录,后面出问题时才有东西可查。
- 第一步定口径:写清每条样本的字段含义、标签定义、允许的输入长度范围,落到一份数据说明里,后续所有争论回到这份说明
- 第二步去重与清洗:完全重复、近似重复、乱码、截断样本分别处理,并记录各类丢弃数量,脏数据比例本身就是质量信号
- 第三步分层切分并冻结:切完立刻给三份数据集打版本号与哈希,此后任何改动都产生新版本,不覆盖旧版本
- 第四步建回归集:把线上真实出错的样本脱敏后定期并入测试集的新版本,形成能反映真实问题的回归题库
- 第五步定期复核:模型和数据都在变,隔一段时间重新看测试集是否还有区分度,题目全部被答对时就要补更难的新样本
这套动作跟具体用什么模型无关,也跟数据量级无关,它解决的是「出了问题能定位」这件事。至于各类平台在数据口径、评测方式上的差异,可以到站内资料库页面横向对照,别只盯一家。
下一步把上面五步对照你现在流水线缺哪一环,然后去站内指南中心找对应的数据准备与评测流程文档补上。→常见问题
验证集和测试集到底能不能用同一份?
不能。验证集会被反复用来做选择,用多了它就染上训练信息的味道,指标会偏乐观。测试集的作用是给一次不参与任何决策的判断,一旦你根据它的结果去改模型,它就退化成验证集了,这时候应该重新划一份新的留出集。
训练数据是不是越多越好?
不一定。数据量涨到一定程度后,边际收益取决于覆盖度和标注质量,而不是条数。分布有明显缺口、标签互相打架时,继续堆量只会把噪声放大。先做分布统计和抽样复核,确认这两项没问题,再考虑扩量。
没有预算做人工标注怎么办?
可以先用规则或模型生成初标,再抽样人工复核,重点核对模型置信度低的那部分样本。同时保留一批完全人工标注的「金标准」小集,用来校验自动标注的整体偏差。注意自动标注的偏差会原样传进模型,抽样复核不能省。