大模型核心原理 / Tokenizer 与文本表示
CHAPTER 02 · TOPIC 03

Tokenizer 与文本表示

Tokenizer(分词器)是大模型处理文本的第一道关卡——它将人类可读的文本转换为模型可处理的 token 序列。分词策略的选择直接影响模型的效率、多语言能力、上下文窗口利用率以及下游应用的表现。本章深入剖析主流的分词算法及其工程实践。

一句话理解

Tokenizer(分词器)是大模型处理文本的第一道关卡——它将人类可读的文本转换为模型可处理的 token 序列。分词策略的选择直接影响模型的效率、多语言能力、上下文窗口利用率以及下游应用的表现。本章深入剖析主流的分词算法及其工程实践。

阅读前置

建议先阅读第 01 章

本文关注

为什么需要 Tokenizer、主流分词算法、三种算法的对比

所在知识层

技术地基 · 大模型核心原理

文章导航
主教学视觉Tokenizer 与文本表示 · 知识结构

点击图中节点可定位到对应正文。

核心主题关系与流向

引言

Tokenizer(分词器)是大模型处理文本的第一道关卡——它将人类可读的文本转换为模型可处理的 token 序列。分词策略的选择直接影响模型的效率、多语言能力、上下文窗口利用率以及下游应用的表现。本章深入剖析主流的分词算法及其工程实践。


1. 为什么需要 Tokenizer

1.1 文本到数字的桥梁

神经网络只能处理数字,不能直接理解文字。Tokenizer 的任务是将文本映射为整数序列(token IDs),每个 ID 对应模型词汇表中的一个条目:

语义 SVG 重绘Tokenizer 与文本表示 · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

"Hello, world!"Tokenizer15496, 11, 995, 0
查看原文结构
"Hello, world!" → Tokenizer → [15496, 11, 995, 0]
语义 SVG 重绘Tokenizer 与文本表示 · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

词汇表(Vocabulary)示例:ID 0"!"ID 11","ID 995
查看原文结构
词汇表(Vocabulary)示例:
ID 0    → "!"
ID 11   → ","
ID 995  → " world"
...
ID 15496 → "Hello"

1.2 为什么不用字符或词?

方案优点缺点
字符级词汇表小(~200),不会遇到未登录词序列太长,训练效率低
词级每个 token 有完整语义词汇表巨大(100万+),无法处理新词
子词级平衡了粒度和词汇表大小分词结果对人类不直观

子词分词是当前的主流方案。


2. 主流分词算法

2.1 BPE(Byte Pair Encoding)

BPE 最初是一种数据压缩算法,被引入 NLP 用于分词。

训练过程:

语义 SVG 重绘Tokenizer 与文本表示

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

