跳转至

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\)

\[K(X^N) \leq N \cdot H(p) + V\log_2 N + O(\log 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%)。

关键发现

  1. 24K 以上的词表扩展主要利用的是词频不平衡而非分词效率提升
  2. 高频词在预训练和下游任务中高度重叠(~75%),解释了损失下降→性能提升的因果链
  3. 前 2500 高频词在 ARC/HellaSwag/SciQ 中覆盖 76-78% 的 tokens
  4. 参数缩放和词表缩放走的是同一条路:都通过降低高频词不确定性来降低全局 CE
  5. 可以在不加剧词频不平衡的情况下降低复杂度(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

与相关工作的对比