CMU Subword Modeling | 06 Computational Approaches to Morphological Segmentation and Tokenization
这次课主要讲,它们是目前 NLP 系统中做最常用的技术:Byte-Pair Encoding, Wordpiece, Unigram tokenization, SentencePiece, Morfessor (
这次课主要讲 五种常见的算法,它们是目前 NLP 系统中做 子词(subword)分割 / tokenization 最常用的技术:Byte-Pair Encoding, Wordpiece, Unigram tokenization, SentencePiece, Morfessor (dmort27.github.io)。这些方法可以分成两类:
- Unsupervised Tokenization(无监督子词分割):不需要人工标注,只用统计规律,比如 BPE 等。
- Morphological Segmentation(形态分析分割):更接近语言学上的 morpheme 分割,像 Morfessor。
1️⃣ Byte-Pair Encoding (BPE)
这是最早被大规模使用的 subword 分割算法之一。核心思想:
- 从最小单位(byte/character)开始
- 在训练语料中找出现次数最多的连续 pair(比如 “a” + “t” → “at”)
- 把它们合并成一个新符号,不断重复直到达到预设词表大小
比如:
- 词表一开始只有单字符
- 先合并频率最高的字符对
- 之后把合并后的符号也当成 token 再继续合并 🔁
- 最终得到一组 subword token
特点:
✔ 很有效率
✔ 非常适合大语料和机器翻译等任务
❌ 不保证 token 切分对齐真实 morpheme(词素)边界
❌ 纯统计,不考虑语言意义结构 (dmort27.github.io)
2️⃣ Wordpiece
这个方法在 BERT 等模型里被广泛使用。和 BPE 比较像,但合并标准不同:
- BPE 是按“最频率 pair”合并
- Wordpiece 用 PMI(Pointwise Mutual Information) 这种信息统计方法来选择合并对
这意味着:Wordpiece 更倾向于合并那些“出现一起比随机出现更有意义”的字符组合。效果:
✔ 更符合“语言内部一致性”
✔ 在一些任务上比 BPE 更稳健
❌ 不保证切分结果总是语言学上真正的 morphemes(真实词素)
3️⃣ Unigram Tokenization
这个方法从另一种思想开始:它先假设一个很大的词表,然后筛掉不好的 token。核心思想:
- 预先生成超大 subword 候选集
- 计算每个候选在语言模型上的概率(通常是 unigram 统计)
- 通过最大似然或 EM 算法循环剔除表现不好的 subword
- 剩下的就是最终的 token vocabulary
特点:
✔ 理论上更接近一个最佳分割方案(根据概率模型)
✔ 有概率解释:选择那些能让整个语料“最可能出现”的子词组合
❌ 但它需要更多计算(比如使用模型训练和动态筛选)
❌ 训练比 BPE/Wordpiece 慢
SentencePiece 是一个工具,它实现了 BPE 和 Unigram tokenization 这两种算法,并且适用于任意语言。 重要特点:
✔ 不需要依赖空格等分词预处理
✔ 语言无关、字符级别直接建模
✔ 输出 token 可带“▁”这样的特殊符号来表示空格/词边界
也就是说,SentencePiece 更方便处理像中文、日文这类没有空格语言的 tokenization。
4️⃣ Morfessor:专门的形态学分割算法
前三种虽然叫 subword tokenizer,但它们主要是为了实用 NLP 任务设计的,不一定会学出语言学意义上的 morpheme(词素)。Morfessor 不一样:它明确目标是把单词分割成真正接近语言学意义的 morphemes,而不是只靠频率合并。 基本工作流程:
- 假设文本是由 atoms(最小字符) 组成
- 想办法组合这些 atoms 成为 constructions(候选 morphemes)
- 学习一个 lexicon + grammar,让所有单词可以被合理分割
- 用一个概率模型(比如 MAP 最大后验估计)选出最优分割方案
Morfessor 的核心目标是:用统计方法逼近“真实的 morpheme 分割”,而不是只根据频率建立 subword 组合。
⚠️ 它比前面几种算法更复杂、更计算密集,但更有可能输出对语言学友好的 segmentation(分割)。
5️⃣ 小结
Tokenization 并不只是分字+分词那么简单。它是把语言拆成最小可处理单位的过程,不同算法代表不同思想:
- 有的更偏 实用统计(BPE/Wordpiece)
- 有的尝试用 概率模型 来寻找更合理划分(Unigram)
- 有的更贴近 语言学上真正的词素结构(Morfessor)
- SentencePiece 是一个方便的工程工具,可以统一实现不同算法
这节课介绍的这些方法不是互相替代,而是 不同任务需求下的选择:
| 方法 | 目标 | 适用场景 |
|---|---|---|
| BPE | 快速、高效的 subword tokenization | 大规模机器翻译 / 语言模型 |
| Wordpiece | 更信息熵驱动的 subword | BERT / 预训练任务 |
| Unigram | 概率模型最优 token | 需要更合理子词概率的场景 |
| Morfessor | 尽量语义化分割 | 需要接近 morpheme 的语言分析 |
总的来说:设计一个好的子词 segmentation/tokenization 算法,就是在计算效率和语言学语义之间做权衡。
这也正是 NLP 里的核心问题之一:我们到底想让机器“记住例子”,还是“理解规则”? (dmort27.github.io)
更多推荐



所有评论(0)