大模型原理:BPE分词器介绍

介绍

在大模型的技术栈中,分词器(Tokenizer)是连接人类文字与模型向量的第一道桥梁。而在众多分词算法里,字节对编码(Byte Pair Encoding,简称BPE) 是 绝对的主流——从GPT系列、Llama系列,到通义千问、百川等开源大模型,几乎所有生成式大模型都选择BPE作为核心分词方案。

解决传统分词的两大痛点

在BPE出现之前,大模型的分词方案主要分为两类:字级分词 和 词级分词,但这两种方案都有缺点

1. 词级分词的痛点:未登录词(OOV)问题

词级分词以 单词 为最小单位,比如英文中把apple作为一个分词单元,中文中把 人工智能 作为一个分词单元。这种方式的优势是语义完整,但缺点也极其明显:

  • 词典规模爆炸:英文常用单词就有几十万,加上专业术语、新词,词典大小会无限膨胀;

  • 未登录词(Out-Of-Vocabulary,OOV)问题:模型遇到词典中没有的词(如 生成式AI、元宇宙)时,只能标记为<unk>(未知词元),完全无法理解其语义。

2. 字级分词的痛点:语义丢失问题

字级分词以 字符 为最小单位,比如英文中把a、p、p、l、e 作为分词单元,中文中把 人、工、智、能 作为分词单元。这种方式解决了OOV问题,但带来了新的麻烦:

  • 语义丢失:单个字符不具备完整语义,模型需要额外学习字符的组合关系,增加了训练难度;

  • 序列长度过长:同样的文本,字级分词的序列长度是词级分词的数倍,大幅提升了模型的计算成本。

BPE的目标:平衡词典大小与语义完整性

BPE由Philip Gage于1994年提出,最初用于数据压缩,2015年被Google引入NLP领域。它的核心思想是【从最小单元出发,通过迭代合并高频字符对,生成兼顾语义和效率的分词单元(Token)】,完美解决了传统分词的两大痛点:

  • 既避免了词级分词的OOV问题,又解决了字级分词的语义丢失问题;
  • 词典大小可控,可根据模型需求灵活调整。

BPE的核心原理

BPE的核心流程可以总结为「初始化→统计频率→迭代合并→生成词典」四步,我们以英文句子low low low new new wide wide wide为例,一步步拆解BPE的工作过程。

