BPE 和 WordPiece 的思路是"从小往大加":初始词表只有字符或字节,一轮轮合并扩充。Unigram LM 分词(Kudo, 2018)反着来:先造一个巨大的候选词表,训练一个 unigram 概率模型,然后按"删掉谁损失最小"做减法,迭代收缩到目标大小。加法和减法不只是方向差异——减法让分词器第一次有了显式的概率模型,这一下带来好几个 BPE 给不了的能力。
概率模型与编码:Viterbi 最优切分
给定词表 $\mathcal{V}$ 中每个 piece 的概率 $p(x)$(满足 $\sum_{x\in\mathcal{V}} p(x) = 1$,把 piece 当成"词"),一条字符串 $s$ 的一个切分 $\mathcal{S}(s)$ 是 piece 序列,其概率是
$$ P(s) = \sum_{x \in \mathcal{S}(s)} \prod_{i} p(x_i), $$
注意求和号:Unigram 建模的是所有合法切分的总概率,不是某一种切分。这是它和 BPE 的本质区别——BPE 的编码结果由合并规则唯一确定,Unigram 的每个切分都有概率,可以做软选择。
实际编码用 Viterbi 算法取最优切分。设 $f[i]$ 表示前缀 $s_{1..i}$ 的最大概率,转移为
$$ f[i] = \max_{x = s_{j+1..i},\ x \in \mathcal{V}} f[j]\cdot p(x), $$
回溯即得最优切分。复杂度 $O(L\cdot |\mathcal{V}|_{\text{匹配}})$,用前缀树把候选限制在实际出现的子串上,工程上是线性级别。
训练:EM 在切分格子上迭代
初始候选词表通常取语料中频率足够高的全部子串(外加字符级保底),规模几十万到上百万。初始概率取频率归一化,然后进入 EM:
E 步:对每条语料建切分格子(lattice),用前向-后向算法算出每个 piece 的期望出现次数
$$ f(x) = \sum_{s} \sum_{\text{seg} \ni x} P(\text{seg} \mid s), $$
即所有切分中经过 $x$ 的概率质量之和。这一步把"软切分"落到每个 piece 的统计量上。
M 步:更新 $p(x) = f(x) / \sum_{x'} f(x')$,最大化期望完整数据对数似然。目标函数本身是语料的边际似然 $L = \sum_s \log P(s)$,EM 保证它单调不降。
EM 收敛后进入剪枝循环:目标词表大小是 $V$,当前是 $V' > V$。对当前词表里每个 piece 估计删除它带来的损失——精确做法是删掉后重跑 Viterbi 重切语料算新损失,太贵;Kudo 的实现只考察 $x$ 出现在 Viterbi 最优切分里的语料,用次优切分近似替代成本,按损失升序删掉底部约 20% 的 piece,然后回到 EM 重新训练。删一批、重训一批,直到达标。
这个"减法式"训练的直接好处是词表利用率:BPE 的词表由合并顺序决定,中间产物(合并到一半的状态)没有概率解释;Unigram 留下的每个 piece 都在当前概率模型下对语料似然有正的贡献。
软切分的红利:subword regularization
因为 $P(s)$ 是所有切分的加权和,Unigram 可以按概率采样切分而不是总取最优:编码时从格子里按 $P(\text{seg}\mid s)$ 抽样。Kudo 的 subword regularization 正是这么做的——训练 NMT 模型时每次喂一个随机切分,等价于对切分方式做数据增强,让模型对分词噪声不敏感,在低资源翻译上有一致的小幅提升。采样时加一个温度式的平滑参数 $\alpha$:$P'(\text{seg}) \propto P(\text{seg})^{1/\alpha}$,$\alpha$ 越小分布越尖锐、越接近 Viterbi。BPE 的确定性编码给不出这个自由度,这是"有显式概率模型"最直接的回报。
与 BPE 的对照账本
| 维度 | BPE | Unigram |
|---|---|---|
| 词表来源 | 从字节/字符逐步合并 | 从超大候选逐步剪枝 |
| 合并/删除准则 | 相邻对频率(贪心) | 删除对似然的边际损失 |
| 编码结果 | 由规则表唯一确定 | 概率模型 + Viterbi,可采样 |
| 训练成本 | 低(排序 + 计数) | 高(EM + 格子前向后向) |
| 词表条目质量 | 中间产物无概率解释 | 每条目对似然有正贡献 |
代价也写明白:训练明显更慢(格子的前向-后向是序列长度的平方级结构,大语料上比 BPE 的计数合并贵一个量级);编码侧要多维护前缀树和概率表。T5 和 ALBERT 选了 Unigram,LLaMA 选了 BPE——不是因为哪个绝对更好,而是 BPE 的训练简单性和编码确定性,在工程上的分量比"软切分红利"更重。只有在数据噪声大、多语言混杂、或者想利用采样正则的场景,Unigram 的概率模型才开始回本。
小结
Unigram 把分词从"贪心合并规则"变成"概率模型 + 最优解码":EM 负责把语料似然调到局部最优,剪枝循环负责把词表缩到预算内,Viterbi 负责编码时取最优切分。软切分让它能做 subword regularization,这是 BPE 结构上给不了的能力;代价是训练贵一个量级。理解 EM 在格子上的那两步,就看懂了这个分词器的一大半。