BPE
分类: NLP基础
BPE
定义
字节对编码是一种数据驱动的子词分词算法,通过迭代合并语料中频率最高的相邻字符/子词对来构建词表,在词级和字符级之间取得平衡,是 GPT 系列模型的标准分词方法。
数学形式
算法流程(训练阶段):
- 初始化词表为所有单字符(或字节)的集合
- 统计语料中所有相邻 token 对的频率
- 合并频率最高的 token 对 ,加入词表
- 重复步骤 2-3,直到词表达到预设大小
编码阶段:
对新文本,按训练时的合并顺序(优先级从高到低)贪婪地应用合并规则
核心要点
原始 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