很多人卡在第一步:手里有一堆文档或聊天记录,却不知道怎么变成能喂给微调的数据。数据准备没做好,后面调参、评测全白费。这篇按顺序讲清三件事:先想明白任务和数据从哪来,再对齐成训练要的格式,最后清洗去重、留出验证集。
微调模型最容易被低估的一步就是数据准备。很多人手里攒了一堆客服记录、文档或者现成问答,觉得整理一下就能喂进去,结果训练完发现模型学会了复读、乱答,甚至把错别字当成正确答案。问题基本都出在数据上,而不是模型或参数。
这篇按顺序讲清楚四件事:先想明白任务和数据从哪来,再把样本对齐成训练要的格式,然后清洗去重,最后切分并人工抽检。每一步都给判断标准和可执行动作,照着做能少走不少弯路。整套流程的通用性和坑点,可以先到 指南中心(/guides) 看看相关专题,再动手。
先定任务,再定数据从哪来
任务没定清楚就开始攒数据,是最常见的翻车方式。分类、抽取、改写、问答这几种任务,样本长什么样完全不一样:分类是「文本-标签」,抽取是「原文-结构化结果」,问答是「问题-答案」。先写下你要模型学会的那一件事,再决定需要什么形态的样本。
- 任务定义
- 用一句话写清输入是什么、输出是什么,越具体越好
- 数据来源
- 业务日志、人工整理的标准问答、文档加人工改写的答案,优先级从高到低
- 长尾覆盖
- 稀有但真实的输入要专门收集,否则模型上线就懵
- 已有业务日志:量大但噪声多,要先筛再改,不能直接拿来用;
- 人工整理的标准问答:质量最高但成本高,适合先做小批量种子集;
- 文档加人工改写:用真实文档当输入、人工写标准答案,适合抽取和改写任务;
- 原始聊天记录:不建议直接用,里面模型或客服的错误会被当成正确答案学进去;
- 样本量门槛:先不求多,先覆盖真实场景的长尾,具体门槛到 模型资料库(/rankings) 看当时的口径。
什么情况下这条流程不适用
如果你只是想让模型学会统一的输出风格,而不是新增知识,样本可以只覆盖格式转换类的例子,不必强求覆盖所有业务长尾。但涉及事实性问答、抽取类任务,长尾覆盖就是硬要求,缺了哪类输入,上线就会在哪类输入上出错。
对齐格式:训练用什么模板,数据就长什么样
每个平台对数据字段结构的要求不完全一样,先把目标平台要求的字段确认清楚,再动手整理。常见结构有两种:一种是「输入-输出」两列,简单直接;另一种是带角色标记的多轮结构,比如 system、user、assistant 这样分段。选哪种取决于你的任务需不需要上下文。
| 字段 | 要求 | 常见错误 |
|---|---|---|
| 输入/问题 | 必填,不能为空 | 混进了答案片段 |
| 输出/答案 | 必填,格式统一 | 夹带提示词或解释性废话 |
| 角色标记 | 多轮结构才需要 | 轮次边界被压成一段 |
| 类型 | 字符串或列表要统一 | 有的样本是字符串有的是列表 |
指令和答案一定要分开写。把提示词混进答案里,模型学到的就是复读指令,而不是回答问题。多轮对话要保留轮次边界,别把好几个来回压成一整段,否则模型分不清谁说了什么。
- 确认字段结构去目标平台文档或站内微调页面,核对当时要求的字段名和格式
- 写一个格式检查脚本逐条检查字段是否齐全、类型是否一致、有没有空值或空字符串
- 跑一遍全量数据把不合格的条目单独列出来,别直接删,先看是不是批量问题
- 抽样人工看几条确认指令和答案确实分开、轮次边界清楚,再进入清洗环节
清洗与去重:这几步不做,效果会打折
清洗的核心目标只有三个:去掉重复、去掉噪声、统一口径。重复样本会让模型偏向某类回答,噪声会让模型学到不该学的东西,口径不一致会让模型输出摇摆。这三件事没做,后面调参再多也补不回来。
- 去重:完全重复的必删,高度相似的也要处理,相似度阈值可以先用通用的文本相似判断;
- 去噪:删掉乱码、截断句、模板套话、跟任务无关的段落;
- 一致性:同一问题有多个互相矛盾的答案时,要么统一口径,要么整条删掉;
- 隐私:手机号、身份证、客户名这类内容在入库前就要脱敏,别等训练完再想这事;
- 长度检查:过短和过长的样本单独看一遍,过短的往往没信息量,过长的可能混了无关内容。
| 问题类型 | 判断标准 | 处理动作 |
|---|---|---|
| 完全重复 | 两条样本一字不差 | 保留一条 |
| 高度相似 | 意思几乎一样但表述不同 | 合并或保留质量更高的一条 |
| 自相矛盾 | 同一输入对应不同答案 | 统一口径或删除 |
| 含敏感信息 | 出现可识别个人身份的内容 | 脱敏后保留或删除 |
清洗到什么程度算够
不需要追求零噪声,而是要让噪声比例降到不影响训练的程度。一个简单的判断方法:随机抽一批样本人工读,如果连续读几十条都不需要改动,说明清洗基本到位;如果每隔几条就想改,说明还得继续。具体抽检比例可以按你数据规模定,没有统一数值。
切分与验收:留出验证集,做一次人工抽检
清洗完别急着全部拿去训练,先切出一部分当验证集。验证集的作用是告诉你模型在没见过的输入上表现如何,所以它必须能代表真实输入分布,不能只挑简单样本或者整齐的样本。
- 按比例切分训练集和验证集分开,具体比例按数据规模定,验证集不要太小
- 检查分布看验证集里各类输入的占比是否和真实场景接近,偏了要重新抽
- 准备边界样本单独留一小批罕见输入,用来验证模型会不会在边缘情况上乱答
- 人工抽检随机读一批样本,看答案质量和格式是否真的符合预期
- 留档版本记录这一版数据改了什么、为什么改,出问题能回溯到具体版本
数据准备做得越细,后面调参和评测越省事;数据准备糊弄,后面每一步都在还债。下一步把这份流程当成动手前的检查单,具体的数据门槛和格式要求到站内对应页面核对当时的说明,再开始整理你的第一批样本。→
常见问题
数据量少能不能微调?
可以,但样本量少时更依赖任务单一、格式稳定。样本太少容易记不住规律、只记住个别例子,建议先把场景收窄,或者考虑改用提示词和检索来补,不要为了凑数去灌低质量样本。
可以直接用模型生成的数据来微调吗?
能,但要人工过一遍。模型生成的内容会有事实错误和格式漂移,直接拿去训练等于把错误固化进去。可行做法是让模型起草、人改定稿,只保留人工确认过的样本。
清洗到什么程度算够?
没有统一标准,看效果和成本。一个实用判断是:随机抽一批样本读过去,如果明显错、重复、跟任务无关的比例已经很低,就可以先训练一版看结果,再针对性补清洗。