前置约定

  1. 分词的最小初始单元是字符,且每个单词末尾添加</w>标记(用于区分单词边界;
  2. 合并的核心依据是字符对的出现频率,频率越高,越优先合并;
  3. 迭代合并的终止条件是达到预设的词典大小或没有可合并的字符对。

步骤1:初始化——将文本拆分为最小字符单元

首先,我们将输入文本拆分为单词,再将每个单词拆分为字符,并添加</w>标记:

low</w> → l o w </w>
low</w> → l o w </w>
low</w> → l o w </w>
new</w> → n e w </w>
new</w> → n e w </w>
wide</w> → w i d e </w>
wide</w> → w i d e </w>
wide</w> → w i d e </w>

此时,所有分词单元都是字符,词典为{l, o, w, </w>, n, e, i, d},大小为8。

步骤2:统计频率——计算所有相邻字符对的出现次数

遍历所有单词的字符序列,统计每一对相邻字符的出现频率:

l-o: 3, o-w: 3, w-</w>: 5(3次来自low</w>,2次来自new</w>)
n-e: 2, e-w: 2
w-i: 3, i-d: 3, d-e: 3, e-</w>: 3

其中,w-</w>的出现频率最高,为5次。

步骤3:迭代合并——将高频字符对合并为新Token

将频率最高的字符对w-</w>合并为新的Tokenw</w>,并更新所有单词的序列:

low</w> → l o w</w> (原w-</w>合并为w</w>)
new</w> → n e w</w> (原w-</w>合并为w</w>)
wide</w> → w i d e </w> (无w-</w>,不更新)

此时,词典新增了w</w>,大小变为9。

步骤4:重复迭代——直到达到预设词典大小

我们继续统计新序列中的字符对频率,重复「统计→合并」的过程:

  1. 第二次合并:频率最高的是l-o(3次),合并为lo,词典大小10;
  2. 第三次合并:频率最高的是lo-w</w>(3次),合并为low</w>,词典大小11;
  3. 第四次合并:频率最高的是w-i(3次),合并为wi,词典大小12;
    …

当词典大小达到我们预设的阈值(比如10000)时,迭代终止。最终,我们得到了一套从「字符」到「高频组合Token」的词典。

BPE的核心输出

  1. Token词典:包含所有初始字符和合并生成的Token,以及对应的唯一ID;
  2. 合并规则:记录了每一步的合并操作,用于推理时对新文本进行分词。

优势

BPE能成为GPT、Llama、通义千问等主流大模型的分词方案,核心在于它具备以下四大优势,完美适配大模型的需求。

1. 完美解决OOV问题

BPE的分词单元是「字符→高频组合」的迭代结果,对于任何未见过的新词,都可以拆分为已有的字符或Token。例如,模型从未见过「GPT-4o」这个词,但BPE可以将其拆分为G P T - 4 o(或高频组合),不会出现<unk>标记,保证了模型对新词的理解能力。

2. 词典大小可控,平衡效率与语义

BPE的词典大小可以通过迭代次数灵活调整:

  • 词典越小,分词粒度越细(接近字级分词),计算效率高,但语义完整性差;
  • 词典越大,分词粒度越粗(接近词级分词),语义完整性好,但计算效率低。

大模型通常会选择32000~50000的词典大小(如Llama 2的词典大小为32000,GPT-3的词典大小为50257),在效率和语义之间取得最佳平衡。

3. 跨语言通用性强

BPE不依赖于语言的天然分隔符(如英文的空格、中文的词边界),无论是英文、中文、日文还是代码,都可以用同样的逻辑进行分词。

  • 对于英文:BPE会自动合并为单词或词缀(如un- happy ness);
  • 对于中文:BPE会自动合并为字、词或短语(如「大」「模型」「人工智能」);
  • 对于代码:BPE会自动合并为关键字、变量名或运算符(如def = for)。

这种跨语言通用性,让BPE成为多语言大模型的最佳选择。

4. 与Transformer架构高度适配

大模型的核心架构是Transformer,其多头注意力机制对序列长度非常敏感。BPE通过合并高频字符对,大幅缩短了文本的序列长度,降低了注意力机制的计算复杂度。例如,同样的中文句子,字级分词的序列长度是BPE分词的2~3倍,BPE能有效提升模型的训练和推理效率。

BPE的实际应用

BPE的使用分为训练阶段和推理阶段,两个阶段的流程相互关联,但目标不同。

1. 训练阶段:生成Token词典与合并规则

训练阶段的输入是海量原始文本,输出是Token词典和合并规则,流程如下:

  1. 文本预处理:清洗文本(统一编码、去除无意义符号),添加单词边界标记</w>;
  2. 初始化字符序列:将所有单词拆分为字符单元;
  3. 迭代合并:重复「统计字符对频率→合并高频字符对→更新序列」,直到达到预设词典大小;
  4. 生成词典与规则:将所有Token与唯一ID映射,保存合并规则。

2. 推理阶段:对新文本进行分词

推理阶段的输入是新文本,输出是Token ID序列,流程如下:

  1. 文本预处理:与训练阶段保持一致的清洗规则;
  2. 字符拆分:将新文本拆分为字符单元,添加</w>标记;
  3. 应用合并规则:按照训练阶段生成的合并规则,从后往前依次合并字符对,直到无法再合并;
  4. Token转ID:将最终的Token序列映射为词典中的唯一ID,作为模型的输入。

关键注意点

  • 预处理规则一致:推理阶段的文本预处理规则必须与训练阶段完全一致,否则会导致分词结果错误;
  • 合并规则顺序:推理阶段必须严格按照训练阶段的合并顺序进行,不能打乱顺序,否则会生成错误的Token。

五、BPE的变种与优化

随着大模型的发展,BPE也出现了一些变种和优化方案,以适应不同的场景需求。其中,最主流的两个变种是GPT的BPE和SentencePiece的BPE。

1. GPT的BPE:针对英文优化的经典实现

OpenAI在GPT系列模型中使用的BPE,是最经典的实现之一,其核心优化点在于:

  • 去除了单词边界标记</w>,而是通过空格来区分单词;
  • 对英文词缀进行了优化,比如ing ed ly等词缀会被优先合并;
  • 词典大小固定为50257,兼顾了效率和语义。

2. SentencePiece的BPE:无监督跨语言分词

SentencePiece是Google提出的开源分词工具,其BPE实现的核心优势在于:

  • 无监督分词:不需要对文本进行预分词(如中文无需先分词为词),直接对原始字符进行处理;
  • 支持子词正则化:在推理阶段引入随机化,提升模型的泛化能力;
  • 跨语言兼容性:完美支持中文、日文等无天然分隔符的语言。

SentencePiece的BPE被广泛应用于多语言大模型,如T5、mBERT等。

总结

BPE分词器的核心价值,在于它完成了从「人类文字」到「模型可理解的Token」的转换,是大模型的「语言翻译官」。它通过迭代合并高频字符对,平衡了词典大小、语义完整性和计算效率,完美解决了传统分词的痛点。


原文出处:/show_1GW2WgnAuVe5.html