Tokenization:SentencePiece 原理
一句话定位:SentencePiece 把 tokenization 做成”端到端、语言无关”的组件——不依赖预分词、直接吃原始文本,并提供 Unigram 语言模型式的概率化切分,是中日韩等无空格语言的标准选择。
1. 无需预分词,直接在原始文本上训练
- 传统 BPE 流程假设文本已按空格预分词,这带来两个问题:依赖语言特定的分词器;对无空格语言(中文、日文、韩文、泰文)根本不适用。
- SentencePiece 把空格本身编码为普通字符(用
▁表示),于是整个句子就是一个字符流,切分完全由算法学习决定。 - 直接收益:
- 语言无关:同一套流程适配任意语言,天然适配中日韩;
- 完全可逆(lossless):解码时把
▁还原为空格即可精确还原原文,不丢失空白信息; - 训练与推理端一致,无需外挂分词器。
2. Unigram 语言模型式的概率化切分
除支持 BPE 外,SentencePiece 提供 Unigram LM 算法:
- 假设每个子词独立出现,各有概率
p(x);一个切分方案的概率为其所有子词概率之积; - 训练时从一个较大的候选子词集出发,用 EM 算法迭代估计各子词概率,并逐步剪枝掉对总体似然贡献最小的子词,直到词表达到目标大小(注意方向与 BPE 相反:BPE 自底向上合并,Unigram 自顶向下裁剪);
- 编码时用 Viterbi 算法求概率最大的切分路径,即全局最优切分;还支持按概率采样多种切分(subword regularization),可作为数据增强提升鲁棒性。
3. 对比 BPE:概率最优 vs 频率贪心
这是面试的关键落点,一句话概括:
Unigram 是概率最优切分,BPE 是频率贪心合并。
| 维度 | BPE | Unigram (SentencePiece) |
|---|---|---|
| 建词表方向 | 自底向上,贪心合并高频对 | 自顶向下,按似然剪枝 |
| 切分依据 | 固定的合并规则顺序(贪心、确定性) | 全局概率最大路径(Viterbi) |
| 多切分支持 | 单一切分 | 可按概率采样多切分(正则化) |
| 预分词 | 通常需要 | 不需要 |
BPE 的贪心可能得到局部最优切分;Unigram 在给定词表下求全局最优,理论上更合理,但训练成本更高。
参考:论文《SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing》(Kudo & Richardson, 2018);SentencePiece 官方 GitHub 文档