小模型训练需要成千上万的素材

模型与算力

帮你判断小模型训练到底需要多少素材,给出按任务类型估算数据量的思路和可执行的清点步骤。

很多人第一次训小模型,卡在同一个问题上:网上说法要么是「几百条就够」,要么是「没几十万条别碰」。两种都对,也都没用,因为决定数据量的是任务类型、目标是「学会格式」还是「学会知识」、以及你的验收标准。这篇不给万能数字,给一套从任务出发估算样本量、再回头核验够不够的流程,你照着走一遍就能得出自己项目要准备多少条。

很多人第一次训小模型,卡在同一个问题上:网上说法要么是「几百条就够」,要么是「没几十万条别碰」。两种都对,也都没用。因为决定数据量的是任务类型、你的目标是让模型「学会格式」还是「记住知识」,以及你对错误率的容忍度。拿别人的条数当自己的目标,基本等于蒙。

这篇不给万能数字,给一套从任务出发估算样本量、再回头核验够不够的流程。你照着走一遍,就能得出自己这个项目到底要准备多少条,以及更重要的——什么时候该停手别再标了。

为什么没人能给你一个固定条数

数据量取决于三件事:任务复杂度、输出空间的开放程度、你对错误率的容忍度。同样是「从一段文本里抽字段」,输出是有限枚举和输出是自由句子,需要的量完全不同;容忍 5% 错和容忍千分之几错,也是两个量级。

任务复杂度
输入里需要考虑的线索越多、规则越交叉,需要的样本越多
输出空间开放程度
输出是固定几类还是自由文本,直接决定模型要学的是映射还是表达
错误率容忍度
验收标准越严,越需要在边界样本上做覆盖,而不是简单加总数

「多」和「少」的锚点必须来自你自己的验收标准。验收标准说不清,就先别定数据量——因为定出来也没法验证够不够。想知道别人托管方案在这三件事上的边界,可以去 /sites 的微调服务商目录对照着看。

先按任务类型分档,定个起跑线

把任务粗分三档,能帮你先估一个量级,再谈细节。注意这只是起跑线,不是承诺,边界情况是否覆盖得全才是后面真正决定成败的地方。

任务档位典型任务样本需求特征主要风险
输出封闭分类、抽取、格式化改写需求最低,重点在覆盖边界边界样本缺失,线上遇到就崩
生成型摘要、翻译、特定口吻改写需求更高,要覆盖长度与风格风格漂移,长文本掉质量
事实型记住术语、内部知识、领域规则需求最高,且常不是堆量能解决背下措辞但不泛化,更新困难
  • 封闭输出类:先穷举所有可能的输入边界,每个边界至少留几条样本,重点在覆盖而不是总量
  • 生成型:按长度分桶、按来源分域,每个桶都要有样本,别让某个长度区间是空的
  • 事实型:先问一句「这条知识会不会变」,会变的知识优先考虑检索而不是训进模型
  • 混合任务:拆开算,格式部分按封闭档估,知识部分单独估,别混成一个数字

三种档位里,事实型最容易被低估。很多团队以为多标几千条就能让模型记住一批术语,结果发现模型会复述标注时的说法,换个问法就答偏。这类需求建议先去 /tools 里的工具目录看看有没有现成的检索或知识库方案,再决定要不要训。

分清「教格式」和「灌知识」,两者算法完全不同

教格式和灌知识,不只是量级差别,而是学习机制的差别。格式是可归纳的映射,样本信息密度高;知识是事实集合,模型更容易记住措辞而不是内容本身。

维度教格式灌知识
核心目标学会输入到输出的映射记住并正确调用事实
样本特点句式重复少、变体多每条承载一条独立事实
常见误区变体太少导致过拟合以为加量就能提升泛化
更优路线造变体、覆盖边界外部知识库配合少量示例

如果是混合任务,务必拆开算:格式部分按教格式的思路,控制在能覆盖变体的量;知识部分要么加量要么改走外部知识库。想做后者,先去/站点核对当时的微调托管方案,能覆盖什么、不能覆盖什么,写得很直白。

  1. 拆任务把需求拆成「必须学会的格式」和「必须知道的事实」两列,逐条归类,归不进去的说明需求还没想清
  2. 判机制格式列按变体覆盖估量;事实列先判断这些事实会不会频繁变动
  3. 选路线会变的事实优先走检索,稳定的少量事实可以进样本,但要单独设一组验证样例
  4. 验边界用没见过的问法测事实列,能答对才算记住,答对措辞不算

用「覆盖度」而不是「总数」来估算

