You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字节对编码(BPE)如何处理等频字符对?以HuggingFace实现为例

BPE分词器等频合并规则及HuggingFace实现解析

一、首次合并的核心逻辑

BPE的核心逻辑是优先合并出现频率最高的相邻字符对,但当多个字符对频率相同时,合并顺序完全由具体实现的平局处理规则决定——原始BPE论文并没有对此做强制要求。

在你的训练语料中,DC、BC、CD、BA、AB均出现2次,属于典型的等频场景,首次合并哪一对,全看你用的BPE工具的规则设定。

二、BPE对等频情况的常见处理方式

不同BPE实现会自定义等频时的合并规则,常见的有三类:

  • 字典序规则:把字符对当成字符串,按字典序(正序或逆序)排序,选最前或最后的对合并
  • 出现位置规则:按字符对在语料中首次(或最后)出现的位置排序,优先合并先出现(或后出现)的对
  • 反向字符对规则:把字符对反转后再按字典序排序,选排序结果最优的对合并

三、不同BPE实现的规则差异

不同工具的规则差异很明显:

  • 早期基础BPE实现:大多用正字典序,优先合并字典序靠前的字符对
  • HuggingFace的ByteLevelBPETokenizer:采用的是字符对逆字典序规则,同时默认会把输入转为小写统一处理。具体来说,当多个字符对频率相同时,会直接比较字符对的字典序,优先合并字典序更大的那个(比如小写的ba比ab大,因为b的ASCII码高于a)。另外,它是基于字节级的BPE,会把输入转成字节序列处理,这和普通字符级BPE的统计逻辑略有区别。

四、对你的分词结果的解释

你得到的['d', 'c', 'b', 'babcd', 'c', 'babcd'],核心原因是ByteLevelBPETokenizer在等频时优先选了字典序更大的ba(小写)进行合并:

  1. 首次合并b和a成ba,语料序列变成d c b ba b c d c ba b c d
  2. 后续合并中,ba和相邻的b合并成bab,接着bab和c合并成babc,再和d合并成babcd
  3. 重复这个合并逻辑,最终得到你看到的分词结果

至于为什么没优先合并字典序更大的dc,可能是因为训练时你设置的vocab_size较小,合并到一定步数就停止了;或者字节级处理的统计逻辑和你手动统计的字符对频率有细微差异。

内容的提问来源于stack exchange,提问作者Nikolay Klimenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:20:56