大模型分词算法全解析:BPE、WordPiece、SentencePiece 实战对比

分词(Tokenization)是大模型处理文本的第一步,相当于给模型 "拆分语言积木"------ 不同的拆分方式,直接影响模型的理解效率、显存占用和生成效果。

市面上主流大模型的分词算法主要有三类:BPE、WordPiece、SentencePiece。今天就用大白话拆解它们的核心逻辑、异同点,再结合 LLaMA、BERT、ChatGLM 等热门模型的分词实践,帮你彻底搞懂 "大模型是怎么切分文本的"。

一、Byte-Pair Encoding(BPE):按频率合并,大模型的 "基础分词法"

BPE(字节对编码)是最经典的分词算法,GPT-2、BART、LLaMA 等主流模型都在用。它的核心思路特别简单:从最小字符开始,反复合并高频相邻子词,直到达到目标词表大小。

1. BPE 构建词典的完整步骤

以英文 "low""lower""newest""widest" 为例,一步步看 BPE 怎么造词表:

  1. 准备阶段:确定训练语料(比如上述 4 个单词)和目标词表大小(假设目标:10 个词);
  2. 字符级拆分 :把每个单词拆成最小字符,末尾加 "</w>"(标记单词结束),统计频率:
    • low</w>: 1、lower</w>: 1、newest</w>: 1、widest</w>: 1
    • 拆分后:l o w </w>、l o w e r </w>、n e w e s t </w>、w i d e s t </w>
  3. 高频合并:统计所有相邻字符对的频率,合并最高频的对。比如 "e" 和 "s" 出现 2 次(newest、widest),合并为 "es";
  4. 重复合并:不断重复步骤 3------ 下次合并 "es" 和 "t"(频率 2)为 "est",再合并 "w" 和 "i"(频率 1)...... 直到词表达到 10 个词;
  5. 停止条件:词表大小达标,或下一个最高频字符对的频率为 1(再合并无意义)。

2. BPE 的核心特点

  • 优点:逻辑简单、易实现,能平衡 "词粒度" 和 "字符粒度"------ 高频词会被合并成一个子词(比如 "est"),低频词保留字符级拆分,兼顾效率和覆盖率;
  • 缺点:对低频词拆分过细(比如生僻词可能拆成单个字符),处理中文时容易出现 "单字拆分"(LLaMA 原生中文分词就是如此)。

二、WordPiece:按语言模型概率合并,BERT 的 "智能分词法"

WordPiece 是 Google 为 BERT 设计的分词算法,本质上是 BPE 的 "改进版"------ 核心思想和 BPE 一致,但合并规则不同

1. WordPiece 与 BPE 的核心异同

对比维度 BPE WordPiece
核心思想 从字符开始,逐步合并子词 同 BPE(字符→子词)
合并规则 选择出现频率最高的相邻子词合并 选择能让语言模型概率提升最大的相邻子词合并
目标 减少文本总 token 数 提升模型对文本的语义理解
代表模型 GPT-2、LLaMA、BART BERT、DistilBERT

2. 合并规则的通俗解释

BPE 像 "看 popularity 选队友"------ 谁凑在一起出现次数多,就合并谁;WordPiece 像 "看默契度选队友"------ 合并后能让整个句子的 "语义合理性"(语言模型概率)最高,才合并。

比如 "newest" 中的 "e" 和 "s",BPE 合并是因为它们一起出现 2 次;WordPiece 合并是因为 "es" 作为一个子词,能让 "newest" 的语义更连贯(模型预测 "newest" 的概率更高)。

3. WordPiece 的核心特点

  • 优点:拆分更贴合语义,能减少 "无意义子词"(比如不会把 "apple" 拆成 "app"+"le" 这种语义割裂的组合);
  • 缺点:计算复杂度比 BPE 高(需要计算语言模型概率),对低频词的处理效果仍有限。

三、SentencePiece:把空格当字符,多语种模型的 "万能分词法"

SentencePiece 是 Google 推出的 "通用分词工具",不是单一算法 ------ 它支持 BPE 和 Unigram 两种核心逻辑,核心创新是把空格当作特殊字符处理。ChatGLM、BLOOM、PaLM 等多语种模型都在用。

1. SentencePiece 的核心思路

传统分词算法(BPE/WordPiece)会先按空格拆分单词,再处理每个单词;而 SentencePiece 直接把整个句子当作 "字符序列",空格被编码成特殊符号(比如 "▁"),再用 BPE 或 Unigram 算法拆分。

