38 分钟
大模型内核:从经典机器学习到对齐与前沿

分词与数据管线:大模型的「语言」从哪里来

讲清模型并不直接读字而是读 token,BPE/SentencePiece 如何从语料学出词表,以及一条工业级预训练数据管线如何采集、清洗、去重、过滤、配比——为什么说数据质量决定模型上限

  • 理解 token、词表与分词,知道子词切分为什么比按字/按词更优
  • 说清 BPE 的训练与编码逻辑,了解 SentencePiece 的适用场景
  • 掌握预训练数据管线的标准环节与每一步要解决的问题
  • 理解「数据质量决定上限、训练只是逼近上限」这一核心判断

模型读的不是字,是 token

神经网络只能处理数字,文本要先被切成一个个 token,再映射成向量。最朴素的切法是按词,但词表会爆炸且无法处理生词;按字/字母又序列太长、语义太碎。主流方案是子词(subword):常用词整体保留,生僻词拆成有意义的片段,既控制词表大小,又对未登录词有拆分能力。

三种切分粒度对比(以 unhappiness 为例)
按词

unhappiness → 一个整体 token

生词无法处理、词表巨大

按字母

u/n/h/a/p/p/i/n/e/s/s → 11 个 token

序列过长、语义破碎

子词 BPE(主流)

un + happi + ness → 3 个有意义片段

词表可控、能拆生词、序列适中

BPE:从语料里「合并」出词表

字节对编码(BPE)先把语料拆到字符级,统计相邻符号对的出现频率,反复把最高频的一对合并成新符号,直到达到预设词表大小。编码新词时就用学到的合并规则贪心切分。SentencePiece 是语言无关的工程实现,直接在原始文本上训练、不依赖空格分词,对中文日文这类没有空格的语言尤其友好。

BPE 训练与编码流程

语料拆到字符级

统计相邻符号对频率

合并最高频对为新符号

重复直到词表达到目标大小

用合并规则编码任意新文本

ℹ️词表大小是工程权衡

词表越大,同样文本切出的 token 越少、序列越短,但嵌入层与输出层参数越多、长尾符号学不充分;词表越小则反之。多语言模型还要在各语言间平衡。token 数也是 API 计费与上下文长度的真实计量单位。

一条工业级数据管线

从原始网页语料到训练数据

采集

网页/书籍/代码/问答等多来源

尊重版权与许可

提取与清洗

去 HTML/模板/乱码

语言识别、质量过滤

去重去毒

文档级/近似去重防记忆

过滤有害、隐私、低质内容

配比与分词

按领域/语言定比例混合

BPE 编码、打包序列

去重极其关键:同样的句子重复出现,模型会倾向于「背下来」而非学到规律,既浪费有效算力,又让评测被训练集污染、分数失真。配比决定模型「见过的世界是什么比例」——代码占比高则推理与结构化能力强,多语言比例影响各语言表现。

🐍数据决定上限

一个被反复验证的经验是:数据质量与多样性决定模型能力的天花板,架构和训练只是决定能逼近这个上限到什么程度。顶级团队在数据清洗、筛选、配比上投入的精力,往往超过调模型结构本身。这也是为什么后面讲规模法则时,数据量与参数量必须一起增长。

选择题

预训练语料中做大规模「去重」最主要的原因是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

先查数据:标签是否正确、有没有特征和标签泄漏、是否做了归一化;再查损失与学习率:学习率太大震荡、太小几乎不动;接着看批量大小和优化器,最后才怀疑模型结构。一个极好用的冒烟测试是:用极少量样本训练,看损失能不能被压到接近零——能,说明整条代码链路是通的;不能,问题一定在实现里,先别谈调参。