大模型微调训练数据怎么准备

模型与算力

把微调训练数据从采集、清洗到格式规范的整条准备链路拆成可执行清单,给出验收标准与常见坑的排查顺序。

微调跑不起来、效果不达预期,十次里有七八次问题出在数据上,而不是超参或显卡。你手上也许已经攒了一堆日志、客服记录、标注表格,但真到写训练脚本时才发现字段对不上、样本重复、答案长短不一。这篇按采集、清洗、格式规范三段给你一套可照做的流程和自检清单,每一步都写清判断标准和不适用的情形。

微调跑不起来、效果不达预期,十次里有七八次问题出在数据上,而不是超参或显卡。你手上也许已经攒了一堆日志、客服记录、标注表格,但真到写训练脚本时才发现字段对不上、样本重复、答案长短不一。这篇按采集、清洗、格式规范三段给你一套可照做的流程和自检清单,每一步都写清判断标准和不适用的情形。

先说一个容易被忽略的前提:数据准备不是一次性动作,而是跟着任务定义反复收敛的过程。很多团队一上来就找数据,采了几万条之后才发现要教的东西根本不在这些样本里。所以下面每一节都会给一个「先确认什么、再动手做什么」的顺序,你可以照着走,也可以在任意一步回头改前一步的约定。

先想清楚要教什么,再决定去哪采

从任务定义倒推数据形态,比先找数据再想用途有效得多。要教模型固定输出结构(比如统一返回某种字段组合)、固定话术风格(比如客服口吻)、还是补一块它本来不会的知识,这三类对应的数据来源和量级完全不同。前两类几十到几百条高质量样本往往就能看出趋势,第三类则需要覆盖足够多的知识点变体,量级判断要去站内模型资料库核对当时的说明。

  • 已有业务日志与工单:最贴近真实分布,但要先脱敏和去噪
  • 人工标注:质量最可控,成本最高,适合补关键场景的短板
  • 模型批量生成后人工筛选:能快速铺量,但必须留人工复核环节,否则会把坏习惯一起学进去
  • 公开数据集:适合打底,注意许可与领域匹配度,别直接混进业务数据里

采集渠道建议按可得性排序,而不是按理论质量排序。先把最容易拿到的那一档跑通一遍流程,验证格式和清洗规则,再决定要不要为更贵的数据源付费。

动手采之前先写一页约定

字段名、语气、是否允许多轮、答案长度区间,这些先写成一页纸的约定,避免不同人采出来的样本没法合到一个文件里。约定里最好带一两个正例和反例,新人照着看就能上手。

清洗不是删空行,是拿掉会教坏模型的那部分

清洗的目标不是让文件变干净,而是让留下的每一条样本都值得模型学。下面这张对照表把常见脏数据类型和对应动作列出来,你可以直接当检查清单用。

脏数据类型判断标准处理动作
完全重复内容逐字相同或仅差空白直接删除,保留一份
语义近似表达不同但意图和答案几乎一致相似度粗筛后人工抽看一批再决定
答案错误或矛盾同一问题出现互相冲突的标签标出冲突组,人工裁定或整组丢弃
含敏感信息出现可定位到个人的字段脱敏或整条剔除,不要靠改写硬留
格式噪声夹带无关符号、截断的半句话按规则清理,清不掉的直接丢

去重要分两级:完全重复的样本直接删,语义近似的重复用相似度粗筛后再人工看一批。重复样本会让模型对某个句式过度自信,表现成「问什么都往那个模板上靠」。

长度分布也要管

把过长和过短的样本单独捞出来看一眼。长度极端分散会让截断逻辑变得难以处理,也容易让模型学出不该有的结尾习惯。判断标准可以简单设成:超过某分位的样本单独审查,低于某分位的样本确认是否信息量不足。

  1. 先做统计体检跑一遍样本数、长度分布、字段缺失率、重复率,把异常值位置记下来,这是后面所有清洗动作的基线
  2. 按表清理脏数据对照上面的对照表逐类处理,每类处理完记录删了多少、为什么删,方便回溯
  3. 切出验证集从清洗后的数据里按比例切,保证和训练集同一个分布;只在训练集上判断效果,很容易自我感觉良好
  4. 复核关键样本如果任务对少数罕见样本特别敏感,通用清洗规则可能把关键样本删掉,这类要单独保留并人工确认

