大模型原理:BPE分词器介绍 作者:马育民 • 2026-01-03 19:47 • 阅读:10003 # 介绍 在大模型的技术栈中,分词器(Tokenizer)是连接人类文字与模型向量的第一道桥梁。而在众多分词算法里,**字节对编码(Byte Pair Encoding,简称BPE)** 是 **绝对的主流**——从GPT系列、Llama系列,到通义千问、百川等开源大模型,几乎所有生成式大模型都选择BPE作为核心分词方案。 # 解决传统分词的两大痛点 在BPE出现之前,大模型的分词方案主要分为两类:**字级分词** 和 **词级分词**,但这两种方案都有缺点 ### 1. 词级分词的痛点:未登录词(OOV)问题 词级分词以 **单词** 为最小单位,比如英文中把`apple`作为一个分词单元,中文中把 `人工智能` 作为一个分词单元。这种方式的优势是语义完整,但缺点也极其明显: - 词典规模爆炸:英文常用单词就有几十万,加上专业术语、新词,词典大小会无限膨胀; - **未登录词**(Out-Of-Vocabulary,**OOV**)问题:模型遇到词典中没有的词(如 `生成式AI`、`元宇宙`)时,只能标记为``(未知词元),完全无法理解其语义。 ### 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. 分词的最小初始单元是**字符**,且每个单词末尾添加``标记(用于区分单词边界; 2. 合并的核心依据是**字符对的出现频率**,频率越高,越优先合并; 3. 迭代合并的终止条件是**达到预设的词典大小**或**没有可合并的字符对**。 ### 步骤1:初始化——将文本拆分为最小字符单元 首先,我们将输入文本拆分为单词,再将每个单词拆分为字符,并添加``标记: ``` low → l o w low → l o w low → l o w new → n e w new → n e w wide → w i d e wide → w i d e wide → w i d e ``` 此时,所有分词单元都是字符,词典为`{l, o, w, , n, e, i, d}`,大小为8。 ### 步骤2:统计频率——计算所有相邻字符对的出现次数 遍历所有单词的字符序列,统计每一对相邻字符的出现频率: ``` l-o: 3, o-w: 3, w-: 5(3次来自low,2次来自new) n-e: 2, e-w: 2 w-i: 3, i-d: 3, d-e: 3, e-: 3 ``` 其中,`w-`的出现频率最高,为5次。 ### 步骤3:迭代合并——将高频字符对合并为新Token 将频率最高的字符对`w-`合并为新的Token`w`,并更新所有单词的序列: ``` low → l o w (原w-合并为w) new → n e w (原w-合并为w) wide → w i d e (无w-,不更新) ``` 此时,词典新增了`w`,大小变为9。 ### 步骤4:重复迭代——直到达到预设词典大小 我们继续统计新序列中的字符对频率,重复「统计→合并」的过程: 1. 第二次合并:频率最高的是`l-o`(3次),合并为`lo`,词典大小10; 2. 第三次合并:频率最高的是`lo-w`(3次),合并为`low`,词典大小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`(或高频组合),不会出现``标记,保证了模型对新词的理解能力。 ### 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. **文本预处理**:清洗文本(统一编码、去除无意义符号),添加单词边界标记``; 2. **初始化字符序列**:将所有单词拆分为字符单元; 3. **迭代合并**:重复「统计字符对频率→合并高频字符对→更新序列」,直到达到预设词典大小; 4. **生成词典与规则**:将所有Token与唯一ID映射,保存合并规则。 ### 2. 推理阶段:对新文本进行分词 推理阶段的输入是**新文本**,输出是**Token ID序列**,流程如下: 1. **文本预处理**:与训练阶段保持一致的清洗规则; 2. **字符拆分**:将新文本拆分为字符单元,添加``标记; 3. **应用合并规则**:按照训练阶段生成的合并规则,从后往前依次合并字符对,直到无法再合并; 4. **Token转ID**:将最终的Token序列映射为词典中的唯一ID,作为模型的输入。 ### 关键注意点 - **预处理规则一致**:推理阶段的文本预处理规则必须与训练阶段完全一致,否则会导致分词结果错误; - **合并规则顺序**:推理阶段必须严格按照训练阶段的合并顺序进行,不能打乱顺序,否则会生成错误的Token。 # 五、BPE的变种与优化 随着大模型的发展,BPE也出现了一些变种和优化方案,以适应不同的场景需求。其中,最主流的两个变种是**GPT的BPE**和**SentencePiece的BPE**。 ### 1. GPT的BPE:针对英文优化的经典实现 OpenAI在GPT系列模型中使用的BPE,是最经典的实现之一,其核心优化点在于: - 去除了单词边界标记``,而是通过空格来区分单词; - 对英文词缀进行了优化,比如`ing` `ed` `ly`等词缀会被优先合并; - 词典大小固定为50257,兼顾了效率和语义。 ### 2. SentencePiece的BPE:无监督跨语言分词 SentencePiece是Google提出的开源分词工具,其BPE实现的核心优势在于: - **无监督分词**:不需要对文本进行预分词(如中文无需先分词为词),直接对原始字符进行处理; - **支持子词正则化**:在推理阶段引入随机化,提升模型的泛化能力; - **跨语言兼容性**:完美支持中文、日文等无天然分隔符的语言。 SentencePiece的BPE被广泛应用于多语言大模型,如T5、mBERT等。 # 总结 BPE分词器的核心价值,在于它完成了从「人类文字」到「模型可理解的Token」的转换,是大模型的「语言翻译官」。它通过迭代合并高频字符对,平衡了词典大小、语义完整性和计算效率,完美解决了传统分词的痛点。 原文出处:http://malaoshi.top/show_1GW2WgnAuVe5.html