BPE 算法完整伪代码

分类: 预训练与微调 · 难度: 基础 · 关联讲座: L14

BPE(Byte-Pair Encoding)是当前所有主流 LLM 使用的 tokenization 算法的基础。本文给出 BPE 训练和推理阶段的完整伪代码,并对比 WordPiece 的合并策略差异。

📐 BPE 算法的完整伪代码

输入:语料库 CC,目标词表大小 Vtarget|V_{\text{target}}|

初始化:V = {每个字符} ∪ {</w>}
WHILE |V| < |V_target|:
    统计 C 中所有相邻 token pair 的频率 f(a, b)
    选取频率最高的 pair: (a*, b*) = argmax f(a, b)
    将所有 (a*, b*) 合并为新 token: a*b*
    更新 C(替换所有 (a*, b*) 为 a*b*)
    V = V ∪ {a*b*}
RETURN V, 合并规则列表(有序)

推理时:按照训练得到的合并规则列表,从上到下贪心应用,将输入文本分词。

WordPiece(BERT)与 BPE 的区别:选择最大化语言模型似然增益的 pair,而非频率最高:

score(A,B)=f(AB)f(A)f(B)\text{score}(A, B) = \frac{f(AB)}{f(A) \cdot f(B)}

这更倾向于合并”共同出现比各自单独出现更显著”的 pair(类似 PMI)。