Tokenization Algorithm
1. Whitespace / Word-level Tokenization(空格或词级分词)
最简单的分词方法:按空格或标点切割。
✔ 优点
- 非常简单
- 快
✘ 缺点
- 词表巨大(上百万)
- 完全不能处理新词(OOV)
- 不适合大型模型
📌 使用场景
早期 NLP(如传统机器学习、bag-of-words)
🔡 2. Character-level Tokenization(字符级分词)
将每个字符作为 token。
✔ 优点
- 没有 OOV
- 词表极小(几百个字符)
✘ 缺点
- 序列长度极长,训练慢
- 丢失词内部结构(较难学习语义)
📌 使用场景
- 一些生成任务(字符语言模型)
- 高频率的低资源语言
🧩 3. Subword Tokenization(子词级分词)——最主流
这是深度学习 NLP 的核心方法,平衡词级与字符级。
字符级分词:太长,训练慢
词级分词:词汇量巨大,遇到新词(OOV)很麻烦
3.1 Byte Pair Encoding (BPE)
目标:通过合并最常出现的子词对来构造一个子词词表。合并结束条件是最大合并次数 or 最终词表大小or pair出现至少 X 次才能合并
特点
- 基于频率合并
- 无
##前缀 - 可处理 OOV
- 适用于大规模模型
使用模型
- GPT-2 / GPT-3
- RoBERTa
- CLIP
BPE(字节对编码)或二元编码是一种简单的数据压缩形式,其中最常见的一对连续字节数据被替换为该数据中不存在的字节。后期使用时需要一个替换表来重建原始数据。
优点:可以有效地平衡词汇表大小和步数(编码句子所需的token次数)。
缺点:基于贪婪和确定的符号替换,不能提供带概率的多个分片结果
3.2 WordPiece
Google 为 BERT 设计的子词分词算法。
特点
- 基于最大化语言模型似然(比 BPE 更精细)
- 新子词带
##前缀 - 更适合双向 Transformer
使用模型
- BERT / ALBERT
- Electra
- DistilBERT
3.3 SentencePiece(Unigram Model & BPE)
无需空格的通用 tokenizer,特别适合多语言。
类型
- Unigram Model(更流行)
- BPE(SentencePiece 版本)
特点
- 输入不用预处理(可以直接用原文 UTF-8)
- 词表可学习空格(特殊的
<unk>/▁symbol) - 多语言 + 大规模数据首选
使用模型
- T5
- ALBERT(部分版本)
- LLaMA(SentencePiece BPE)
🔠 4. Byte-level BPE(字节级 BPE)
用字节(0–255)作为基础符号,不直接使用 Unicode 字符。
特点
- 完全没有 OOV
- 字节级 → 与任何语言兼容(甚至代码)
使用模型
- GPT-2
- GPT-3
- GPT-4/4o(tiktoken 也是基于 byte-level)
🔤 5. Unigram Language Model(SentencePiece)
将 token 表视为一个概率分布,逐渐删除低概率 token 直到达到词表大小。
特点
- 比 BPE 更灵活(允许多种分解方式)
- 在多语言语料上效果更好
- 常用于 encoder-decoder 模型
使用模型
- T5
- mT5
- XLNet(部分)
📘 6. Word-boundary-aware Tokenizers(中文分词器)
用于中文、日文、泰文等没有空格的语言。
常见:
- Jieba(结巴)
- THULAC
- PKU Segmentation
但由于深度学习逐渐使用 subword 方法,这类分词器在大模型中越来越少用。
🧬 7. Tiktoken(OpenAI 的 Tokenizer)
为 GPT 系列设计的高效 tokenizer。
特点
- Byte-level BPE 的优化版本
- 极快(C 实现)
- 对表情符号、罕见字符的处理更好
- 专门为大模型的上下文长度扩展优化
使用模型
- ChatGPT / GPT-4 / GPT-4o 全系列
🎯 什么时候用哪种?
| 场景 | 推荐 tokenizer |
|---|---|
| 大模型(LLM) | Byte-level BPE / Tiktoken / SentencePiece BPE |
| 多语言模型 | SentencePiece (Unigram) |
| BERT 类模型 | WordPiece |
| 小模型 / 快速训练 | BPE |
| 中文模型 | SentencePiece 或 BPE(不需要分词) |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
