简介:Unigram分词算法是一种基于一元语言模型的子词切分方法:它先构造大规模候选子词表,再通过期望最大化方法估计子词概率,并按“删除后损失增量”逐步裁剪至目标词表规模;切分阶段用维特比算法求解概率最高的子词序列。本文系统讲解其定义、背景价值、核心组成、工作原理、与BPE和WordPiece的区别、典型场景与使用注意事项,帮助读者完整掌握这一大模型时代的关键分词方案。
Unigram分词算法(Unigram Language Model分词)是一种基于统计一元语言模型的子词(subword)切分算法。它把“如何切词”这个看似规则性的问题,转化为一个可量化的概率估计问题:为词表中每个子词赋予一个出现概率,并假设子词之间相互独立;于是文本的任何一种切分方案的概率,就等于其中所有子词概率的乘积。训练阶段的目标,是学习一份规模可控的“带概率词表”,使整个语料在该词表下被切分后的总体似然最大;推理阶段则利用动态规划(维特比算法),在所有可能的切分中找出概率最高的那一条路径。
可以从三个视角理解这个概念:
一个通俗类比:Unigram词表像一部“每个词条都标了权重”的字典,算法既要学这部字典里收哪些词、权重多少,也要学会在切句时用总代价(各词条负对数概率之和)最小的方式把句子拆开。
在子词算法出现之前,分词主要在两个极端之间摇摆:
子词方案正是两者的折中:高频词整词保留,低频词拆成有意义的片段(如“Transformer”可拆为常见片段组合),既控制词表规模,又天然支持未见词。Unigram在此基础上提供了三点独特价值:
一套完整的Unigram分词器通常包含以下组件:
设一段文本被切分为子词序列,在一元假设(子词相互独立)下:
训练就是最小化语料损失。概率越高的子词组合,代表这种切分越“省代价”。
输入:语料 D,目标词表大小 V_target1. 对 D 做归一化与预切分,统计单词元频率2. 构造种子词表:全部子串(限长)+ 全部单字,按频率初始化概率3. 重复以下过程,直到词表不大于 V_target:a. E 步:固定当前概率,为每个单词元求最优(或期望)切分,统计各子词的出现计数b. M 步:p(t) = count(t) / 所有子词计数之和c. 剪枝:评估"若移除子词 t,语料损失增加多少",按增量从小到大移除一批候选;单字一律保留输出:带概率的最终词表
其中E步可以采用“最优切分的硬计数”近似,也可以对所有可能切分做软期望(前向—后向式计算);M步本质上就是把计数归一化为概率分布。剪枝环节是Unigram区别于其他子词算法的关键:它自顶向下,从“几乎包含一切”的大词表出发做减法,而不是从字符出发做加法。
给定一个单词元和词表,切分等价于在字符串上找一条总损失最小的路径:
best[0] = 0for j in 1..len(word):for i in j-L..j-1: # L 为最大子词长度if word[i:j] 在词表中:cost = best[i] - log(p(word[i:j]))if cost < best[j]:best[j] = cost; 记录回溯指针从 len(word) 回溯指针,即得到概率最高的切分序列
由于词表保证了所有单字存在,任何字符串必然存在至少一条可行路径,这就是Unigram“机制上无OOV”的原因。该算法复杂度约为O(n×L),工程上属于轻量级操作。
在训练下游模型(如翻译模型、语言模型)时,可以不总采用最优切分,而是按切分自身的概率分布随机采样不同切分假设,让模型见到同一文本的多种拆法,从而对分词边界更鲁棒。采样分布通常由一个温度类参数控制:参数越小,越接近最优切分;参数越大,越接近均匀采样。推理阶段则关闭采样,统一使用维特比最优切分,保证输出确定且可复现。
三者同属子词算法家族,但思路差异明显:
| 维度 | BPE | WordPiece | Unigram |
|---|---|---|---|
| 构建方向 | 自底向上合并 | 自底向上合并 | 自顶向下剪枝 |
| 优化信号 | 合并频率最高的相邻符号对 | 选择使语料似然增益最大的相邻对(评分近似为“合并对频率 ÷ 左片段频率 × 右片段频率”) | 最大化语料似然,按损失贡献剪枝 |
| 切分方式 | 按学到的合并规则顺序执行 | 同左 | 维特比全局寻优 |
| 输出性质 | 确定性 | 确定性 | 概率性,可输出多候选 |
| OOV兜底 | 取决于词表设计(通常依赖字节或字符兜底策略) | 同左 | 强制保留全部单字 |
几点补充说明:WordPiece常配合“##”之类的词内延续标记使用,这属于实现细节,与算法本质正交;BPE与WordPiece是“贪心合并”,先学到的规则会改变后续统计,而Unigram在整个词表空间上用统一的概率目标做全局评估,切分时也能全局比较不同方案;工程上,许多分词器训练框架会把归一化、预切分与其中某一种算法打包成完整流水线,三者常作为可替换的选项并存。
回到定义本身:Unigram分词算法是一种以一元语言模型为骨架的子词切分方法,其完整链路是“种子词表—EM概率估计—按损失贡献剪枝—维特比解码”。它的核心价值在于把切分问题概率化:训练目标明确、切分质量可度量、天然支持多切分采样增强,并通过保留单字从机制上消除OOV;其适用边界在于依赖有代表性的训练语料,且一元独立性假设较为简化。与BPE、WordPiece相比,三者各有侧重——没有绝对优劣,选型时应结合语言特性、词表规模预算与下游任务需求综合判断。理解Unigram,本质上是理解“如何用统计学习的眼光重新定义分词”这一思路,这也是它在现代大模型文本预处理体系中长期占有一席之地的原因。