训练集、验证集和测试集的数据来源

模型与算力

讲清训练集、验证集、测试集的数据分别从哪来、怎么采、什么来源不能用,并给出一套可执行的采集与留出检查顺序。

做微调、做评测、或者只是想搞个自己的数据集时,最容易卡在第一步:数据到底从哪来。公开语料、内部日志、爬取、买标注、模型合成,每种来源的坑都不一样,混着用还容易出现训练集和测试集其实是同一批内容。这篇按来源和采集方式拆开讲,给一套能照着走的采集与留出清单。

做微调、做评测,或者只是想攒一份自己的数据集,最容易卡在第一步:数据到底从哪来。公开语料、内部日志、爬取、买标注、模型合成,每种来源的坑都不一样,混着用还容易出现训练集和测试集其实是同一批内容的情况。

这篇按来源和采集方式拆开讲,给一套能照着走的采集与留出清单。核心思路很简单:先把三个集合各自要回答什么问题想清楚,再去挑来源,而不是先抓一堆数据回来再想着怎么切。

三个集合的来源不是随便切的,先想清各自要回答什么问题

训练集要解决的是「让模型见到足够多的同类样本」,所以来源可以宽,但必须和真实使用场景同分布。什么叫同分布、过拟合是怎么回事,动手前先去站内把这类基础词对一遍,比事后调参划算得多。

验证集要解决的是「训练过程中做选择」,来源必须与训练集同分布但互不重叠,常见做法是从同一批已采集数据里按时间或按主体留出。不能训练到一半觉得验证集不够,临时上网另找一批,那分布就和训练集对不上了。

训练集来源
可以宽,但要保证和真实使用场景同分布,宁窄勿杂
验证集来源
从同一批已采集数据里留出,和训练集同分布但不重叠
测试集来源
最好是采集渠道、时间都不同的独立批次,结论才对外可信
内部看趋势的场合
同一批留出数据也能凑合,但别把结论写成模型能力上限
集合它要回答的问题来源挑选标准
训练集让模型见到足够多同类样本来源宽,但需与真实场景同分布
验证集训练过程中做选择与训练集同分布、不重叠,同批留出
测试集最后一次给结论采集渠道或时间独立的另一批数据
补长尾的合成集补格式和长尾样本只补训练,别同时拿去当测试集

公开语料:怎么找、怎么筛、哪里最容易踩坑

常见路子就那么几条:公开数据集、开源仓库、公开文档、论坛问答。先说许可这一关,能不能用于训练、能不能商用,边界拿不准的直接不进训练集,别抱侥幸。合规口径可以到站内安全相关页面核对,不同来源的授权差异比想象中大。

  • 清洗顺序固定:整篇去重、句子级去重、去模板化内容、去机器翻译腔、去过期信息,顺序别颠倒。
  • 按时间切比按随机切更稳:早期内容训练、较晚内容验证,能反映拿旧数据预测新情况的效果。
  • 语种和领域对齐真实场景,中文任务拿英文语料凑数,指标好看但上线就掉。
  • 去重不到位是最常见的自坑方式,同一段内容既进训练集又进验证集,指标虚高。

去重和切分有个先后关系:一定要先去重、再切分。反过来做,等于切完之后依然存在跨集合重复,白忙一场。至于指标虚高到底差多少,不同任务差别很大,可以去站内基准页面看同类任务当时的差异区间做参照。

内部数据与合成数据:见效快,但留出方式完全不同

内部日志、工单、客服对话这类来源,最大优势是同分布,最大风险是含个人信息和客户机密。脱敏必须在入库前做,不能等切完数据集再补,否则训练集和验证集里可能残留同一个用户的痕迹。

切分方式也要换:内部数据要按主体留出,而不是按记录留出。同一个用户、同一个项目、同一份文档的记录整组留出,避免模型在验证集上「见过这张脸」,把记忆当成泛化。

留出方式适用来源风险
按记录随机留出公开语料,段落间彼此独立同主体记录会跨集合,指标虚高
按时间留出日志、文档等有时间顺序的数据时间边界附近的内容容易相似
按主体整组留出工单、客服对话、用户行为主体少时验证集条数会偏少
按来源渠道留出多渠道采集的数据渠道间分布差异大,需单独确认

合成数据适合补长尾和格式对齐,但别用它同时造训练集和测试集。测试集里混了合成样本,测出来的是模型对合成分布的适应度,不是真实任务能力,这个结论对外讲会很尴尬。合成比例要控制,来源清单里写清哪部分是机器生成、用哪个模型生成的,后面排查效果异常时这是关键线索。

一次可执行的采集与留出检查顺序

  1. 先定任务再定条数写清目标任务和输入输出形态,再决定每个集合大概需要多少条。数量没有统一标准,可以先从几百条起步把流程跑通,再按效果补量。
  2. 分渠道采集并打四列标签来源、采集时间、是否合成、是否含个人信息,四列都要有。后面切分、排查、合规回溯全靠这四列,缺一列都会返工。
  3. 先去重再切分整篇和句子级去重都做完再切。切分比例不用背固定数字,参考站内训练相关页面的说明口径,按任务调。
  4. 做一次污染自检从测试集随机抽若干条,在训练集里做近似匹配,命中就说明切分有漏。命中率高的话,回到去重那一步重做。
  5. 记录并冻结版本把每个集合的来源清单、条数、切分方式记下来存档,后面换数据或对比效果时才有基线,别只留在聊天记录里。

这套流程走完再开训,能省掉后面大量返工。判断标准也很直白:如果测试集里能随手找到和训练集高度相似的样本,或者验证集结果明显好于测试集,那基本就是切分或去重出了问题,先查数据再调模型。

数据来源决定结论的可信度,切分方式决定结论有没有意义,两件事都做对,模型才有讨论的价值。
下一步把你要用的来源清单对照站内价格与模型资料库捋一遍,看看同类任务实际用的数据量和采集口径,再决定自己的第一步。

常见问题

没有条件自己采数据,能不能全用公开数据集?

可以起步,但要接受两个限制:一是公开数据集往往已被大量模型见过,测出来的分数偏高;二是领域和你实际场景未必对得上。做法是公开集做训练,自己攒一小批真实场景数据当验证和测试,哪怕只有几百条,结论也比纯公开集可信。

训练集、验证集、测试集能不能用同一批数据随机切?

小规模、同质化不强的任务能凑合,但只要有重复内容、模板化文本或同一用户的多条记录,随机切就会串味。更稳的是按主体或时间整组留出,让三个集合在来源上就分开,尤其测试集最好来自不同渠道或不同时间段。

合成数据算不算靠谱来源?

能补长尾和统一格式,但不能当主力,更不能同时用来造训练集和测试集。比较稳的用法是拿它扩充少数类或对齐输出格式,测试集仍用真实采集的数据。来源清单里必须标明哪些是合成、用什么生成的,否则后面效果异常很难定位。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。