预训练工程模块四 · 数据准备代码约 12 分钟
数据管线:清洗、去重、配比、tokenize
预训练的胜负,一半在数据
学完这节你能:
- 了解预训练数据处理的关键环节
- 理解去重和配比为什么重要
- 知道 tokenize 决定序列长度
预训练前,原始网页语料要经过一条重活流水线。数据质量与配比,直接决定模型上限(回想 Chinchilla:数据不足会让大模型「训练不足」)。
- 清洗:去广告、乱码、低质页面、有害内容。
- 去重:近似去重(如 MinHash),重复数据会让模型记硬背、浪费算力。
- 配比:不同来源(网页、书籍、代码、多语)按比例混合,决定模型「偏科」与否。
- Tokenize:用训练好的分词器把文本切成 token id,打包成固定长度序列。
打包成定长序列(预训练常见做法)
ids = tokenizer.encode(long_text) # 一大串 token id
seq_len = 2048
# 切成一段段定长样本,喂进训练
chunks = [ids[i:i+seq_len] for i in range(0, len(ids) - seq_len, seq_len)]⚠️ 去重被严重低估:语料里大量重复会造成「假装数据很多」,实际信息量不足,还容易让模型过拟合/背诵,甚至污染测试集。
自测预训练数据「去重」最主要的作用是:
// 带走一句话
预训练数据流水线=清洗+去重+配比+tokenize;去重与配比决定信息量与模型是否偏科。
独立练习
做到这些,才算完成本节
- 在本地运行代码,打印每个关键张量的 shape。
- 关闭示例后从空文件重写核心部分,并补一个异常或边界测试。
学习记录
记录本节阅读进度
建议先独立回答自测。读完记录不等于已经掌握。