第 1 轮:最高频对 ("t","h"…合并为 "th"第 2 轮:最高频对 ("th","e…合并为 "the"第 3 轮:最高频对 ("i","n"…合并为 "in"
查看原文结构
第 1 轮:最高频对 ("t","h") 出现10000次 → 合并为 "th"
第 2 轮:最高频对 ("th","e") 出现8000次 → 合并为 "the"
第 3 轮:最高频对 ("i","n") 出现7000次 → 合并为 "in"
...重复直到词汇表达到目标大小(如 32K、50K、100K)

使用 BPE 的代表模型: GPT-2、GPT-3、GPT-4、LLaMA 系列

2.2 WordPiece

由 Google 在 BERT 中使用,与 BPE 类似但合并策略不同:

  • BPE:合并出现频率最高的 token 对
  • WordPiece:合并使语言模型似然度增加最多的 token 对(互信息最高)

特殊标记: 使用 ## 前缀表示非词首子词:

TEXT
"unhappiness" → ["un", "##happi", "##ness"]
"playing" → ["play", "##ing"]

使用 WordPiece 的代表模型: BERT、DistilBERT

2.3 SentencePiece

Google 开发的开源实现,直接在原始字节流上训练,不需要预先分词。

核心优势:

  • 不需要语言特定的预处理(不需要空格分词)
  • 天然支持中文、日文等无空格语言
  • 将空格视为特殊字符 ▁(U+2581)
TEXT
英文:"I'm playing" → ["▁I", "'", "m", "▁playing"]
中文:"我喜欢人工智能" → ["▁我", "喜欢", "人工", "智能"]

使用 SentencePiece 的代表模型: T5、LLaMA、Mistral、Qwen

2.4 Unigram 模型

与 BPE 的"自底向上合并"不同,Unigram 采用"自顶向下裁剪":

  1. 从大词汇表开始
  2. 计算删除每个 token 后对似然度的影响
  3. 删除影响最小的 token
  4. 重复直到达到目标词汇表大小

3. 三种算法的对比

维度BPEWordPieceSentencePiece
合并策略频率最高似然度提升最大BPE 或 Unigram
预处理需要空格分词需要空格分词直接在字节流上训练
多语言支持中等中等
代表模型GPT 系列BERT 系列LLaMA、T5
词汇表大小32K-100K30K32K-152K

4. 词表大小对模型的影响

4.1 词表大小的权衡

公式视图Tokenizer 与文本表示 · 关系式

把公式、变量和含义拆开呈现,便于对照阅读。

词表太小 → 序列变长、计算量增加、语义信息稀疏
词表太大 → Embedding 层参数巨大、低频 token 训练不充分

4.2 主流模型的词表大小

模型词表大小分词器
GPT-250,257BPE (byte-level)
GPT-3/4~100KBPE (byte-level)
BERT30,522WordPiece
LLaMA 232,000SentencePiece (BPE)
LLaMA 3128,256tiktoken (BPE)
Mistral32,000SentencePiece (BPE)
Qwen 2.5152,064tiktoken (BPE)

4.3 词表大小对中文的影响

中文字符在 BPE 分词中通常效率较低:

  • 英文:1 token ≈ 4 字符 ≈ 0.75 个单词
  • 中文:1 个中文字通常需要 1-2 个 token

这导致中文内容的上下文窗口利用率更低、API 调用成本更高。Qwen、DeepSeek 等模型通过扩大词表来改善这个问题。


5. Byte-level BPE

GPT-2 引入的 Byte-level BPE 是当前最常用的方案之一:

语义 SVG 重绘Tokenizer 与文本表示 · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

传统 BPE:"café"基于 Unicode 字符分词问题:词汇表需要覆盖所有 Unicod…
查看原文结构
传统 BPE:
"café" → 基于 Unicode 字符分词
问题:词汇表需要覆盖所有 Unicode 字符
语义 SVG 重绘Tokenizer 与文本表示 · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

Byte-level BPE:"café"先转为 UTF-8 字节99, 97, 102, 195, 1…在字节上做 BPE优势:基础词汇表只有 256 个,永远…
查看原文结构
Byte-level BPE:
"café" → 先转为 UTF-8 字节 → [99, 97, 102, 195, 169]
→ 在字节上做 BPE
优势:基础词汇表只有 256 个,永远不会出现未登录字符

6. 特殊 Token

Token用途
<bos> / <s>序列开始
<eos> / </s>序列结束
<pad>填充(批量处理时补齐短序列)
<mask>掩码(BERT 的 MLM 任务)
[INST] / [/INST]指令标记(Mistral 对话格式)
<|im_start|>消息开始(ChatML 格式)
<|im_end|>消息结束(ChatML 格式)

ChatML 格式示例:

TEXT
<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
What is AI?<|im_end|>
<|im_start|>assistant

7. Token Embedding

7.1 从 ID 到向量

Token ID 通过 Embedding 层映射为高维稠密向量:

语义 SVG 重绘Tokenizer 与文本表示

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文Token ID: 995系统核心Embedding 层0.12, -0.34, 0.56, ..., 0…工具、结果与反馈
查看原文结构
Token ID: 995 → Embedding 层 → [0.12, -0.34, 0.56, ..., 0.78] (d_model 维)

7.2 Embedding 维度

模型Embedding 维度 (d_model)
GPT-2 Small768
BERT Base768
GPT-3 175B12,288
LLaMA 2 70B8,192
LLaMA 3 405B16,384

7.3 权重共享(Weight Tying)

许多模型(如 GPT-2、LLaMA)将 Embedding 层的权重与最终输出层共享:

语义 SVG 重绘Tokenizer 与文本表示

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

Embedding: tokenid向量 (矩阵 E: vocab × d…Output: 向量概率分布 (矩阵 E^T: dmode…
查看原文结构
Embedding: token_id → 向量   (矩阵 E: [vocab × d_model])
Output:    向量 → 概率分布   (矩阵 E^T: [d_model × vocab])

8. 本章小结

要点说明
分词策略子词分词(BPE/WordPiece/SentencePiece)是主流
词表大小30K-150K,越大越好但成本越高
中文效率中文分词效率低于英文,需要更大的词表弥补
Byte-level BPEGPT 系列采用,零未登录词
Embedding将 token ID 映射为高维向量,维度与模型大小匹配

相关章节


延伸阅读

  • Sennrich, R. et al. (2016). "Neural Machine Translation of Rare Words with Subword Units". ACL
  • Wu, Y. et al. (2016). "Google's Neural Machine Translation System". arXiv:1609.08144
  • Kudo, T. & Richardson, J. (2018). "SentencePiece: A simple and language independent subword tokenizer". EMNLP