Exploiting Vocabulary Frequency Imbalance in Language Model Pre-training¶
会议: NeurIPS 2025
arXiv: 2508.15390
代码: github.com/Chung-Kim/vocab-imbalance
领域: llm_nlp
关键词: tokenization, vocabulary size, frequency imbalance, Kolmogorov complexity, language model scaling
一句话总结¶
通过控制实验揭示大词表提升语言模型性能的根本机制:扩大词表降低分词文本的 Kolmogorov 复杂度,利用词频不平衡让高频词损失大幅下降,驱动全局交叉熵下降和下游任务提升。
研究背景与动机¶
经验性发现:扩大 BPE 词表(如从 24K 到 196K)能持续降低语言模型困惑度并提升下游准确率。但这个好处的底层机制一直不清楚。
直觉上,更大的词表把更多频繁词编码为单个 token,使 unigram 模型更接近最优。但这个解释无法直接迁移到神经语言模型,因为: 1. 语言模型是基于上下文的条件预测,不是 unigram 模型 2. 罕见 token 的条件概率远低于边际概率,预测错误代价极高 3. 然而罕见 token 在总损失中占比很小
核心问题:扩大词表时,模型容量在高频和低频 token 之间如何重新分配?这对全局损失和下游性能有何影响?
方法详解¶
整体框架¶
控制实验设计:固定数据量、计算量和优化策略,仅改变词表大小(24K → 49K → 98K → 196K),在 FineWeb-Edu 和 OpenWebText 上训练 85M 参数模型。
分析路径: 1. 量化分词文本复杂度(Kolmogorov 复杂度) 2. 分离词频不平衡和分词效率两个因素 3. 分解词级损失,定位收益来源 4. 验证跨数据集/模型规模的一致性 5. 分析频繁词重叠解释下游迁移
关键设计¶
Kolmogorov 复杂度上界:对 BPE 分词后的比特串 \(X^N\):
其中 \(N\) 是 token 总数,\(H(p)\) 是 unigram 香农熵,\(V\log_2 N\) 编码词频表。由于现代训练数据规模巨大(数十亿 token),\(N \cdot H(p)\) 项主导,因此用 \(H(p)\) 近似复杂度。
归一化压缩比 (NCR):\(\text{NCR}(x;C) = |C(x)|/|x|\),其中 \(|C(x)| \approx N \cdot H(p)\)。
词级损失分解指标: - 总损失:\(\text{Total Loss}(v) = \sum_{t \in N}\sum_{i=1}^{|t|}\mathbb{1}(v=t_i)[-\ln p(t_i|t_{<i})]\) - 词均损失:\(\mu(\ell_v) = \text{Total Loss}(v) / T_v(N)\) - 全局交叉熵:\(\text{Global CE Loss} = \sum_v \frac{T_v(N)}{T(N)} \mu(\ell_v)\)
损失函数 / 训练策略¶
- 模型:85M 非嵌入参数,Pre-LN Transformer
- 优化器:AdamW(\(\beta_1=0.9, \beta_2=0.95, \epsilon=10^{-8}\))
- 学习率:\(6 \times 10^{-4}\),cosine decay,warmup 3.5 亿 token
- 权重衰减:0.1,梯度裁剪:1.0
- 训练数据:~40B 字符(~7.5B tokens @49K 词表)
- 每个实验重复 5 个种子
实验关键数据¶
主实验¶
Kolmogorov 复杂度随词表增大而降低(45.97B bytes FineWeb-Edu):
| 词表大小 | \(K(X^N)\) (bytes) | NCR |
|---|---|---|
| 24K | 10.74B | 0.234 |
| 49K | 10.43B | 0.227 |
| 98K | 10.23B | 0.223 |
| 196K | 10.16B | 0.221 |
词级损失分解(85M 模型,10B tokens FineWeb-Edu):
| 词表 | 高频 2500 词均损失 | 低频 20000 词均损失 | 全局 CE Loss | 高频词损失占比 |
|---|---|---|---|---|
| 24K | ~3.85 | ~11.18 | 3.179 | ~75% |
| 49K | ~3.80 | ~11.90 | 3.163 | - |
| 98K | ~3.77 | ~12.60 | 3.148 | - |
| 196K | ~3.75 | ~13.40 | 3.136 | ~75% |
分词效率已饱和:24K 词表时前 2500 高频词 95%+ 已为单 token,继续扩大词表主要加剧词频不平衡(JSD 单调增加)。
消融实验¶
跨规模验证: - 85M + 30B tokens:高频词损失 3.845→3.742 nats,全局 CE 2.991→2.941(同趋势) - 450M + 10B tokens:高频词损失 3.770→3.675 nats,全局 CE 2.989→2.888(同趋势)
参数缩放 vs 词表缩放(Pythia 系列):
| 模型 | 高频 2500 词均损失 | 全局 CE | 高频词损失占比 |
|---|---|---|---|
| Pythia-160M | 4.48 | 4.32 | ~48% |
| Pythia-1B | 3.76 | 2.51 | ~70% |
| Pythia-6.9B | 3.38 | 2.26 | ~70% |
差异:参数缩放不会加剧低频词损失,而词表缩放会。
SuperBPE 验证:跨空格 BPE 变体中,最低复杂度(NCR=0.218)的变体下游性能最佳(Avg=43.8%),BPE 基线 NCR=0.222 性能最差(Avg=39.8%)。
关键发现¶
- 24K 以上的词表扩展主要利用的是词频不平衡而非分词效率提升
- 高频词在预训练和下游任务中高度重叠(~75%),解释了损失下降→性能提升的因果链
- 前 2500 高频词在 ARC/HellaSwag/SciQ 中覆盖 76-78% 的 tokens
- 参数缩放和词表缩放走的是同一条路:都通过降低高频词不确定性来降低全局 CE
- 可以在不加剧词频不平衡的情况下降低复杂度(SuperBPE 证明)
亮点与洞察¶
- 将 "bigger vocabularies help" 重新诠释为 "lowering complexity of tokenized text helps",提供了统一的理论视角
- Kolmogorov 复杂度作为分词器设计的原则性工具,比启发式指标更有理论基础
- 发现分词效率在 24K 饱和,挑战了"大词表 → 更好的词级 token"这一常见直觉
- 数据角度的洞察(词频不平衡是特性而非 bug)对所有使用 BPE 的模型都有意义
- SuperBPE 分析揭示:可以在不加剧词频不平衡的情况下降低复杂度
局限性 / 可改进方向¶
- 模型规模较小(85M / 450M),未验证到 7B+ 规模是否完全一致
- 仅测试了 BPE 分词器,Unigram / SentencePiece 等其他方法未涉及
- Kolmogorov 复杂度上界(unigram 熵近似)较松,可能无法精确刻画所有场景
- 机器翻译场景下词频不平衡反而有害(因为源/目标词表重叠少),本文的解释尚不完整
- 未探索最优词表大小选择的实用准则(何时扩大词表不再值得?)
相关工作与启发¶
- Rajaraman et al. (2025) 从 unigram 理论预测大词表好处,本文延伸到条件语言模型
- Tao et al. (2024) 发现词表与损失的 log-linear 关系,本文解释了其底层机制
- SuperBPE 和 Boundless BPE 的跨空格合并策略与本文发现一致:降低复杂度是关键
- 对分词器-模型协同设计(tokenizer-model co-design)有直接指导:用复杂度作为选择标准
- 去重 (deduplication) 可从词频不平衡视角重新理解——有趣的未来方向
评分¶
- 创新性:⭐⭐⭐⭐⭐ — 首次系统揭示词表扩大的底层机制
- 实验设计:⭐⭐⭐⭐⭐ — 严格控制变量、多数据集多规模验证
- 理论深度:⭐⭐⭐⭐ — Kolmogorov 复杂度框架有说服力
- 实用性:⭐⭐⭐⭐ — 对分词器设计有直接指导
- 综合评价:9.0/10