简介:本文系统介绍Unigram分词算法的核心概念与工作原理,帮助读者理解其基于概率模型的子词切分思路、训练流程与工程实现要点,并对比其与BPE、WordPiece等常见分词方案的差异,为自然语言处理中的分词选型与落地实践提供参考。
Unigram分词算法是一类基于概率模型的子词(subword)切分方法,用于将原始文本拆分为词表中的语义单元序列。与基于合并规则的自底向上方法不同,Unigram采用自顶向下的思路:先假定一个足够大的候选词表,再通过统计评估不断裁剪词表,最终得到一个在语料上似然最优的子词集合,并据此对文本进行切分。
从技术视角看,Unigram将分词视为一个概率生成过程:给定一个句子,其生成概率等于该句子所有可能切分方式中概率最大者的概率,而每种切分的概率由各子词单元概率的乘积决定。从使用视角看,它输出的是一个确定性的切分结果,可直接作为模型输入。从业务视角看,它解决的是”词表规模”与”未登录词覆盖”之间的矛盾——既控制词表大小,又能灵活表示罕见词与新词。
传统按词切分面临两个困境:词表过大会导致参数膨胀与稀疏性问题,词表过小则无法覆盖新词、专有名词和形态变化丰富的语言。子词分词通过将词拆分为更小的可复用单元,在词表规模与表达能力之间取得平衡。Unigram在这一思路下的独特价值在于:
Unigram分词算法的完整流程可分为四个阶段。
从语料中统计高频子串,构造一个规模较大的初始词表,通常包含所有单字符以及若干高频多字符片段。单字符的存在保证了任何文本都可被切分,避免出现无法表示的字符。
采用期望最大化(EM)思路估计每个子词的概率:
如此迭代,直至概率收敛。
词表裁剪是Unigram的关键步骤。对每个子词计算其”移除损失”:若将该子词从词表中删除,语料总似然下降多少。损失较小的子词被视为冗余,优先删除。按损失排序后删除固定比例的子词,再重新估计概率并重复裁剪,直至词表规模达到目标值。
示意性伪代码如下:
初始化大词表 V循环:用 EM 估计 V 中各子词概率 p对 V 中每个子词 t:loss(t) = 移除 t 后语料总似然的下降量按 loss 升序排序,删除前 k% 的子词若 |V| <= 目标规模: 结束输出 V 及概率 p
推理时,对输入文本枚举所有可能切分,选择概率乘积最大的方案。工程上通常采用动态规划(如维特比算法)求解,将指数级枚举降为线性复杂度:
best[i] = max over j < i of ( best[j] * p(text[j:i]) )
其中 best[i] 表示前 i 个字符的最优切分概率,p 为子词概率。对于未登录片段,可回退到单字符切分,保证鲁棒性。
Unigram分词算法是一种以概率模型为核心、通过”大候选词表—EM估计—似然裁剪—动态规划切分”流程实现的子词分词方法。其核心价值在于用统计化的方式平衡词表规模与表达能力,适用于多语言、形态丰富及需要稳定预处理的文本场景。理解其概率假设与裁剪机制,有助于在分词方案选型时做出更合理的判断。