《Token(词元)全景综述》是一篇关于大语言模型(LLM)中词元化(Tokenization)的系统性综述论文(150页)。全文共15章,覆盖了从基础算法到前沿研究的广泛内容。
很多人第一次被大模型震撼,是它能写诗、写代码、做翻译。
但很多人第一次对大模型失望,是发现它连“strawberry 里有几个 r”都答不对。
这不是模型“笨”,而是因为它根本不直接看文字。
在模型内部,文本先被切成一个个 Token(词元),然后才变成数字向量。
这个切分过程,叫 Tokenization(词元化)。
它决定了大模型看到什么、看不到什么,也直接影响:
模型推理快不快
多语言公不公平
API 调用贵不贵
安全防护牢不牢
模型能不能做字符级任务
这篇综述,就是系统讲清楚:Token 是怎么来的、有什么问题、未来往哪走。
01Token 是什么?为什么不能直接用字或词?
大模型处理文本的流程大致是:
原始文本 → 规范化 → 预词元化 → 词元化 → Token ID → 嵌入向量 → 模型
其中最关键的一步,是把文本切成 Token。
1. 词级模型:OOV 问题严重
如果每个词一个 Token,词表会爆炸。
英语至少上百万词,中文、德语、土耳其语更是可以无限造词。
一旦遇到没见过的词,就只能标记为 ,模型完全不知道它是什么意思。
例子:
如果词表里有 America,但没有 Americans,那 Americans就会被当成未知词。
模型没法知道它和 America有关系。
2. 字符级模型:没有 OOV,但序列太长
字符级模型用字母、汉字、字节做 Token。
好处是永远不会遇到 OOV。
坏处是序列变得非常长,计算量爆炸,而且单个字符几乎没有语义。
例子:
California用词级是 1 个 Token,用字符级是 10 个 Token。
模型要多花 10 倍计算量,但每个字符单独看几乎没意义。
3. 子词词元化:折中方案
子词词元化介于字符和词之间。
它把常见词整体保留,把罕见词拆成更小的子词。
这样既避免 OOV,又控制词表大小,还缩短序列。
主流算法有三个:
BPE(Byte-Pair Encoding)
Unigram
WordPiece
BPE 最初是数据压缩算法。
它的思路很简单:
找出文本里最常一起出现的相邻 Token,把它们合并成一个新 Token。
比如:
初始:l o w
发现 l o经常一起出现 → 合并成 lo
再发现 lo w经常一起出现 → 合并成 low
这样反复合并,直到词表达到目标大小。
BPE 的优点是简单、压缩好、推理快。
GPT 系列、Llama 系列、Qwen 系列基本都用 BPE。
但 BPE 也有问题:
会产生大量“垃圾中间 Token”
有些 Token 训练后根本用不到,浪费词表
可能破坏词素边界
所以后来出现了很多变体:
BPE-dropout:随机丢弃合并,让模型更鲁棒
SuperBPE:允许跨空格合并,形成多词 Token
BoundlessBPE:从训练开始就允许跨预词元边界
PickyBPE:剔除中间垃圾 Token
ScaffoldBPE:移除“脚手架”Token
Unigram 是概率模型。
它假设文本是由一个个 Token 独立采样拼接而成的。
训练时先准备一个很大的种子词表,然后不断删除对似然影响最小的 Token,直到词表大小合适。
推理时,它用 Viterbi 算法找概率最大的切分方式。
Unigram 的优点是:
更符合形态学
天然支持子词正则化(采样不同切分)
多语言表现有时更好
缺点是推理效率不如 BPE,所以实际采用不如 BPE 广泛。
3. WordPiece:BERT 用的那个
WordPiece 最早由 Google 提出。
训练时它选择能最大提升语言模型似然的 Token 对进行合并。
推理时常用 MaxMatch:从左到右,每次匹配最长的词表 Token。
BERT 用的就是 WordPiece。
但后来 Hugging Face 的 WordPiece 其实是用 BPE 训练的,只是推理用 MaxMatch。
所以“WordPiece”现在更像一个家族,而不是单一算法。
03预词元化:为什么 Token 不能跨空格?
在真正切 Token 之前,还有一个步骤叫 预词元化。
它先把文本切成粗粒度单元,比如按空格、标点、数字切。
为什么要这样做?
防止 Token 跨空格,比如 New York不应该被切成 NewY ork
提高训练和推理效率
让数字、标点处理更一致
常见操作:
规范化:大小写、Unicode、去重音
空格标记:用 ▁或 Ġ表示空格
数字处理:逐位切、三位一组、右对齐等
数字处理特别重要。
Llama 2 逐位切,Llama 3 三位一组切。
不同切法直接影响算术能力。
04多语言问题:英语用户和缅甸语用户,成本差 3.8 倍
这是整篇综述里最扎心的部分之一。
大多数 Tokenizer 是在英语为主的语料上训练的。
结果就是:
英语压缩率高,Token 少
低资源语言被过度切分,Token 多
同样一句话,不同语言 API 成本差很多
论文里有个数据:
用 GPT-4o 生成《世界人权宣言》,英语 vs 缅甸语,成本差 3.8 倍。
如果按国家平均工资折算劳动时间,差距可达 54.3 倍。
这就是所谓的 Token Tax(词元税)。
低资源语言用户,为同样的信息付更多钱、花更多时间。
解决方案包括:
多语言预词元化(、OSPE)
公平词表分配(PA-BPE、XLM-V)
字节级模型(ByT5、MAGNET、FlexiTokens)
转写(罗马化、IPA)
后处理适配(词表扩展、继续训练)
但至今没有完美方案。
05评估:为什么不能只看 Perplexity?
评估 Tokenizer 很难。
最直接的方法是训练一个模型看下游任务,但太贵。
所以大家用内在指标:
压缩率:Token 越少越好
Fertility:每个词平均几个 Token
Bits-per-byte:按字节归一化,可跨 Tokenizer 比较
Rényi 效率:衡量 Token 频率分布是否最优
形态对齐:Token 边界是否和词素边界一致
跨语言公平性:不同语言 Token 数是否均衡
但要注意:
Perplexity 不能直接跨 Tokenizer 比较,因为分母不同。
必须用 bits-per-byte 或 bits-per-character 这类与 Tokenizer 无关的指标。
还有一个专门测字符级能力的基准:
CUTE
CharBench
LMentry
EXECUTE
NUPA
比如“strawberry 里有几个 r”,就是典型 CUTE 任务。
大模型经常错,因为它的 Token 里没有单独的 r。
06非规范词元化:同一个文本,多种切法
一个字符串往往有多种 Token 切法。
标准切法叫规范词元化,其他叫非规范词元化。
比如 tokenization可以切成:
tokenization(规范)
token iz ation
tok en iz ation
非规范词元化有两大用途:
1. 训练时:子词正则化
随机采样不同切法,让模型更鲁棒。
类似图像里的数据增强。
2. 推理时:边缘化
理论上,字符串概率应该是所有切法概率之和。
但精确计算太难,通常用重要性采样近似。
非规范词元化也有风险:
可以用来绕过安全对齐,进行对抗攻击。
07字节、字符与视觉 Token:要不要干脆不要 Tokenizer?
既然子词 Tokenizer 这么多问题,能不能不用?
1. 字节级模型
用 UTF-8 字节做 Token,词表只有 256。
没有 OOV,但序列极长。
代表:ByT5、MambaByte、EvaByte。
2. 隐式词元化
模型内部自己学怎么把字节聚合成隐式 Token。
代表:CANINE、MegaByte、BLT、H-Net、FlexiTokens。
3. 视觉文本表示
把文本渲染成图片,用视觉模型处理。
代表:PIXEL、CLIPPO、PIXAR。
优点是跨语言、抗扰动、无词表。
缺点是生成文本困难,需要 OCR,而且渲染本身有歧义。
08现代 LLM 的 Tokenizer 现状
论文统计了前沿模型:
几乎都用 BPE
词表大小 100k–275k
多语言支持越来越强
Claude 可能用最短路径 Tokenization,词表只有 49k/16k
Hugging Face 上 94% 的模型复用已有 Tokenizer
这说明:
Tokenizer 创新很少,大家基本沿用少数几种设计。
09安全与理论:Token 也是攻击面安全风险
不可见字符注入:零宽连接符、西里尔字母冒充拉丁字母
非规范词元化绕过对齐
未充分训练 Token 作为攻击向量
控制 Token 注入,突破提示模板
BPE 和 MaxMatch 都可以用有限状态自动机表示。
Tokenization 优化问题在理论上大多是 NP-hard。
但实际中,自然语言的统计规律让问题变得可解。
10结论:Token 不是细节,是核心设计
这篇综述的核心结论可以归纳为五条:
Token 决定模型看到什么。
字符级信息被隐藏,导致算术、拼写、字符任务困难。
Token 影响成本与公平。








