很多人以为训练大模型就是「把数据丢进去开跑」,实际卡住人的往往是开跑之前那几周:语料从哪来、脏数据怎么洗、多来源怎么配比、tokenizer 和验证集什么时候定。这篇按顺序把准备环节拆开,给一份能照着走的清单,也说明哪些做法在什么情况下不适用。
很多人对训练大模型的想象是「把数据倒进去、按下开始」。真做过就知道,卡住人的往往是开跑之前那几周:语料从哪来、脏数据怎么洗、多来源怎么配比、tokenizer 和验证集什么时候定下来。这些环节没理顺,正式开跑之后返工的成本远高于前面多花几天。下面按实际执行顺序把准备环节拆开。
这篇只讲一件事:一份语料从原始状态到能进训练,中间要过哪些关、每关怎么判断过没过。适合自己攒数据、准备做预训练或继续预训练的团队;如果你只是调 API 或者做轻量微调,重心不在这些环节,别照搬整套流程。
开训之前到底有哪几步
先把主线串起来,心里有张顺序图,后面每节才好对号入座。顺序不是随便排的,前一步的结论会直接影响后一步的做法,跳步做等于给自己埋返工。
- 确定目标与评测口径先想清楚这个模型要强在哪:是中文长文本、代码,还是通用对话。评测口径和配比都从这里推出来,别等训练完再补。
- 语料采集按来源分类收集,同时留下抓取时间、来源、许可记录。这一步脏一点关系不大,但记录必须全。
- 清洗与去重格式编码清理、模板残留剔除、近重复去重、低质与有害过滤、语言长度筛选,逐层过。
- 配比混合把不同来源按显式配方表混合,写成百分比和规则,而不是靠手感倒。
- 切分与打包验证集在清洗完成后切出来,与训练集同源不同批;数据打包成可直接流式读取的格式。
- 小规模试跑用同一份脚本跑一小段,看 loss 曲线和数据读取瓶颈,没问题再进正式训练。
这一步的产出物不是一堆散放的文件,而是一份可复现的数据清单:来源、占比、过滤规则、版本号都写清楚。别人拿着这份清单能复现出同一批数据,才算过关。需要注意的是,这套流程针对预训练或继续预训练;只做微调的话,前置重心是标注质量和任务对齐,完全不是一回事。
采集:来源怎么找、授权怎么留痕
采集阶段最容易被低估,很多人上来就写爬虫,抓完才发现授权记录一团糟。来源大致分三类,它们在噪声特征和授权复杂度上差别很大,处理思路也不该一样。
| 来源类型 | 典型噪声特征 | 留痕重点 |
|---|---|---|
| 公开网页、书籍、论文 | 模板残留、导航文字、重复转载 | 抓取时间、来源域名、许可协议 |
| 自有或合作方业务数据 | 格式不统一、字段缺失、含隐私信息 | 数据来源说明、脱敏记录、使用范围 |
| 合成与开源数据集 | 质量参差、风格单一、标签可能错 | 上游数据集许可、生成方法、版本号 |
- 采集阶段就做留痕:抓取时间、来源域名、许可协议、抓取方式,后期合规抽查基本都靠这份记录。
- 近重复去重和版权判断是两件事:前者靠文本相似度,后者靠授权边界,别指望清洗脚本顺手解决合规问题。
- 三类来源不要混在一起存:分开存放、分开打标,配比时才好按比例取用。
- 遇到来源不清的语料,宁可先放一边单独标记,也不要直接混进主数据集。
术语和判断口径建议先统一。到站内的基础概念词典核对数据相关术语的定义,再到安全与合规术语对照确认授权、隐私、可商用这些词对应的具体边界,口径一致之后再动手,能少很多来回扯皮。
清洗与过滤:规则怎么定才可复用
清洗不是写一堆正则跑一遍就完事,关键是让每条规则都能被检验和复用。推荐按层次推进,前一层的结果作为后一层的输入,出问题容易定位是哪一层的问题。
- 格式与编码清理:统一编码,去掉乱码、控制字符、异常换行。
- 模板与导航残留剔除:页眉页脚、菜单、广告位、免责声明这类固定文字。
- 近重复去重:同源转载和改写内容要处理,具体相似度阈值按语料特点调。
- 低质与有害内容过滤:按词表加规则筛,垂直领域要换成领域词表。
- 语言与长度筛选:确定目标语言占比,过短过长的样本单独统计再决定去留。
每条规则都要能回答两个数:命中多少、误删多少。只报命中不报误删的规则,规模一放大就会伤到有效数据,而且伤在暗处,很难发现。去重比例、过滤命中率这类指标的合理区间不用背,具体数字到站内的模型训练和 AI 测评榜单页面看当时的统计口径,比自己拍脑袋靠谱。
不适用的情形要说清楚:面向法律、医疗这类垂直领域的数据,通用脏词表误伤会很严重,必须换成领域词表,并保留人工抽检环节。另外,如果语料本身只有几千条,去重和过滤的收益有限,重点应该放在人工审读上。
配比、切分与试跑:进训练前的最后一道关
配比决定模型后来的「性格」。中文占比、代码占比、长文本占比,都会影响模型在不同任务上的偏向,所以要写成显式配方表,而不是凭感觉混。配方表要能回答:每个来源占多少、为什么是这个比例、调整过几次。
| 准备项 | 合格标准 | 常见坑 |
|---|---|---|
| 配比配方表 | 每个来源占比明确,有调整记录 | 凭感觉倒,事后说不清比例 |
| 验证集切分 | 清洗完成后切出,与训练集同源不同批 | 拿训练集的一部分当验证集 |
| 数据格式 | 可直接流式读取,读取不成为瓶颈 | 训练时才现做格式转换 |
| 试跑结果 | loss 曲线正常,读取速度跟得上算力 | 直接上正式训练再发现问题 |
验证集必须在清洗完成之后、正式训练之前切出来,而且和训练集同源不同批。如果验证集混进了训练数据,早期指标看着好看,实际没参考价值。切完之后还要再确认一次:两边有没有重复样本 crept in。
# 试跑前自检:随机抽一小批数据,确认格式与读取速度
python check_pipeline.py --data ./processed --sample 2000 --dry-run正式开跑前建议先做小规模试跑:用同一份数据处理脚本跑一小段,看 loss 曲线是否正常、数据读取是否成为瓶颈。这一步能提前暴露大部分数据层问题。需要估算资源时,到站内的算力总览和部署测算页面对齐卡型和时长口径,再谈预算,别自己用拍出来的数字算账。
下一步把上面这份清单对着自己的语料过一遍,缺哪一步先补哪一步;需要横向对比不同方案的资源口径时,可以到站内模型训练与算力总览页面核对当时的说明与数字。→常见问题
训练之前必须准备多少数据才算够?
没有通用门槛,取决于模型规模、领域宽度和你想达到的效果。更实用的判断是:先看清洗后有效数据量和重复率,再决定是否扩采。数据不够时优先做配比和去重优化,而不是硬凑量。具体规模参考可以到站内训练相关页面看当时的口径。
清洗规则越严是不是越好?
不是。规则过严会大量误删有效样本,尤其对垂直领域语料而言,通用脏词表很容易伤到正常技术文本。做法是每条规则都统计命中量和误删抽样,误删率高就收紧范围或改成人工抽检,而不是一刀切全删。
预训练的数据准备和微调的数据准备能共用吗?
只能共用工具链,不能共用标准。预训练看的是海量、多样、低重复,微调看的是任务对齐和标注质量,几百上千条精标数据比几百万条脏数据更管用。两边的清洗规则、去重阈值、验证集切法都要分开设计。