 和Unigram 区别)
BPE (Byte-Pair Encoding, 字节对编码)和Unigram Language Model是目前大语言模型LLM中最主流的两种子词分词算法。它们的核心目标都是将文本拆分成有意义的“子词”以减少词表大小并处理未登录词OOV但它们的底层逻辑、训练方式和分词机制有显著区别。以下是详细的对比1. 核心逻辑区别特性BPE (如 Qwen, Llama, GPT-4)Unigram (如 SentencePiece, T5, Gemma)算法类型确定性 (Deterministic)概率性 (Probabilistic)训练方式自底向上从单个字符开始迭代合并出现频率最高的相邻符号对直到达到预定词表大小。自顶向下先建立一个非常大的候选词表然后通过迭代删除概率最低的词直到达到预定词表大小。分词过程贪心匹配在推理时按照固定规则优先匹配最长子词进行分割结果是唯一确定的。采样/搜索在推理时存在多种可能的分词方案。Unigram 模型会根据概率分布选择总概率最高的那一种。唯一性对于同一段文本BPE 永远给出相同的结果。对于同一段文本Unigram 理论上可以有多种分词方式虽然实践中通常取最优或采样这引入了随机性。2. 具体工作流程详解BPE 的工作原理 (Qwen, Llama 使用)初始化词表中包含所有单个字符。统计统计语料中所有相邻字符对的出现频率。合并找出频率最高的一对字符例如 “he” 和 “l” 在 “hello” 中频繁一起出现将它们合并成一个新 token “hell” 加入词表。重复重复步骤2-3直到词表大小达到预设值例如 32k tokens。分词新文本到来时先拆成字符然后应用之前学到的合并规则。规则是固定的例如总是优先合并 “th”。优点逻辑简单推理速度快确定性算法。缺点对于低频出现的子词组合可能不是最优分割因为它只看频率不看语言模型概率。Unigram 的工作原理 (T5, Gemma 使用)初始化建立一个巨大的候选词表包含所有出现的子串比如 256k tokens。评估使用 Unigram 语言模型评估每个 token 的概率P ( t ) P(t)P(t)。删除移除概率最低的 10%-20% 的 token保留高频且有意义的词。重复重复删除过程直到词表大小达标。分词给定一段文本 “hello”可能存在多种分法[h, e, l, l, o]或[he, l, lo]或[hel, lo]等。Unigram 模型会计算每种分法下所有 token 概率的乘积P ( s e g m e n t ) ∏ P ( t o k e n ) P(segment) \prod P(token)P(segment)∏P(token)。选择概率乘积最大的那种分法作为最终结果。优点从语言模型概率角度出发理论上能更好地捕捉语言结构处理边界情况更灵活。缺点推理过程涉及搜索或采样计算复杂度略高尽管现代实现已优化得很快。3. 对生成任务的影响关键差异在训练阶段Unigram 通常被认为比 BPE 更优因为它的概率模型更一致。但在**推理生成**阶段两者差异如下BPE分词是确定性的。无论你怎么生成“hello” 永远被分成[he, llo]假设这是学到的规则。这意味着生成的文本 Token 序列是可预测的。Unigram分词是基于概率的。在生成过程中模型可能会“看到”不同的 token 序列。重要影响在 Unigram 模型中生成的长度Token 数量会随模型设置变化。如果你增加max_new_tokens模型可能会生成更少的实际 Token因为一个长 token 比多个短 token 概率高或者反之。这导致 Unigram 模型的“输出长度”不如 BPE 稳定。注许多基于 Unigram 的模型如 T5在训练时会调整损失函数来缓解这个问题。4. 谁在用BPE 阵营Qwen(Qwen2.5, Qwen-VL)Llama(Meta)GPT(OpenAI)Mistral理由实现简单兼容性好推理速度极快且在实际大模型训练中表现足够好。Unigram 阵营T5(Google)Gemma(Google)PaLM(早期版本)SentencePiece工具包许多模型用它预处理理由Google 早期研究认为 Unigram 在翻译和跨语言任务上更鲁棒能更好地处理词汇化边界。5. 总结维度BPEUnigram简单程度⭐⭐⭐ (简单直观)⭐⭐ (复杂需概率计算)推理速度快 (确定性匹配)稍慢 (需搜索最优分割)词表效率好通常更好 (概率驱动)生成稳定性高 (Token 序列确定)较低 (Token 数量可能波动)主要使用者Qwen, Llama, GPT, MistralT5, Gemma, PaLM结论如果使用的是Qwen2.5你使用的是BPE。这意味着你的分词规则是固定的模型将文本切分为子词的方式是确定性的。如果你切换到使用 Unigram 的模型如 Gemma你可能会发现同样的输入产生了不同长度的 Token 输出这是正常现象由算法本身的概率性质决定。