BPE 算法完整伪代码
分类: 预训练与微调 · 难度: 基础 · 关联讲座: L14
BPE(Byte-Pair Encoding)是当前所有主流 LLM 使用的 tokenization 算法的基础。本文给出 BPE 训练和推理阶段的完整伪代码,并对比 WordPiece 的合并策略差异。
📐 BPE 算法的完整伪代码
输入:语料库 ,目标词表大小
初始化: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,而非频率最高:
这更倾向于合并”共同出现比各自单独出现更显著”的 pair(类似 PMI)。