Note
什么是词元化?BPE 和 WordPiece 有什么区别?
从子词切分解释词元化,并比较 BPE 与 WordPiece 的合并规则。
什么是词元化?请比较一下 BPE 和 WordPiece 这两种主流的子词切分算法。
什么是词元化(Tokenization)?
词元化是将原始的文本字符串分解成一个个独立的单元(称为“词元”或“token”),并将这些词元映射到唯一的整数ID的过程。这是自然语言处理模型处理文本的第一步,因为模型只能处理数字输入。
现代大型语言模型普遍采用 子词(Subword) 词元化算法,它介于按词切分和按字符切分之间。这样做的好处是:
- 有效处理未登录词(OOV): 任何罕见词或新词都可以被拆解成已知的子词组合,避免了“未知”标记。
- 平衡词表大小与序列长度: 相比于词级别,词表规模大大减小;相比于字符级别,生成的序列长度又不会过长,兼顾了效率。
- 保留形态信息: 像 “running”, “runner” 这样的词可以共享 “run” 这个子词,使得模型能够理解词根和词缀的关系。
BPE vs. WordPiece
BPE和WordPiece是两种最主流的子词切分算法,它们构建词表的过程相似,但在合并子词的决策标准上有所不同。
BPE (Byte Pair Encoding)
-
工作原理:
- 初始化: 词汇表由语料库中出现的所有基本字符组成。
- 迭代合并: 重复以下步骤直到达到预设的词表大小:
a. 在整个语料库中,统计所有相邻词元对的出现频率。
b. 找出频率最高的那个词元对(例如
('e', 's'))。 c. 将这个词元对合并成一个新的、更长的词元('es'),并将其加入词汇表。 d. 在语料库中,用新词元替换所有出现的该词元对。
-
应用模型: GPT系列、Llama等。
-
特点: 算法思想简单直观,完全基于数据中符号对的出现频率。
WordPiece
- 工作原理:
- 初始化: 与BPE一样,词汇表也从所有基本字符开始。
- 迭代合并(核心区别): WordPiece在选择合并哪两个子词时,不是基于频率,而是基于语言模型的似然(Likelihood)。它会尝试所有可能的合并,并选择那个能够最大程度提升训练数据似然值的合并操作。
- 可以通俗地理解为:如果把语料库看作一个语言模型,每次合并都应该让这个语言模型产生当前语料库的概率变得最大。它倾向于合并那些内部凝聚力更强的字符组合。
- 应用模型: BERT, DistilBERT, Electra。
- 特点: WordPiece在切分时,通常会在单词的非起始部分子词前加上特殊符号(如
##),例如 “tokenization” 可能会被切分为("token", "##ization")。
主要区别总结:
| 特性 | BPE (Byte Pair Encoding) | WordPiece |
|---|---|---|
| 合并决策标准 | 频率驱动:合并出现次数最多的相邻子词对。 | 似然驱动:合并能最大化提升语料库语言模型似然的子词对。 |
| 理论基础 | 数据压缩算法,简单高效。 | 概率语言模型,理论上更优。 |
| 应用代表 | GPT, Llama, RoBERTa | BERT, T5 |