这次课主要讲 五种常见的算法,它们是目前 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,而不是只靠频率合并。 基本工作流程:

  1. 假设文本是由 atoms(最小字符) 组成
  2. 想办法组合这些 atoms 成为 constructions(候选 morphemes)
  3. 学习一个 lexicon + grammar,让所有单词可以被合理分割
  4. 用一个概率模型(比如 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)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