Appearance
Tokenization
将文本分割成模型可处理的基本单元(Token)的过程。这是所有 LLM 的第一步,也是最容易被忽视的关键环节。
概述
Tokenization 将原始文本字符串映射为整数 ID 序列,是 NLP 管线的最前端。一个 Token 可以是一个词、子词、或单个字符。Tokenization 策略直接影响模型的词汇量、上下文窗口的有效利用率、多语言能力、以及推理成本。
主流 Tokenization 方法
BPE (Byte-Pair Encoding)
由 Sennrich et al. 于 2016 年提出,GPT 系列使用的标准方法。
原理:
- 从字符级别开始
- 反复统计并合并最频繁的相邻 token 对
- 直到达到预定的词汇表大小
特点:
- 数据驱动的子词分割
- 可以处理未见过的词(通过回退到子词/字符)
- GPT-2/3/4、GPT-4o、BART 等使用
- o200k_base (GPT-4o) 词汇表约 200K
WordPiece
由 Schuster & Nakajima 于 2012 年提出,BERT 家族使用。
原理:
- 类似 BPE,但合并标准是最大化训练数据的似然
- 使用贪心的"最可能"合并策略
特点:
- BERT、DistilBERT、ELECTRA 使用
- 通常词汇量较小(30K-50K)
- 对形态丰富的语言处理较好
SentencePiece (Unigram LM)
由 Kudo & Richardson 于 2018 年提出,许多现代开源模型使用。
原理:
- 不预先假设词边界(直接从原始文本训练)
- 使用 Unigram 语言模型 + EM 算法
- 支持 BPE 和 Unigram 两种训练模式
特点:
- 不需要预先分词(特别适合中文、日文等无空格语言)
- Llama 系列、Mistral、Gemma、Qwen 使用
- 通常配合 byte-level 回退处理稀有字符
Tokenization 对模型的影响
上下文窗口的实际利用
不同分词器对同一段文本产生不同数量的 token:
| 语言 | 文本 | GPT-4 (o200k) | Llama 3 (tiktoken) | Qwen (QwenTokenizer) |
|---|---|---|---|---|
| 英文 | "Hello, world!" | ~4 tokens | ~4 tokens | ~4 tokens |
| 中文 | "人工智能正在改变世界" | ~8 tokens | ~12 tokens | ~5 tokens |
| 代码 | "def fibonacci(n):" | ~7 tokens | ~5 tokens | ~6 tokens |
多语言公平性
- 英文优势: BPE 在英文上效率最高,因为训练数据以英文为主
- 中文劣势: 中文字符作为 token 浪费上下文窗口
- 代码优化: 空格/缩进处理方式影响代码 token 效率
主流模型的分词器
| 模型 | 分词器 | 词汇量 | 特点 |
|---|---|---|---|
| GPT-4o | o200k_base | ~200K | 高词汇量,对非英文优化 |
| GPT-4 | cl100k_base | 100K | 广泛兼容 |
| Llama 3 | tiktoken (Llama 3) | 128K | 大词汇表优化多语言 |
| Llama 2 | sentencepiece (BPE) | 32K | 词汇量较小 |
| Mistral | sentencepiece (BPE) | 32K | 紧凑高效 |
| Qwen 2.5 | QwenTokenizer | 152K | 中文效率极高 |
| DeepSeek V3 | Byte-level BPE | 128K | 多语言平衡 |
| Claude 3 | 自研子词 | 未公开 | 高压缩率 |
工程实践
Token 成本计算
Cost = (input_tokens × input_price + output_tokens × output_price) / 1M- 中文文本:每个汉字 ≈ 1-2 tokens(视分词器而定)
- 英文文本:每个单词 ≈ 1.3 tokens
- 代码:每行 ≈ 3-8 tokens
常见陷阱
- 字符串反转破坏 token 边界: 某些 token 反转后不合法
- 数字 tokenization: "42" 和 " 42" 可能映射到不同的 token
- 特殊字符转义: Unicode 规范化(NFC/NFD)影响 token 计数
- 填充对齐: 某些分词器在 batch 处理时需要在 token 级别填充
Tokenization 调试工具
- GPT Tokenizer (OpenAI): https://platform.openai.com/tokenizer
- Tiktoken Analyzer: HuggingFace Spaces 上的可视化工具
- llama.cpp tokenize: 命令行 token 计数和展示
相关概念
- Transformer Architecture — Token Embedding 是 Transformer 的第一层
- Model Inference & Deployment — Token 推理速度与批处理策略
- Scaling Laws — 训练数据 Token 数量是缩放律的关键维度
参考来源
- Sennrich et al. (2016). "Neural Machine Translation of Rare Words with Subword Units." ACL.
- Kudo & Richardson (2018). "SentencePiece: A simple and language independent subword tokenizer." ACL demo.
- OpenAI Tokenizer 文档 (platform.openai.com/tokenizer)
- Meta (2024). "The Llama 3 Herd of Models" — Tokenizer 章节。