按总数估算很容易拍脑袋,按覆盖度估就具体得多。做法是先列出输入的所有变体维度:长度、语种、领域、噪声程度、边界情形,每个维度再列出可能的取值。

  • 长度维度:短、中、长各留样本,长文本尤其容易被漏
  • 语种维度:哪怕只做中文,也要考虑中英混排的情况
  • 领域维度:核心领域必须密,边缘领域可以稀但别为零
  • 噪声维度:错别字、口语、标点混乱的输入要单独留样本
  • 边界维度:空输入、超长输入、格式残缺的输入,每种都别空着

把维度取值叉乘,得到一个理论组合数,再按实际业务分布做加权,得到一个下限。然后乘一个冗余系数应对清洗损耗。这个系数别拍,用你自己数据的历史损耗率反推,站内 /price-watch 里也有各家的调用成本追踪,可以帮你倒推预算量级。

清洗损耗通常不低,标完还要留出验证集和测试集,别把全部预算押在训练集上。经验做法是训练集占大头,验证和测试各自单独划分,且测试集要留到最后一次都不碰。

算完条数,还得算人力和时间账

自标数据的真实瓶颈不是第一轮标注,而是标注一致性和返工。第二轮返工常常比第一轮还久,因为要重新对齐口径。

环节容易低估的点提前动作
制定规范边界情形写不清先标一批小样本,把争议点列出来再定稿
多人协作不同人对同一句判断不同设抽检比例,定期做一致性核对
返工错误集中在某类样本先按错误类型分组,再决定是否全量重标

一个通用做法:先用少量样本跑一次训练,看模型在验证集上的错误类型。如果错误集中在同一类样本,加量没用,要先修标注口径或补该类样本。这一步能省掉一大半无谓标注。一家 5 人小团队做客服改写任务,如果错误全出现在长对话上,那就先补长对话样本,而不是把短句样本翻倍。

训练完怎么判断数据够不够

训完不是看训练集上的表现,而是看验证集里的错误形态。错误类型比错误率更有信息量。

  • 格式类错误:该输出结构化结果却输出自由文本,说明格式样本的变体不够
  • 覆盖类错误:某类输入完全没表现过,说明维度有空白,补样本而不是加总数
  • 知识类错误:答得似是而非,说明事实没进模型或进了但没泛化,优先走检索
  • 稳定性错误:同样输入两次结果差很多,通常是样本太少或标注矛盾

看训练曲线也有用:训练集一直好、验证集不动,通常是样本多样性不够而不是数量不够。这种情况继续加同类样本,收益很低。反过来,两边都差但差距不大,多半是总量真不够。

更划算的做法是把线上真实输入收集回来做增量。比起一次性把数据量堆到很大,按错误类型分批补充,投入产出比更高。站内 /rankings 里有按任务类型整理的对比参考,可以帮你判断同类项目一般处在什么量级。

几个高频踩坑顺序,照着排查

数据不够用时,排查顺序比努力更重要。顺序反了,会白标很多数据。

  1. 先查重复做近似重复检测,重复率高时加量几乎不涨效果,先去掉重复再谈其他
  2. 再查标注一致性抽一批样本做交叉核对,多人协作尤其要看,口径不一致等于给模型喂矛盾信号
  3. 再查覆盖度按维度表核对每类输入是否有样本,空白维度补上,比整体加量更有效
  4. 最后才怀疑总量前三步都查完还差,才是真的量不够,这时候加量方向也清楚了

还要提醒一句:上面这套判断不适用于那些数据本身由外部系统产出的场景,比如从日志自动生成样本。那种情况瓶颈在样本质量过滤,不在数量估算,得换一套思路。

数据量不是目标,覆盖住你的验收标准才是目标。
下一步拿你的任务按上面的档位和维度表过一遍,先估一个下限,再跑一次小样本验证,然后到站内微调方案与成本页面核对当时的真实数字,别让估算停在感觉上。

常见问题

小模型训练是不是一定要成千上万条素材?

不一定。教格式、做分类这类封闭输出任务,少量高质量样本就可能有明显效果;需要掌握领域事实或开放生成的任务,样本需求会高很多。关键是先明确验收标准,再按任务类型估,而不是照搬别人的条数。

几百条样本能训出可用的小模型吗?

要看任务。输出空间封闭、变化有限的任务有机会,但前提是样本覆盖了主要边界情况,且标注一致。输出开放或需要记住专有知识的任务,几百条通常不够,这时更该考虑检索增强或换更大的基座。

数据量不够时,最先该做什么?

先别急着标更多。检查现有数据里有多少重复和近似重复,再看错误是否集中在某几类输入。多数情况下,修标注口径、补覆盖盲区,比单纯增加条数收益更大。

怎么知道自己估的数据量是对的还是错的?

用一小部分数据先训一版,看验证集错误类型:格式类错误说明还没学会,覆盖类错误说明没见过这类输入。根据错误类型决定是加量还是补多样性,再决定要不要扩大标注规模。

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