核心要点

  • 共同目标:用子词折中「词级(OOV 多)」与「字符级(序列长)」,固定词表内既能覆盖未登录词又控制序列长度

  • BPE:自底向上、贪心地反复合并语料中出现频率最高的相邻符号对,直到达到目标词表大小(GPT 系列常用)

  • WordPiece:也是合并,但选择能最大化训练语料似然(合并后似然增益最高)的子词对,而非单纯最高频(BERT 用)

  • Unigram:自顶向下,从大候选集出发,按概率化的语言模型迭代剪掉对似然贡献最小的子词,得到带概率的词表(SentencePiece 默认)

标准回答

为什么用子词

词级分词词表大、未登录词(OOV)多;字符级无 OOV 但序列太长、语义弱。子词分词在两者间折中:常见词整体成 token,罕见词拆成有意义的子词片段,既覆盖任意词又控制序列长度。

BPE(Byte-Pair Encoding)

从字符开始,统计语料中相邻符号对的频率,贪心地反复合并最高频的对,每合并一次词表加一个新符号,直到达到目标词表大小。规则简单高效,GPT/RoBERTa 等广泛使用(常用其字节级变体 byte-level BPE 彻底消除 OOV)。

WordPiece

流程类似 BPE 也是自底向上合并,但合并准则不同:不是选最高频对,而是选合并后能最大化训练语料似然(近似 freq(AB)/(freq(A)·freq(B)) 最大)的对,更偏向语言学上更「值得」的组合。BERT 系列采用,常用 ## 前缀标记词内续接子词。

Unigram Language Model

方向相反,自顶向下:先建一个较大的候选子词集合,赋予每个子词概率,构成一个一元语言模型;通过 EM 迭代估计概率,并逐步剪掉对整体似然贡献最小的子词,直到词表收敛。分词时可在多种切分中选概率最高的,天然支持采样多种切分(subword regularization)。常与 SentencePiece 一起使用(直接在原始文本上训练、无需预分词)。

常见误区

⚠️ 常见踩坑

WordPiece 不是「按最高频合并」——那是 BPE;WordPiece 按似然增益合并。Unigram 是自顶向下剪枝而非自底向上合并。SentencePiece 是工具/框架,可承载 BPE 或 Unigram,并非某种独立算法。

追问

追问 1byte-level BPE 解决了什么问题?

普通 BPE 在字符级别操作,遇到训练时没见过的字符(生僻字、表情、多语言符号)仍可能 OOV。byte-level BPE 把文本先转成 UTF-8 字节再做 BPE,基础符号只有 256 个字节,任何字符都能由字节组合表示,从而彻底消除 OOV,GPT-2 起广泛采用。

追问 2Unigram 的 subword regularization 有什么用?

Unigram 词表带概率且一个词常有多种切分。训练时按概率随机采样不同切分,相当于一种数据增强/正则,让模型见到同一文本的多种分词形式,提升对分词噪声的鲁棒性与泛化,尤其在低资源或形态丰富语言上有帮助。

追问 3为什么中文等语言常用 SentencePiece?

中文没有空格分词,传统按词处理依赖分词器且易引入误差。SentencePiece 直接在原始文本(把空格也当普通符号)上训练 BPE/Unigram,无需预先分词,语言无关、可逆,方便处理中文、日文等无显式词边界的语言,也利于多语言统一建模。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。