ULM( Unigram Language Model,一元语言模型) 分词算法

什么是 ULM 分词算法?


一、背景介绍

ULM 分词算法,全称为 Unigram Language Model 分词(基于一元语言模型的子词切分),是由 Google 提出的分词算法,广泛用于 自然语言处理中的子词(subword)建模,并由其开源工具 SentencePiece 实现。

ULM 分词常用于:

  • 预训练模型(如 T5ALBERTmBART
  • 多语言模型(因其无语言假设)
  • 数据混合任务(中英、emoji、符号等)

二、ULM 分词的核心思想

ULM 将分词视为最大化句子概率的一种建模问题。

不同于基于频率合并的 BPE 和 WordPiece,ULM 分词基于如下假设:

一个句子是由若干个子词(subword)组成的,每个子词是独立生成的(即一元语言模型),目标是找到 最大概率的子词组合方式


三、形式化定义(Unigram Language Model)

给定一个句子 x x x,它可以被切分为不同的子词序列 s 1 , s 2 , . . . , s n s_1, s_2, ..., s_n s1,s2,...,sn。ULM 分词的目标是:

max ⁡ ( s 1 , . . . , s n ) ∈ segmentations ( x ) ∏ i = 1 n P ( s i ) \max_{(s_1, ..., s_n) \in \text{segmentations}(x)} \prod_{i=1}^n P(s_i) (s1,...,sn)segmentations(x)maxi=1nP(si)

其中:

  • P ( s i ) P(s_i) P(si):是每个子词的概率(从训练语料中学习)
  • 分词目标是选择使整个句子概率最大的子词序列

四、训练过程概述

ULM 分词器的训练流程如下:

  1. 初始化词表

    • 从训练语料中提取所有可能的子词片段(最大长度一般为 4-8 字)。
    • 构建一个大词表(初始词表)。
  2. 估计子词概率

    • 用 EM 算法(Expectation-Maximization)估计每个子词的概率。
  3. 删除低概率子词

    • 每次删除得分最低的子词片段,更新词表。
    • 不断精简词表到预设大小(如 32,000 或 16,000)。
  4. 完成分词模型训练

    • 得到最终的子词概率分布,作为分词模型。

五、ULM 分词的解码(分词)过程

解码时,ULM 分词使用动态规划或前向搜索,找到使句子概率最大的子词切分方式:

output = arg ⁡ max ⁡ s 1 , . . . , s n ∏ i P ( s i ) \text{output} = \arg\max_{s_1, ..., s_n} \prod_i P(s_i) output=args1,...,snmaxiP(si)

例如:

原始文本

internationalization

ULM 分词结果

['▁inter', 'nation', 'al', 'ization']
  • “▁” 表示空格,用于表示词首
  • 每个子词都有概率,组合成最高概率的分词结果

六、与 BPE/WordPiece 对比

对比维度ULM(Unigram Language Model)BPEWordPiece
核心算法基于子词概率建模按频率合并字符对按似然合并字符对
是否贪心否(全局优化)
是否允许多个分词方式是(概率建模)
解码策略动态规划搜索最大概率路径贪心合并贪心合并
词表训练EM 算法频率统计最大似然估计
特点分词灵活、支持多个路径实现简单泛化性强

七、ULM 分词示例(使用 SentencePiece)

1. 安装 SentencePiece

pip install sentencepiece

2. 训练模型(命令行)

spm_train --input=data.txt --model_prefix=ulm --vocab_size=8000 --model_type=unigram

3. 使用分词器

import sentencepiece as spm

sp = spm.SentencePieceProcessor()
sp.load("ulm.model")

text = "internationalization"
tokens = sp.encode(text, out_type=str)
print(tokens)  # 输出类似:['▁inter', 'nation', 'al', 'ization']

八、ULM 分词的优点与缺点

✅ 优点

  • 全局最优解,不是贪心策略
  • 支持多个分词路径(可用于采样、数据增强)
  • 支持多语言、Unicode、特殊字符等场景
  • 可以生成高质量子词词表

❌ 缺点

  • 训练复杂度比 BPE 高(使用 EM 算法)
  • 解码开销略高(需要搜索)

九、总结

项目内容
名称ULM 分词(Unigram Language Model Tokenization)
实现Google SentencePiece 中的 --model_type=unigram
原理基于概率的一元语言模型,选取最优子词组合
训练算法EM(Expectation-Maximization)
解码策略动态规划或前向搜索
应用模型T5、mBART、XLM-R、ALBERT(部分)

ULM 分词是一种强大而灵活的子词建模方法,适用于多语言预训练、机器翻译、低资源场景等任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值