同样的文本内容,在一个模型中可能只需要100个token,在另一个模型中却可能膨胀到300个。这背后的差异源于一个经常被忽视但至关重要的设计决策:词表大小的选择。
当研究者讨论大语言模型的scaling law时,焦点通常集中在模型参数量和训练数据量这两个维度。然而,2024年NeurIPS上发表的一篇论文揭示了一个被严重低估的因素——词表大小对模型性能的影响远比想象中更大。论文预测,LLaMA-70B的最优词表大小应该至少是216K,而非其实际使用的32K。这意味着,当前大多数大模型的词表配置可能远非最优。
词表:模型的"字典"如何影响一切
词表(Vocabulary)是语言模型能识别的所有token的集合。每个token可以是一个完整的单词、一个词根词缀,或者一个字符片段。当一段文本输入模型时,分词器(Tokenizer)会将其切分成一系列token,这些token的ID随后被转换为向量表示,成为模型处理的实际输入。
词表大小直接决定了三个核心指标:分词效率、模型参数量、以及上下文窗口的利用效率。
分词效率可以用压缩率(Compression Ratio)来量化。假设原始文本有$H$个字符,分词后有$D$个token,则压缩率为:
$$CR = \frac{D}{H}$$压缩率越低,意味着同样的内容被编码成更少的token。实验数据表明,压缩率与词表大小的关系可以近似表示为:
$$f(V) = a \log^2(V) + b \log(V) + c$$其中$a \approx 0.0064$,$b \approx -0.1581$,$c \approx 1.2047$。这个公式揭示了一个重要现象:压缩率随着词表增大而下降,但下降速度逐渐放缓——边际效益递减规律在词表设计中同样存在。
graph LR
A[输入文本] --> B[分词器]
B --> C[Token序列]
C --> D[Token ID]
D --> E[Embedding矩阵]
E --> F[向量表示]
subgraph "词表大小影响"
G[分词效率]
H[参数量]
I[上下文利用率]
end
B -.-> G
E -.-> H
C -.-> I
大词表 vs 小词表:一场复杂的权衡博弈
选择更大的词表还是更小的词表?这并非简单的"越大越好"或"越小越好",而是一场涉及多个维度的复杂权衡。
大词表的优势
更大的词表能带来更高的分词效率。以GPT-4为例,其词表大小约为100K,相比GPT-3的50K词表,同样的内容可以用更少的token表示。这意味着在相同的上下文窗口限制下,模型能够处理更多的实际文本内容。
多语言处理是大词表的另一大优势。对于使用CJK(中日韩)文字的语言,词表大小的影响尤为显著。以GPT-4的cl100k_base分词器为例:
- 英文文本中,“cat"是1个token
- 同样表示"猫"的汉字"猫”,在cl100k_base中需要3个token(
[163, 234, 104])
根据一项对200万翻译句对的分析,CJK语言的token数量相对英文的比例如下:
| 语言 | Token比率 |
|---|---|
| 中文(普通话) | 1.76x |
| 日语 | 2.12x |
| 韩语 | 2.36x |
这意味着,如果英文需要100个token,中文平均需要176个,日语需要212个,韩语则需要236个。词表越大,能够直接收录的CJK字符越多,这种效率差距就越小。LLaMA 3将词表从32K扩展到128K,很大程度上就是为了改善多语言处理效率。
graph TD
subgraph "大词表优势"
A1[更高的分词效率]
A2[更好的多语言支持]
A3[更有效的上下文利用]
A4[更少的OOV问题]
end
subgraph "大词表代价"
B1[更大的Embedding矩阵]
B2[更多的内存消耗]
B3[每个token计算开销增加]
B4[训练时间延长]
end
A1 --> C[权衡决策]
A2 --> C
A3 --> C
A4 --> C
B1 --> C
B2 --> C
B3 --> C
B4 --> C
大词表的代价
更大的词表意味着更大的embedding矩阵。Embedding矩阵的大小为:
$$N_{embedding} = V \times d$$其中$V$是词表大小,$d$是embedding维度。对于一个隐藏层维度为4096的模型:
- 32K词表:$32,000 \times 4,096 = 131,072,000$参数
- 128K词表:$128,000 \times 4,096 = 524,288,000$参数
词表增大4倍,仅embedding层就增加了近4亿参数。再加上输出层的语言模型头(LM Head),词表相关的参数量会翻倍。
对于小型模型而言,这个问题更加突出。Gemma 2B模型的embedding层占总参数的26%,而Gemma 7B模型中这一比例降至11%。模型越小,词表参数占比越高,盲目扩大词表会严重挤压模型的"有效容量"。
推理效率也受到影响。每次生成token时,模型需要计算整个词表上的概率分布。更大的词表意味着softmax计算涉及更大的维度,每个生成步骤的计算开销增加。
pie title Gemma 2B模型参数分布
"Embedding层 (26%)" : 26
"Transformer层 (74%)" : 74
pie title Gemma 7B模型参数分布
"Embedding层 (11%)" : 11
"Transformer层 (89%)" : 89
词表大小的数学本质:信息论视角
从信息论角度,词表大小决定了模型输出分布的熵的上界:
$$H(P) \leq \log(V)$$词表越大,理论上模型能够表达的信息量越大。但这并不意味着实际性能一定更好,因为更大的词表可能导致概率分布更加分散,增加模型学习的难度。
为了在不同词表大小之间公平比较模型性能,研究者提出了归一化损失函数:
$$\mathcal{L}_u = -\frac{1}{T} \sum_{i=1}^{T} \log \frac{p(w_i | w_{1:i-1}, V)}{p(w_i | V)}$$其中$p(w_i | V)$表示token $w_i$在分词语料库中的频率。这个归一化损失消除了词表大小对原始损失函数的系统性影响,使得不同词表配置的模型可以在同一基准下比较。
最优词表大小:NeurIPS 2024的核心发现
2024年NeurIPS发表的论文《Scaling Laws with Vocabulary: Larger Models Deserve Larger Vocabularies》系统性地研究了词表大小与模型scaling的关系。研究者训练了参数量从33M到3B的多个模型,每个模型使用不同大小的词表(从4K到96K),训练数据量最高达500B字符。
三种预测方法
论文提出了三种预测最优词表大小的方法,它们得出了高度一致的结论。
IsoFLOPs分析:在固定的计算预算下,寻找使归一化损失最小的词表配置。实验结果显示,词表参数$N_v$与计算预算$C$呈幂律关系:
$$N_v = 0.20 \times C^{0.42}$$而非词表参数$N_{nv}$的关系为:
$$N_{nv} = 0.08 \times C^{0.50}$$这表明词表参数的增长速度慢于非词表参数,但两者都与计算预算正相关。
导数求极值法:对总计算量公式求导,找到最优词表大小。总计算量可以表示为:
$$C \approx 6 N D \approx 6(N_{nv} + Vd) \times H \times f(V)$$其中$N = N_{nv} + Vd$是总参数量,$D = H \times f(V)$是总token数。令$\frac{\partial C}{\partial V} = 0$可以数值求解最优词表大小。
参数拟合:直接拟合归一化损失函数:
$$\mathcal{L}_u = -E + \frac{A_1}{N_{nv}^{\alpha_1}} + \frac{A_2}{N_v^{\alpha_2}} + \frac{B}{[Hf(V)]^\beta}$$然后寻找使损失最小的词表配置。
flowchart TB
subgraph "方法1: IsoFLOPs分析"
M1A[固定计算预算]
M1B[训练多组模型]
M1C[寻找最小损失点]
end
subgraph "方法2: 导数求极值"
M2A[建立计算量公式]
M2B[对词表大小求导]
M2C[数值求解最优值]
end
subgraph "方法3: 参数拟合"
M3A[拟合损失函数]
M3B[搜索最优配置]
M3C[预测最优词表]
end
M1C --> R[一致的结论]
M2C --> R
M3C --> R
缩放公式的实际应用
三种方法导出了一个统一的缩放公式:
$$N_v^{opt} = N_v^0 \times \left(\frac{N_{nv}}{N_{nv}^0}\right)^\gamma$$其中$\gamma \approx 0.83$是一个经验常数,$N_{nv}^0$和$N_v^0$是基准小模型的参数。
应用这个公式,论文对当前主流模型的最优词表大小进行了预测:
| 模型 | 实际词表 | 预测最优词表 | 差距 |
|---|---|---|---|
| LLaMA-70B | 32K | 216K+ | 7x |
| LLaMA-7B | 32K | 65K | 2x |
| Mistral-7B | 32K | 65K | 2x |
惊人的发现是:几乎所有主流开源模型的词表都偏小,只有Gemma-2-9B接近最优配置。
gantt
title 主流模型词表大小对比
dateFormat X
axisFormat %s
section 实际词表
LLaMA-70B (32K) :0, 32
LLaMA-7B (32K) :0, 32
Mistral-7B (32K) :0, 32
GPT-4 (100K) :0, 100
LLaMA-3 (128K) :0, 128
Gemma (256K) :0, 256
section 预测最优
LLaMA-70B最优 (216K) :crit, 0, 216
LLaMA-7B最优 (65K) :crit, 0, 65
Mistral-7B最优 (65K) :crit, 0, 65
数据量对最优词表的影响
论文还研究了训练数据量对最优词表的影响。在固定非词表参数的情况下:
- 当训练数据受限时,最优词表大小会减小(防止过拟合)
- 当训练数据充足时,最优词表大小会增加(更好利用数据)
这解释了一个现象:为什么早期的模型倾向于使用较小的词表?部分原因可能是训练数据相对有限,小词表有助于防止对罕见token的过拟合。
主流模型的词表演进
LLaMA系列的词表扩张
LLaMA系列模型的词表选择反映了对这一问题的认识演进:
- LLaMA 1 & 2:使用32K词表,基于SentencePiece的BPE分词器。这个选择相对保守,优先考虑训练和推理效率。
- LLaMA 3:将词表扩大到128K,采用TikToken分词器。这一变化的动机明确:改善多语言处理效率,特别是对CJK语言的支持。
词表增大带来的收益是实实在在的。在相同内容的情况下,LLaMA 3的128K词表相比LLaMA 2的32K词表,token数量显著减少。这意味着在相同的上下文窗口内,模型能够处理更多的实际文本内容。
timeline
title LLaMA系列词表演进
section LLaMA 1 (2023.02)
32K词表 : SentencePiece BPE
: Byte-level fallback
section LLaMA 2 (2023.07)
32K词表 : 改进的CJK支持
: 更好的多语言覆盖
section LLaMA 3 (2024.04)
128K词表 : TikToken分词器
: 显著提升分词效率
: 更好的代码处理
GPT系列的渐进式增长
OpenAI的GPT系列展示了词表大小的渐进式增长:
- GPT-2/GPT-3:约50K词表,使用byte-level BPE
- GPT-4:约100K词表,cl100k_base分词器
GPT-4的词表扩大带来了显著的效率提升。一个具体的例子:同样的文本片段,GPT-4只需要185个token,而GPT-2/GPT-3需要300个token。在上下文窗口有限的情况下,这相当于将有效上下文长度增加了60%以上。
GPT-4的词表设计还针对编程语言进行了优化。例如,代码中常见的缩进空格序列被合并为单个token,而GPT-2会将每个空格单独tokenize。
Gemma的激进选择
Google的Gemma模型选择了256K的超大词表,是目前主流模型中词表最大的之一。这个选择的代价是明显的:Gemma 2B模型的embedding层占总参数的26%,远高于其他模型。
但这种设计也有其合理性:Gemma强调多语言和文化理解能力,更大的词表使其能够更好地处理各种语言和文化特定内容,包括emoji和特殊符号。
词表设计的技术细节
BPE vs Unigram vs WordPiece
现代大模型主要使用三种子词分词算法,它们对词表大小的影响各有特点:
Byte-Pair Encoding (BPE):从字符级别开始,迭代地合并最常见的字符对。词表大小由迭代次数决定,每个新合并的token都会被添加到词表中。BPE产生的词表大小与训练语料的统计特性紧密相关。
Unigram Language Model:从一个大的候选词表开始,逐步删除低概率的token,直到达到目标词表大小。相比BPE,Unigram可以产生概率性的分词结果,支持分词正则化技术。
WordPiece:与BPE类似,但使用似然度而非频率来选择合并。BERT系列模型使用这种方法。
在相同的目标词表大小下,三种方法产生的实际分词效率差异不大,但BPE因其确定性和简单性而成为当前主流选择。
graph TB
subgraph "BPE算法流程"
BPE1[初始: 字符级词表] --> BPE2[统计字符对频率]
BPE2 --> BPE3[合并最频繁对]
BPE3 --> BPE4{达到目标大小?}
BPE4 -->|否| BPE2
BPE4 -->|是| BPE5[输出词表]
end
subgraph "Unigram算法流程"
U1[初始: 大候选词表] --> U2[计算token概率]
U2 --> U3[删除低概率token]
U3 --> U4{达到目标大小?}
U4 -->|否| U2
U4 -->|是| U5[输出词表]
end
Byte-level vs Character-level
Byte-level BPE(如GPT系列使用的方法)将文本视为UTF-8字节序列,而非Unicode字符序列。这确保了任何文本都能被处理,不存在真正的"未知字符"问题。
代价是:对于不常见的字符组合,byte-level BPE可能产生更长的token序列。例如,一个汉字可能被表示为多个字节token。
LLaMA 1使用的byte-level BPE在某些情况下产生了奇怪的分词结果,特别是对非英文文本。LLaMA 2通过在词表中预置常用CJK字符改善了这一问题,但32K的词表大小仍然限制了覆盖范围。
实践指南:如何选择词表大小
基于模型规模的估算
使用NeurIPS 2024论文的缩放公式,可以根据预期的模型规模估算最优词表大小:
$$V^{opt} \approx \frac{N_v^{opt}}{d} = \frac{N_v^0}{d} \times \left(\frac{N_{nv}}{N_{nv}^0}\right)^{0.83}$$以基准模型$N_{nv}^0 = 33M$,$N_v^0/d \approx 8K$为例,不同规模模型的最优词表估算如下:
| 模型规模 | 最优词表(估算) |
|---|---|
| 1B | ~20K |
| 7B | ~65K |
| 70B | ~200K |
| 175B | ~300K |
基于应用场景的考量
实际选择词表大小时,除了模型规模,还需考虑应用场景:
单语言英文场景:32K-50K通常足够。英文的词根词缀相对有限,更大的词表边际收益递减。
多语言场景:建议至少100K。特别是需要支持CJK语言时,更大的词表能显著改善处理效率。
代码生成场景:100K+。代码包含大量特定词汇(函数名、变量名、关键字组合),更大的词表能更有效地压缩代码。
资源受限场景:可能需要小于理论最优值。在边缘设备或移动端部署时,较大的embedding矩阵会带来显著的内存和计算开销。
quadrantChart
title 词表大小选择决策矩阵
x-axis 小词表优先 --> 大词表优先
y-axis 低资源约束 --> 高资源约束
quadrant-1 大词表场景
quadrant-2 平衡场景
quadrant-3 小词表场景
quadrant-4 特殊优化
"多语言应用": [0.8, 0.8]
"代码生成": [0.7, 0.7]
"单语言英文": [0.3, 0.6]
"边缘设备部署": [0.2, 0.2]
"大型模型训练": [0.9, 0.9]
"小模型优化": [0.2, 0.4]
词表扩展技术
对于已经训练好的模型,可以通过词表扩展技术改善其在特定语言或领域的表现:
- 添加新token:在词表中添加目标语言或领域的高频token
- 继续预训练:用目标数据对扩展后的词表进行继续预训练
- 参数高效微调:只训练新添加token的embedding,保持其他参数不变
这种方法被广泛用于开发特定语言的模型变体,如中文LLaMA系列。
词表设计的未来趋势
自适应词表
研究者正在探索训练过程中动态调整词表的方法。一种思路是"词表课程学习":训练初期使用较小粒度的token(如字符级别),随着模型能力提升,逐步合并为更大的token。
这种方法使模型能够自适应地学习最优的分词粒度——对于容易预测的内容使用大token,对于难以预测的内容保持细粒度分解。
架构级别的创新
另一种思路是将分词决策移入模型架构内部。Megabyte(2023)将文本作为固定长度的字节块处理,由模型内部学习如何将字节组合成语义单元。这种方法模糊了传统"分词"和"表示学习"的边界。
无分词器架构
一些研究探索完全绕过传统分词的方法。Byte Latent Transformer(2024)直接在字节序列上进行建模,通过动态确定分割点来避免预定义词表的限制。这种方法在理论上可以处理任意语言和格式,但代价是序列长度显著增加。
mindmap
root((词表技术演进))
传统方法
BPE
Unigram
WordPiece
当前趋势
更大词表
多语言优化
代码特定token
未来方向
自适应词表
课程学习
动态合并
架构创新
Megabyte
无分词器
字节级建模
Byte Latent Transformer
动态分割
结语:重新审视词表的重要性
词表大小的选择,表面上看是一个简单的超参数配置,实则深刻影响着模型的效率、能力和适用范围。NeurIPS 2024的研究揭示,当前主流模型的词表配置可能远非最优,更大的模型理应配备更大的词表。
对于模型开发者而言,词表设计需要综合考虑模型规模、目标应用、训练数据量和部署环境。盲目追求大词表或固守小词表都不是最优策略——关键在于找到与模型规模和任务需求相匹配的平衡点。
随着模型规模的持续增长和对多语言能力要求的提高,词表大小的优化将成为模型设计中越来越重要的一环。理解词表背后的权衡逻辑,有助于开发者做出更明智的设计决策。
参考文献
- Liu, Q., et al. “Scaling Laws with Vocabulary: Larger Models Deserve Larger Vocabularies.” NeurIPS 2024.
- Sennrich, R., Haddow, B., & Birch, A. “Neural Machine Translation of Rare Words with Subword Units.” ACL 2016.
- Kudo, T., & Richardson, J. “SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing.” EMNLP 2018.
- Radford, A., et al. “Language Models are Unsupervised Multitask Learners.” OpenAI 2019.
- Touvron, H., et al. “Llama 2: Open Foundation and Fine-Tuned Chat Models.” 2023.
- Meta AI. “The Llama 3 Herd of Models.” 2024.
- OpenAI. “GPT-4 Technical Report.” 2023.
- Google DeepMind. “Gemma: Open Models Based on Gemini Research and Technology.” 2024.
- Devoto, A. “Visualizing the Vocabulary of an LLM.” 2025.
- Gulati, S. “Why LLM Vocabulary Size Matters.” 2024.