举个例子,句子 "I love China":

  • 传统 BPE:先拆成 "I""love""China" 三个单词,再分别拆分;
  • SentencePiece:先转换成 "▁I▁love▁China"(空格→▁),再整体按 BPE 合并,可能拆成 "▁I""▁love""▁Chi""na"。

2. SentencePiece 的核心特点

  • 优点:
    1. 支持多语种:不用单独处理每种语言的空格、标点,适配中文(无空格)、英文(有空格)等多种语言;
    2. 灵活性高:可选择 BPE 或 Unigram 算法,按需调整;
    3. 无词表依赖:能处理生僻词、网络新词(拆成字符级);
  • 缺点:词表通常较大(比如 BLOOM 词表达 25 万),对模型显存有一定要求。

四、三大分词算法核心对比表

算法 核心逻辑 合并规则 代表模型 优点 缺点
BPE 字符→高频合并→子词 按出现频率最高合并 GPT-2、LLaMA、BART 简单易实现、效率高 低频词拆分过细、中文支持弱
WordPiece 字符→语义合并→子词 按语言模型概率最大合并 BERT、DistilBERT 语义贴合度高 计算复杂、多语种支持弱
SentencePiece 空格当特殊字符 + BPE/Unigram 可选(频率 / 概率) ChatGLM、BLOOM、PaLM 多语种友好、灵活 词表大、显存占用高

五、实战对比:主流大模型的分词方式差异

不同模型选择的分词算法不同,直接导致了它们的分词效果天差地别 ------ 尤其是处理中文时。

1. 热门模型分词方式一览

模型 分词算法 词表大小 中文分词特点
LLaMA(原生) BPE 32000 分词极细,平均 1 个汉字拆成 1.45 个 token(比如 "中" 拆成 2 个 token)
Chinese LLaMA BPE(扩展中文词表) ~80000 1-2 个汉字拆成 1 个 token,编码效率大幅提升
BERT WordPiece 30522 中文按单字拆分("中国"→"中"+"国"),语义贴合度高
ChatGLM-6B SentencePiece(BPE) 65024 平衡中英文,中文 1-2 字拆 1 个 token,效率和语义兼顾
BLOOM SentencePiece(Unigram) 250880 多语种适配,中英文分词效率和 ChatGLM 接近

2. 分词效果直观对比(以 "我爱中国" 为例)

  • LLaMA(原生):+(拆成 2 个 token)++(拆成 2 个 token)++(拆成 2 个 token)+(拆成 2 个 token)→ 共 10 个 token;
  • Chinese LLaMA:▁我爱+中国→ 共 2 个 token;
  • BERT:+++→ 共 4 个 token;
  • ChatGLM-6B:▁我爱中国→ 共 1 个 token;
  • BLOOM:▁我+++→ 共 4 个 token。

3. 核心区别总结

  1. 中文支持:ChatGLM-6B > Chinese LLaMA > BLOOM > BERT > LLaMA(原生);
  2. 分词效率(token 数越少效率越高):扩展词表的模型 > 多语种模型 > 原生单语种模型;
  3. 语义贴合度:WordPiece(BERT)> SentencePiece(ChatGLM)> BPE(LLaMA);
  4. 显存占用:词表越大占用越高(BLOOM > ChatGLM > LLaMA > BERT)。

六、总结:怎么选分词算法?

  1. 若做英文单语种模型:优先 BPE(简单高效)或 WordPiece(语义更好);
  2. 若做多语种模型:必选 SentencePiece(空格处理 + 多算法支持);
  3. 若做中文模型:优先用 SentencePiece 或扩展中文词表的 BPE(避免单字拆分);
  4. 若模型参数量小(<7B):选小词表 BPE(节省显存);若模型参量大(>13B):可选大词表 SentencePiece(提升效率)。

分词算法是大模型的 "地基"------ 选对了,模型能以更少的 token 处理更多文本,显存占用更低、生成更流畅。理解了 BPE、WordPiece、SentencePiece 的核心逻辑,不仅能更好地选型,还能在模型微调时针对性优化词表(比如给 LLaMA 扩展中文词表),让模型更适配你的任务~

相关推荐
NAGNIP11 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab13 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab13 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP16 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年16 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼17 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS17 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区18 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈18 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang18 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx