← 课程库
预训练工程模块四 · 数据准备代码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;去重与配比决定信息量与模型是否偏科。

独立练习

做到这些,才算完成本节

  1. 在本地运行代码,打印每个关键张量的 shape。
  2. 关闭示例后从空文件重写核心部分,并补一个异常或边界测试。
学习记录

记录本节阅读进度

建议先独立回答自测。读完记录不等于已经掌握。

继续下一课
← 上一课
困惑度与语言建模损失
下一课 →
Batch、Batch Size 与梯度累积

学完不要急着赶进度:去练习自测,或完成对应的阶段实验