BPE、WordPiece 与 Unigram:三种主流子词分词算法对比
在构建现代自然语言处理模型时,Tokenizer 是连接文本与模型之间的桥梁。而在 tokenizer 的设计中,BPE(Byte Pair Encoding)、WordPiece 和 Unigram 三种子词(subword)分词算法是最常见的实现方式。本文将系统地介绍这三种方法的原理、特点以及适用场景,帮助读者更好地理解它们在大模型训练中的地位。
一、为什么需要子词(Subword)分词?
自然语言中的词汇是开放的,新词层出不穷。如果使用"词级分词",会导致词表非常庞大,且容易出现 OOV(词表外)问题。而"字符级分词"虽然不需要大词表,但会导致序列过长,模型难以捕捉有用语义。
子词分词正好居中:通过将文本拆成较短、可组合的单元(如词根、词缀、常见组合),既减少了 OOV,又能有效压缩 token 数量,是目前大语言模型的主流选择。
二、BPE(Byte Pair Encoding)
原理:
BPE 是一种基于频率的贪心合并算法。
- 初始词表为所有字符。
- 每轮找出最常见的相邻 token 对(如 "天"+"气"),合并成一个新 token。
- 重复,直到词表达到预定大小(如 32,000)。
特点:
- 拆词方式唯一,贪心合并。
- 训练快、实现简单。
- 对高频组合词(如 "人工智能")压缩效果好。
应用:
GPT 系列、RoBERTa、Qwen 等模型。
示例(简化版):
语料:"天 气 真 好 天 气 真 好"
- 初始:
['天', '气', '真', '好']
- 最频繁对:
('天', '气')
→ 合并为'天气'
- 继续合并:
('真', '好')
→ 合并为'真好'
→ 最终结果:['天气', '真好', '天气', '真好']
三、WordPiece
原理:
WordPiece 类似 BPE,但合并策略不是基于频率,而是基于语言模型的似然提升。
- 每轮尝试一个合并操作。
- 选择让训练语料 log-likelihood 增加最多的组合。
- 重复,直到词表达到目标大小。
特点:
- 合并更"语言感知",但训练慢。
- 使用特殊符号表示子词拼接(如 "##ing")。
- 更适合英文场景。
应用:
BERT、DistilBERT 等模型。
示例(英文):
单词:"unhappiness"
拆分结果可能为:['un', '##happi', '##ness']
→ 带 ##
表示这是一个接续子词。
四、Unigram Language Model
原理:
Unigram 并不使用合并策略,而是假设一个大词表,保留其中概率最高的子词组合。
- 构造所有可能的子词候选。
- 初始化每个子词的概率。
- 用 EM 算法训练子词概率。
- 剪枝掉低概率子词,保留词表。
特点:
- 多种分词路径可选,灵活性高。
- 拆分不唯一,有更强的鲁棒性。
- 特别适合多语言和小语种。
应用:
T5、mT5、ByT5、UL2 等模型。
示例:
语料:"今天真高兴"
候选分词路径可能有:
['今天', '真', '高兴']
['今', '天', '真', '高', '兴']
Unigram 会保留概率最高的组合路径。
五、对比总结
特性 | BPE | WordPiece | Unigram |
---|---|---|---|
合并策略 | 字符频率 | 语言模型提升 | 概率剪枝 |
拆分唯一性 | ✅ 是 | ✅ 是 | ❌ 否 |
多语言支持 | 中等 | 较弱 | ✅ 强 |
实现复杂度 | 简单 | 中等 | 较复杂 |
常见应用模型 | GPT/Qwen | BERT | T5/mT5/UL2 |
六、结语
BPE、WordPiece 和 Unigram 是构建高效、泛化性强的 tokenizer 的三种主流方法。它们在子词构建逻辑、鲁棒性、语言兼容性方面各有优势。在实际使用中,我们应结合模型类型、语种覆盖、资源限制等因素综合选择最合适的算法策略。