Zubnet AI学习Wiki › BPE
基础

BPE

别名:字节对编码、子词分词
构建分词器词汇表最常用的算法。BPE从单个字节或字符开始,迭代地将最频繁的相邻对合并为一个新的token。经过数千次合并后,常见词汇变成单个token(如"the"、"function"),而稀有词汇则被拆分为子词片段(如"un" + "common")。被GPT、Claude、Llama及大多数现代LLM所使用。

为什么重要

BPE是你的分词器之所以如此工作的原因。它解释了为什么常见词汇开销低(一个token)、稀有词汇开销高(多个token),以及为什么非英语文本成本更高(分配给非英语字符对的合并次数更少)。理解BPE有助于你预测token数量、优化提示词,并理解为什么不同的分词器对相同文本会产生不同的结果。

深度解析

算法流程:(1) 从一个包含单个字节(256个条目)或字符的基础词汇表开始,(2) 扫描训练语料库并统计每对相邻token的频次,(3) 将最频繁的对合并为新token并添加到词汇表中,(4) 重复步骤2–3直到词汇表达到目标大小(通常为32K–128K)。合并顺序定义了优先级:"th"可能是第50次合并,而"ing"是第200次合并,这意味着"th"在此分词器中是更基础的单元。

SentencePiece

SentencePiece(Google)是一种流行的BPE实现,它将输入视为原始字节而非预分词的单词。这意味着它可以处理任何语言而无需特定语言的预处理——无需中文的分词或土耳其语的形态分析。大多数现代LLM使用SentencePiece或类似的字节级BPE变体。另一种选择WordPiece(BERT使用)与之类似,但使用略有不同的合并标准。

训练语料库的重要性

BPE合并反映了训练语料库的统计特征。在英语代码上训练的分词器会为"function"、"return"和"const"获得高效合并,但会将印地语或阿拉伯语文本碎片化。这就是为什么多语言分词器需要平衡的训练语料库——合并表必须为每种语言的常见模式分配足够的合并次数。Llama 3的分词器明确地在更平衡的多语言数据上进行训练,与Llama 2相比,非英语token效率提高了2–3倍。

相关概念

← 所有术语
← BLEU & ROUGE Bria →