格式统一到训练脚本能直接吃下去

格式这一步最常见的翻车方式,是把拼接工作手写在数据里。特殊分隔符、系统提示这些应该交给统一的模板函数,换模型时只改一处。对话类任务至少要有明确的角色字段和内容字段,指令类任务要有输入与输出成对的字段,别把两种塞进同一个文件靠脚本猜。

角色字段
标明这条内容是系统、用户还是助手,不要靠位置推断
内容字段
存放实际文本,避免把模板符号混进来
输入输出对
指令类任务的基本单位,缺一边的样本直接剔除
模板函数
集中处理分隔符与提示拼接,训练脚本只调用不内联

训练前先做一次干跑:用少量样本跑通加载、分词、截断与标签对齐,确认没有错位、没有把答案位置算进损失、没有意外丢样本。干跑不通过就别急着开全量训练,否则跑几小时才发现问题,排查成本会高很多。

版本与切分要留痕

数据文件带可追溯的版本标识,训练、验证切分方式记录下来。否则复现不出结果时,你连「上次用的是哪份数据」都说不清,只能靠猜。

# 干跑时至少打印这几项,确认无误再全量
# 样本数 / 平均长度 / 字段缺失数 / 标签对齐是否正常
# 具体命令按你项目的加载脚本调整,重点是把检查项固定下来

一套上线前的自检顺序

数据准备没有「绝对干净」的终点,只有「当前任务够用」的状态。下面这套顺序按排查成本从低到高排列,出问题时照这个顺序走,能省掉大量来回试错。

  • 先看字段与模板对不对:格式错位是最高频的低级错误
  • 再看样本量与任务复杂度是否匹配:太少学不会,太杂学偏
  • 然后看重复率和长度分布:重复多、长度散,效果会虚高或抖动
  • 最后才怀疑超参和学习率:前面三层没问题,再动训练配置

条件允许的话做一次对照实验:同一套超参分别跑清洗前与清洗后的数据,看验证指标差异。如果几乎没差别,说明清洗没抓对痛点,回头重新定清洗规则,而不是继续加数据。

抽样人工过一遍仍然是性价比最高的一步:随机抽若干条从头读到尾,检查是否符合之前定的标签规范。这一步能拦住大半低级错误,而且花的时间远比返工训练少。至于各模型的微调支持情况与接口差异,到站内模型资料库核对当时的说明,别凭记忆写脚本。

下一步准备数据的同时,把训练侧的价格与额度因素一起纳入判断:同样一批数据跑不同接口,成本结构差别很大,值得先看一眼再决定跑几轮。

常见问题

微调训练数据到底要多少条才够?

没有通用数字。任务越窄、输出越固定,需要的量越少;想让模型学一个新领域的表达方式,通常要多得多。更实际的做法是先拿一小批跑通流程,看验证效果再决定加量,具体量级判断可以去 /training 和 /stacks/fine-tuning 对照同类型任务的常见做法。

可以用模型自己生成的数据来微调吗?

可以,但必须加人工筛选。纯合成数据容易把原模型的错误、口头禅和格式习惯一并固化进去,越训越偏。建议合成后人工过一遍、只保留质量达标的部分,并且掺入一定比例的真实业务样本,避免分布跑偏。

数据清洗到什么程度算够了?

没有一个绝对标准,判断依据是继续清洗是否还能带来验证指标的提升。一般到重复率很低、明显错误样本基本清空、长度分布没有极端离群值就可以停手。再往下抠细节,收益往往不如把精力放到样本覆盖面上。

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