BPE

分类: NLP基础

BPE

定义

字节对编码是一种数据驱动的子词分词算法,通过迭代合并语料中频率最高的相邻字符/子词对来构建词表,在词级和字符级之间取得平衡,是 GPT 系列模型的标准分词方法。

数学形式

算法流程(训练阶段):

  1. 初始化词表为所有单字符(或字节)的集合
  2. 统计语料中所有相邻 token 对的频率
  3. 合并频率最高的 token 对 (a,b)ab(a, b) \rightarrow ab,加入词表
  4. 重复步骤 2-3,直到词表达到预设大小 V|V|

编码阶段:

对新文本,按训练时的合并顺序(优先级从高到低)贪婪地应用合并规则

核心要点

原始 BPE 最早由 Gage (1994) 提出用于数据压缩,Sennrich et al. (2016) 将其引入 NLP

高频词会被保留为整词(如 “the”),低频词会被拆分为子词(如 “lowest” → “low” + “est”)

词表大小是唯一的超参数,通常取 30K-50K(GPT-2 使用 50,257)

字节级 BPE(Byte-level BPE):以 256 个字节为初始词表,可处理任意语言和特殊字符,无需预处理

合并操作的顺序隐式编码了子词的频率信息——越早合并的子词越常见

与 WordPiece 的区别:BPE 按频率选择合并对,WordPiece 按似然增益选择(贪婪最大化语言模型似然)

代表工作

Gage (1994): “A New Algorithm for Data Compression”,BPE 原始论文

Sennrich et al. (2016): “Neural Machine Translation of Rare Words with Subword Units” (ACL 2016),将 BPE 引入 NMT

Radford et al. (2019): GPT-2,使用字节级 BPE

相关概念

Tokenization

Word2Vec

Language Model

BERT