一文了解大模型分词技术
🔤 分词技术大揭秘:BPE、WordPiece、SentencePiece 到底有啥区别?
发布于:2025年10月10日
关键词:分词、Tokenization、BPE、WordPiece、SentencePiece、Unigram、LLM、大模型
你有没有想过:
当你说“我喜欢AI”时,大模型看到的真的是这三个字吗?
其实不是。
在进入模型之前,每一个文本都会被“切开”成更小的单位——这个过程就叫分词(Tokenization)。
就像人吃东西要先切块,AI 也要把文字“切碎”才能“消化”。
但问题来了:
- 英文怎么切?“unhappiness” 是切为
un + happy + ness还是u + n + h + a + p + ...? - 中文怎么切?“我喜欢AI” 是
我/喜欢/AI还是我/喜/欢/A/I? - 为什么 GPT 用 BPE,BERT 用 WordPiece,而 LLaMA 用 SentencePiece?
今天我们就来揭开这些分词技术的神秘面纱,用厨房切菜的比喻 + 真实例子 + 对比表格,带你一口气搞懂:
✅ BPE
✅ WordPiece
✅ SentencePiece(含 Unigram)
它们的原理、区别与谁在用
一、先理解:分词到底是什么?
🧠 分词的核心任务
把一段文本(如 "I love AI")转换成数字序列,因为模型只能处理数字。
过程如下:
原始文本: "I love AI"
↓ 分词(Tokenization)
Token序列: ["I", "lo", "ve", "AI"]
↓ 编码(Numerical Encoding)
ID序列: [15, 234, 67, 892]
↓ 输入模型
模型开始“阅读”
🎯 分词的目标
| 目标 | 说明 |
|---|---|
| 覆盖所有词 | 不能有“未知词(UNK)” |
| 控制词表大小 | 太大会浪费内存,太小会切得太碎 |
| 保留语义 | 尽量让“有意义的单元”作为一个 token |
| 高效编码 | 减少 token 数量,提升训练速度 |
二、角色登场:三大主流分词技术
我们用一个厨房切菜大赛来类比:
- BPE:主厨,擅长“从长词往短切”
- WordPiece:BPE 的“谷歌定制版”
- SentencePiece:全能选手,支持多种算法(含 Unigram)
三、选手1:BPE(Byte Pair Encoding)—— “合并小碎片”的主厨
🔧 原理:从细到粗,不断“合并高频组合”
BPE 的思路很反直觉:
它不是切词,而是“合并”。
🔄 训练流程(以英文为例):
-
初始状态:每个字符是一个 token
h, a, p, p, y, l, o, v, e, u, n, h, a, p, p, i, n, e, s, s -
统计相邻 pair 频率:
h+a=2,p+p=2,p+i=1,i+n=2,n+e=2,e+s=1,s+s=1 -
合并最高频 pair:比如
p+p→pp
现在pp是一个新 token -
重复以上步骤,直到词表达到目标大小(如 30,000)
🌰 例子:最终结果
happy→hap+pyunhappiness→un+happi+nessloves→love+s
✅ 优点:
- 减少稀有词切分
- 控制词表大小
- 适合英文
❌ 缺点:
- 对中文支持差(中文本就是单字)
- 合并过程依赖训练数据
🏆 谁在用:GPT-2、GPT-3、ChatGPT
四、选手2:WordPiece —— BPE 的“谷歌优化版”
🔧 原理:同样是合并,但标准不同!
WordPiece 是 BPE 的“亲兄弟”,用在 BERT 中,但有一个关键区别:
BPE:合并频率最高的 pair
WordPiece:合并能让语言模型概率最大的 pair
🌰 举个例子:
假设我们要决定是否合并 h+appi 还是 appi+ness。
- BPE 看谁出现次数多
- WordPiece 看谁合并后,整个句子的预测概率更高
这就让 WordPiece 更“懂语言”,能生成更合理的子词。
🌰 实际效果:
playing→play+##ing(##表示这是后缀)transformers→transform+##ers
✅ 优点:
- 生成的 subword 更符合语言规律
- 在 BERT 任务中表现更好
❌ 缺点:
- 训练更复杂
- 同样不适合中文原生分词
🏆 谁在用:BERT、RoBERTa、ERNIE(百度)
五、选手3:SentencePiece —— “全能型选手”
🔧 原理:不依赖空格,直接从原始文本学习
前面的 BPE 和 WordPiece 都依赖“空格”来切词,比如:
"I love AI" → ["I", "love", "AI"]
但中文没有空格!我喜欢AI 怎么办?
SentencePiece 说:
“我不需要空格,我直接从字符级别开始!”
它把整个句子当成一串字符,直接进行分词建模。
🔄 支持两种算法:
- BPE 模式:和传统 BPE 类似,但从字符开始
- Unigram 模式:反向思维——先假设有一个大词表,然后不断“删词”
🎯 Unigram 模式:最特别的分词思路
🔄 训练流程:
- 初始化一个大词表(比如 10万个候选词)
- 计算每个词出现的概率
- 尝试删除某些词,看是否会导致整体句子编码长度变长
- 如果删除后编码变长,说明这个词有用,保留
- 否则删除
最终留下一个最优子集词表。
🌰 例子:
输入:我喜欢AI
可能的分词结果:
我喜欢AI✅(语义完整)我喜欢AI❌(太碎)
Unigram 会倾向于保留 喜欢 这样的常见组合。
✅ 优点:
- 完美支持中文、日文等无空格语言
- 可以端到端训练,无需预分词
- 支持 BPE 和 Unigram 两种模式
🏆 谁在用:LLaMA、LLaMA2、ChatGLM、T5、Alpaca
六、对比表格:一目了然
| 特性 | BPE | WordPiece | SentencePiece |
|---|---|---|---|
| 原理 | 合并高频 pair | 合并提升概率的 pair | 无空格分词,支持 BPE/Unigram |
| 是否依赖空格 | ✅ 是 | ✅ 是 | ❌ 否 |
| 中文支持 | ❌ 差 | ❌ 差 | ✅ 强 |
| 典型模型 | GPT 系列 | BERT 系列 | LLaMA、T5、GLM |
| 子词标记 | 无特殊标记 | ##ing |
可能加前缀▁ |
| 训练目标 | 最小化合并次数 | 最大化语言概率 | 最小化编码长度(Unigram) |
📌 补充:SentencePiece 输出常带
▁,表示“空格后开始”,如:▁I ▁love ▁AI或▁我 ▁喜欢 ▁AI
七、真实场景对比:一句话怎么切?
我们以这句话为例:
“I love 人工智能”
| 分词器 | 分词结果 |
|---|---|
| BPE | ["I", "lo", "ve", " ", "人", "工", "智", "能"] |
| WordPiece | ["I", "lo", "ve", " ", "人", "工", "智", "能"] |
| SentencePiece (Unigram) | ["▁I", "▁love", "▁人工智能"] ✅ 更合理! |
💡 可见,SentencePiece 在中英混合场景下优势明显。
八、其他分词方式(简要了解)
| 方法 | 说明 |
|---|---|
| 空格分词 | 简单粗暴,按空格切,适合英文但不适合中文 |
| Jieba(结巴) | 中文专用,基于词典 + 统计,常用于传统 NLP |
| Char-level | 按字符切,如 我/喜/欢,token 多,效率低 |
| BBPE(Byte-level BPE) | BPE 的升级版,按字节切,支持所有语言(如 GPT-2) |
🌟 BBPE 特别说明:
GPT-2 使用 Byte-level BPE,把每个字符转成 UTF-8 字节,再做 BPE。
这样即使遇到生僻字或 emoji,也能切开,真正实现“无词表限制”。
九、如何选择?一句话总结
| 需求 | 推荐方案 |
|---|---|
| 纯英文任务 | BPE 或 WordPiece |
| 中文或中英混合 | ✅ SentencePiece(Unigram) |
| 兼容性要求高 | SentencePiece(通用性强) |
| 复现 BERT | WordPiece |
| 复现 GPT | BPE 或 Byte-level BPE |
| 大模型训练 | ✅ SentencePiece 是主流选择 |
十、结语:分词虽小,影响巨大
分词是大模型的“第一道门”。
一个优秀的分词器,能让:
- token 数量更少 → 训练更快
- 语义单元更合理 → 模型理解更好
- 支持多语言 → 应用更广
从 BPE 的“合并思维”,到 WordPiece 的“概率优化”,再到 SentencePiece 的“无空格革命”,
分词技术的演进,正是 NLP 从“规则”走向“数据驱动”的缩影。
下一次当你输入“你好AI”时,不妨想想:
你的文字,正被谁“切碎”送往模型的脑海?
📚 延伸阅读
- Byte Pair Encoding (Sennrich et al., 2016)
- WordPiece (Schuster & Nakajima, 2012)
- SentencePiece (Kudo & Richardson, 2018)
- Hugging Face Tokenizers 文档
- LLaMA 分词器源码
更多推荐


所有评论(0)