简介:本文系统解析Unigram语言模型分词算法的底层原理,涵盖其概率建模、EM参数估计、Viterbi最优切分及剪枝机制。读者将理解该算法为何能兼顾词表压缩与分词精度,掌握其从语料统计到子词切分的完整流程,并明确其适用边界与常见误区。
在自然语言处理中,分词是文本进入模型前的第一道关键工序。面对海量词汇和未登录词问题,基于子词单元的分词方法已成为主流方案。Unigram分词算法是其中一类基于概率语言模型的分词方法,其核心思想是:假设每个子词单元在语料中独立出现,通过统计语料中各子词的出现概率,构建一个以子词为单位的概率语言模型,再在给定词表的前提下,寻找使整句概率最大的切分方式。
与基于合并规则的子词方法不同,Unigram分词采用“自顶向下”的策略:先从一个较大的候选词表出发,通过迭代裁剪,逐步精简为一个兼顾覆盖率和压缩率的子词集合。理解这一机制,对于掌握现代分词系统的设计逻辑具有重要意义。
传统基于词的分词方法面临两个核心矛盾:
基于子词的分词方法通过将词拆分为更小的单元,在词表规模和表达 Coverage 之间取得平衡。Unigram分词进一步引入概率模型,使得切分结果不仅“可行”,而且“最优”——即在所有可能的切分方案中,选择概率最高的那一种。
理解Unigram分词,需要先明确以下基础概念:
Unigram分词的完整流程可分为四个阶段:
从训练语料中统计所有可能的子词单元。常见做法包括:
初始词表通常远大于目标词表,规模可达数十万甚至百万级。
在词表确定但概率未知时,使用EM算法估计各子词的出现概率:
期望步(E步) :对于语料中的每个词,根据当前概率计算所有可能切分方案的后验概率,并计算各子词在每种切分中的期望出现次数。
最大化步(M步) :根据期望出现次数,重新估计各子词的概率,通常采用归一化频率。
反复迭代E步和M步,直到概率收敛或达到最大迭代次数。
其伪代码示意如下:
初始化:为每个子词赋予均匀概率重复直到收敛:E步:对每个词 w:枚举 w 的所有切分方案计算每种方案的概率 P(切分) = ∏ P(子词)归一化得到后验概率累加各子词的期望计数M步:对每个子词:更新概率 = 期望计数 / 总计数
当词表过大时,需要裁剪。剪枝的核心是评估每个子词对整体似然的贡献:
剪枝过程中需注意:某些子词被移除后,其功能可由其他子词组合替代,因此需要重新评估剩余子词的贡献。
给定最终词表和概率后,对任意输入词进行切分时,使用Viterbi算法在切分网格中寻找概率最大的路径:
伪代码示意:
输入:词 w,词表 V,概率 P初始化:best[0] = 0,best[i] = -∞对 i 从 1 到 len(w):对 j 从 0 到 i-1:若 w[j:i] 在 V 中:得分 = best[j] + log P(w[j:i])若得分 > best[i]:best[i] = 得分backpointer[i] = j回溯 backpointer 得到切分方案
Unigram模型假设子词独立,虽然简化了语言的实际依赖关系,但在分词任务中,这种简化反而带来了计算上的可行性和稳定性。因为分词的核心目标是找到“合理的切分”,而非精确建模语言概率。独立假设使得切分方案的概率可以分解为局部乘积,从而支持动态规划求解。
EM算法在词表未知时估计概率,其优势在于无需标注数据。但EM算法对初始值敏感,可能收敛到局部最优。实践中常采用多次随机初始化或结合先验知识来缓解。
剪枝不仅压缩词表,还影响分词的粒度。过度剪枝会导致长词被拆散,增加序列长度;剪枝不足则词表冗余,影响效率。因此,目标词表大小的选择需要根据任务在压缩率与表达力之间权衡。
Viterbi算法的时间复杂度为O(n²),其中n为词长。对于常见词长(<20),计算开销可忽略。但对于超长字符串,需结合最大子词长度限制来优化。
假设词表包含以下子词及概率:
| 子词 | 概率 |
|---|---|
| 自 | 0.1 |
| 然 | 0.1 |
| 自然 | 0.3 |
| 语 | 0.1 |
| 言 | 0.1 |
| 语言 | 0.3 |
对词“自然语言”:
Viterbi算法将选择概率最大的切分1。
优势:
限制:
Unigram分词算法通过概率语言模型将分词问题转化为最优路径搜索问题,其核心机制包括EM参数估计、词表剪枝和Viterbi解码。这一框架在词表规模、未登录词处理和切分精度之间取得了平衡,成为现代分词系统的重要基础。理解其底层逻辑,有助于在实际应用中合理配置词表大小、调整剪枝策略,并正确解读分词结果。