第 2 章:分词——把文字切成模型能吃的块

上一章:LLM 是什么 | 回到 学习主页 | 下一章:Transformer 如何读懂一句话

神经网络是矩阵运算的机器,只吃数字。所以任何文本进入 LLM 之前,都要先经过一道翻译工序:分词(Tokenization),把字符串切成一个个 token,再映射成整数编号(token ID)。

直觉:token 是「词的碎片」,不是词

如果你以为 1 个 token = 1 个单词,在英文里会频繁出错。比如 GPT 系列分词器会把下面这句话切碎:

"tokenization" → "token" + "ization"

高频常见词会作为整体保留(theand),生僻词和长词会被拆成更小的片段。平均来说,英文 1000 个 token 约等于 750 个单词

为什么不用「按空格切词」这种最简单的方法?因为词表会爆炸:人类语言的单词量动辄数百万,还随时有新词、拼写变体、网络用语冒出来——任何没见过的词都会变成「未登录词」(OOV,Out-of-Vocabulary),模型只能抓瞎。另一个极端「按字符切」又太碎:一句话变成几百个 token,序列极长,模型要看的「距离」太远(第 3 章会看到,注意力成本随序列长度平方级增长)。

子词分词(subword tokenization)是折中方案:常见词整体保留(序列短),罕见词拆成有意义的碎片(词表小、没有 OOV)。

BPE:从字符开始「捏」出词表

GPT 系列用的算法叫 BPE(Byte Pair Encoding,字节对编码)。它最初是 1994 年一种数据压缩算法的名字,2016 年被引入机器翻译,如今是 LLM 分词的事实标准。它的思路是「自下而上地捏词」:

  1. 把训练语料里所有单词拆成字符,每个字符是一个初始「词表项」;
  2. 统计所有相邻词表项组合出现的频率;
  3. 把最频繁的组合(比如 t+hth)合并成一个新词表项;
  4. 重复第 2、3 步,直到词表达到预设大小(GPT-2 是 50257 项)。

于是高频片段(ingtionthe)自动成为独立 token,生僻片段维持碎片状态。训练完成后,分词器带着这张词表工作:遇到新文本就按词表里的项切分,再把每项换成整数 ID。整个过程是纯规则的——同一段文字永远切出同样的结果,没有随机性。

Note

从 GPT-2 起,OpenAI 的分词器直接在 UTF-8 字节上跑 BPE(byte-level BPE),而不是在 Unicode 字符上。好处是:不管输入什么语言、什么乱七八糟的符号,都能切——哪怕是不完整的半个汉字。

中文的特殊性

中文没有空格分词这道天然边界,分词器通常把一个常用汉字或常见双字词作为一个 token:1 个汉字大约占 1–2 个 token。后果很实际:

  • 同样一段意思,中文的 token 数通常比英文少,同样 1000 字的中文比英文「省」token;
  • 但如果训练语料里中文比例低,分词器对中文的切分效率就差——一个生僻汉字可能被拆成多个字节级 token,推理变慢、成本变高。

一个完整例子

输入 "I love coding",整个流水线是:

  1. 标准化(normalization):统一大小写、Unicode 规范形式;
  2. 预分词(pre-tokenization):按空格和标点粗切:I / love / coding
  3. BPE 切分:按词表把每块切成子词,比如 coding 可能保持整体;
  4. 映射:每个子词查表得到整数 ID,得到 [40, 1842, 12908] 之类的序列;
  5. 拼接特殊 token:加上表示开头的 token(如 <|endoftext|> 或对话模板标记)。

这串整数,就是模型的真正输入。

一句话总结

分词是把文字翻译成整数序列的工序:现代 LLM 用 BPE 算法从语料中自动「捏」出子词词表,在词表大小和序列长度之间取平衡。token 是词的碎片而非单词本身,中文约 1–2 个 token 每字。分词之后,每个 ID 还需要被映射成向量——那是下一章的内容。

来源

  • BPE 起源于 1994 年的数据压缩算法,2016 年被引入机器翻译:已核实(维基百科 Byte pair encoding 条目)
  • byte-level BPE 自 GPT-2 起用于 GPT 系列:已核实(同上条目)
  • 英文约 1000 token ≈ 750 单词:OpenAI 官方文档的粗略口径(「100 tokens ≈ 75 words」),业界广泛引用;原帮助页面已迁移,无法直接访问复核
  • 中文约 1 字 1–2 token:与既有笔记 Tokenization 口径一致,系经验估计而非严格标准

相关笔记

  • Tokenization — wiki 版笔记:三大子词算法(BPE / WordPiece / Unigram)对比与工程陷阱
  • LLM — 分词在 LLM 全图中的位置