很多人第一次训小模型,卡在同一个问题上:网上说法要么是「几百条就够」,要么是「没几十万条别碰」。两种都对,也都没用,因为决定数据量的是任务类型、目标是「学会格式」还是「学会知识」、以及你的验收标准。这篇不给万能数字,给一套从任务出发估算样本量、再回头核验够不够的流程,你照着走一遍就能得出自己项目要准备多少条。
很多人第一次训小模型,卡在同一个问题上:网上说法要么是「几百条就够」,要么是「没几十万条别碰」。两种都对,也都没用。因为决定数据量的是任务类型、你的目标是让模型「学会格式」还是「记住知识」,以及你对错误率的容忍度。拿别人的条数当自己的目标,基本等于蒙。
这篇不给万能数字,给一套从任务出发估算样本量、再回头核验够不够的流程。你照着走一遍,就能得出自己这个项目到底要准备多少条,以及更重要的——什么时候该停手别再标了。
为什么没人能给你一个固定条数
数据量取决于三件事:任务复杂度、输出空间的开放程度、你对错误率的容忍度。同样是「从一段文本里抽字段」,输出是有限枚举和输出是自由句子,需要的量完全不同;容忍 5% 错和容忍千分之几错,也是两个量级。
- 任务复杂度
- 输入里需要考虑的线索越多、规则越交叉,需要的样本越多
- 输出空间开放程度
- 输出是固定几类还是自由文本,直接决定模型要学的是映射还是表达
- 错误率容忍度
- 验收标准越严,越需要在边界样本上做覆盖,而不是简单加总数
「多」和「少」的锚点必须来自你自己的验收标准。验收标准说不清,就先别定数据量——因为定出来也没法验证够不够。想知道别人托管方案在这三件事上的边界,可以去 /sites 的微调服务商目录对照着看。
先按任务类型分档,定个起跑线
把任务粗分三档,能帮你先估一个量级,再谈细节。注意这只是起跑线,不是承诺,边界情况是否覆盖得全才是后面真正决定成败的地方。
| 任务档位 | 典型任务 | 样本需求特征 | 主要风险 |
|---|---|---|---|
| 输出封闭 | 分类、抽取、格式化改写 | 需求最低,重点在覆盖边界 | 边界样本缺失,线上遇到就崩 |
| 生成型 | 摘要、翻译、特定口吻改写 | 需求更高,要覆盖长度与风格 | 风格漂移,长文本掉质量 |
| 事实型 | 记住术语、内部知识、领域规则 | 需求最高,且常不是堆量能解决 | 背下措辞但不泛化,更新困难 |
- 封闭输出类:先穷举所有可能的输入边界,每个边界至少留几条样本,重点在覆盖而不是总量
- 生成型:按长度分桶、按来源分域,每个桶都要有样本,别让某个长度区间是空的
- 事实型:先问一句「这条知识会不会变」,会变的知识优先考虑检索而不是训进模型
- 混合任务:拆开算,格式部分按封闭档估,知识部分单独估,别混成一个数字
三种档位里,事实型最容易被低估。很多团队以为多标几千条就能让模型记住一批术语,结果发现模型会复述标注时的说法,换个问法就答偏。这类需求建议先去 /tools 里的工具目录看看有没有现成的检索或知识库方案,再决定要不要训。
分清「教格式」和「灌知识」,两者算法完全不同
教格式和灌知识,不只是量级差别,而是学习机制的差别。格式是可归纳的映射,样本信息密度高;知识是事实集合,模型更容易记住措辞而不是内容本身。
| 维度 | 教格式 | 灌知识 |
|---|---|---|
| 核心目标 | 学会输入到输出的映射 | 记住并正确调用事实 |
| 样本特点 | 句式重复少、变体多 | 每条承载一条独立事实 |
| 常见误区 | 变体太少导致过拟合 | 以为加量就能提升泛化 |
| 更优路线 | 造变体、覆盖边界 | 外部知识库配合少量示例 |
如果是混合任务,务必拆开算:格式部分按教格式的思路,控制在能覆盖变体的量;知识部分要么加量要么改走外部知识库。想做后者,先去/站点核对当时的微调托管方案,能覆盖什么、不能覆盖什么,写得很直白。
- 拆任务把需求拆成「必须学会的格式」和「必须知道的事实」两列,逐条归类,归不进去的说明需求还没想清
- 判机制格式列按变体覆盖估量;事实列先判断这些事实会不会频繁变动
- 选路线会变的事实优先走检索,稳定的少量事实可以进样本,但要单独设一组验证样例
- 验边界用没见过的问法测事实列,能答对才算记住,答对措辞不算
用「覆盖度」而不是「总数」来估算
按总数估算很容易拍脑袋,按覆盖度估就具体得多。做法是先列出输入的所有变体维度:长度、语种、领域、噪声程度、边界情形,每个维度再列出可能的取值。
- 长度维度:短、中、长各留样本,长文本尤其容易被漏
- 语种维度:哪怕只做中文,也要考虑中英混排的情况
- 领域维度:核心领域必须密,边缘领域可以稀但别为零
- 噪声维度:错别字、口语、标点混乱的输入要单独留样本
- 边界维度:空输入、超长输入、格式残缺的输入,每种都别空着
把维度取值叉乘,得到一个理论组合数,再按实际业务分布做加权,得到一个下限。然后乘一个冗余系数应对清洗损耗。这个系数别拍,用你自己数据的历史损耗率反推,站内 /price-watch 里也有各家的调用成本追踪,可以帮你倒推预算量级。
清洗损耗通常不低,标完还要留出验证集和测试集,别把全部预算押在训练集上。经验做法是训练集占大头,验证和测试各自单独划分,且测试集要留到最后一次都不碰。
算完条数,还得算人力和时间账
自标数据的真实瓶颈不是第一轮标注,而是标注一致性和返工。第二轮返工常常比第一轮还久,因为要重新对齐口径。
| 环节 | 容易低估的点 | 提前动作 |
|---|---|---|
| 制定规范 | 边界情形写不清 | 先标一批小样本,把争议点列出来再定稿 |
| 多人协作 | 不同人对同一句判断不同 | 设抽检比例,定期做一致性核对 |
| 返工 | 错误集中在某类样本 | 先按错误类型分组,再决定是否全量重标 |
一个通用做法:先用少量样本跑一次训练,看模型在验证集上的错误类型。如果错误集中在同一类样本,加量没用,要先修标注口径或补该类样本。这一步能省掉一大半无谓标注。一家 5 人小团队做客服改写任务,如果错误全出现在长对话上,那就先补长对话样本,而不是把短句样本翻倍。
训练完怎么判断数据够不够
训完不是看训练集上的表现,而是看验证集里的错误形态。错误类型比错误率更有信息量。
- 格式类错误:该输出结构化结果却输出自由文本,说明格式样本的变体不够
- 覆盖类错误:某类输入完全没表现过,说明维度有空白,补样本而不是加总数
- 知识类错误:答得似是而非,说明事实没进模型或进了但没泛化,优先走检索
- 稳定性错误:同样输入两次结果差很多,通常是样本太少或标注矛盾
看训练曲线也有用:训练集一直好、验证集不动,通常是样本多样性不够而不是数量不够。这种情况继续加同类样本,收益很低。反过来,两边都差但差距不大,多半是总量真不够。
更划算的做法是把线上真实输入收集回来做增量。比起一次性把数据量堆到很大,按错误类型分批补充,投入产出比更高。站内 /rankings 里有按任务类型整理的对比参考,可以帮你判断同类项目一般处在什么量级。
几个高频踩坑顺序,照着排查
数据不够用时,排查顺序比努力更重要。顺序反了,会白标很多数据。
- 先查重复做近似重复检测,重复率高时加量几乎不涨效果,先去掉重复再谈其他
- 再查标注一致性抽一批样本做交叉核对,多人协作尤其要看,口径不一致等于给模型喂矛盾信号
- 再查覆盖度按维度表核对每类输入是否有样本,空白维度补上,比整体加量更有效
- 最后才怀疑总量前三步都查完还差,才是真的量不够,这时候加量方向也清楚了
还要提醒一句:上面这套判断不适用于那些数据本身由外部系统产出的场景,比如从日志自动生成样本。那种情况瓶颈在样本质量过滤,不在数量估算,得换一套思路。
数据量不是目标,覆盖住你的验收标准才是目标。下一步拿你的任务按上面的档位和维度表过一遍,先估一个下限,再跑一次小样本验证,然后到站内微调方案与成本页面核对当时的真实数字,别让估算停在感觉上。→
常见问题
小模型训练是不是一定要成千上万条素材?
不一定。教格式、做分类这类封闭输出任务,少量高质量样本就可能有明显效果;需要掌握领域事实或开放生成的任务,样本需求会高很多。关键是先明确验收标准,再按任务类型估,而不是照搬别人的条数。
几百条样本能训出可用的小模型吗?
要看任务。输出空间封闭、变化有限的任务有机会,但前提是样本覆盖了主要边界情况,且标注一致。输出开放或需要记住专有知识的任务,几百条通常不够,这时更该考虑检索增强或换更大的基座。
数据量不够时,最先该做什么?
先别急着标更多。检查现有数据里有多少重复和近似重复,再看错误是否集中在某几类输入。多数情况下,修标注口径、补覆盖盲区,比单纯增加条数收益更大。
怎么知道自己估的数据量是对的还是错的?
用一小部分数据先训一版,看验证集错误类型:格式类错误说明还没学会,覆盖类错误说明没见过这类输入。根据错误类型决定是加量还是补多样性,再决定要不要扩大标注规模。