介绍

在快速发展的大型语言模型 (LLM) 领域,我们往往关注模型的规模——在数万亿词上训练的数十亿参数。然而,这些模型中有一个基本组件却出奇地僵化: 词表 (Vocabulary)

将语言模型想象成一个正在盖房子 (句子) 的建筑工。建筑工使用砖块 (Token) 来建造结构。在当前的范式中,这些砖块的尺寸和形状在建筑工开始学习之前就已经决定了。一旦通过分词器 (如 BPE 或 WordPiece) 定义了“静态”词表,它就被锁定了。模型必须使用这组固定的砖块来构建一切内容,从简单的文章到复杂的技术术语。

但是,如果建筑工可以按需即时制造定制尺寸的砌块——比如整面墙或柱子——会怎样呢?

这就是 Liu 等人撰写的研究论文 《Generation with Dynamic Vocabulary》 的核心主张。研究人员提出了一个新的框架,其中模型的词表不是一个静态列表,而是一个可以根据输入文本进行调整的动态实体。通过允许模型将任意文本片段 (短语) 作为原子单位生成,他们展示了在生成质量、速度和领域适应性方面的显著提升——而且无需昂贵的重新训练。

在这篇文章中,我们将解构这种动态词表是如何工作的,“动态短语编码器”背后的巧妙架构,以及为什么这种方法可能会改变我们未来对分词 (Tokenization) 的看法。

背景: 静态词表的局限性

要欣赏动态词表的创新之处,我们首先需要了解现状的局限性。现代 LLM (如 GPT-4 或 Llama) 依赖于静态词表 。 在训练开始之前,分词器会分析海量语料库以确定最常见的子词单位。这些单位构成了模型的固定词表 (通常在 3 万到 10 万个 Token 之间) 。

虽然有效,但这种方法的基础存在裂痕:

  1. 低效: 生成一个像 “United States of America” 这样的常用短语可能需要多个步骤 (每个 Token 一步) ,而动态模型可以将其作为一个单元处理。
  2. 领域僵化: 如果将在这个通用文本上训练的模型迁移到医疗或法律领域,其静态词表将缺乏特定的术语。它不得不将复杂的术语拆分成微小、无意义的子词,从而降低性能。
  3. 缺乏适应性: 更新词表通常需要从头开始重新训练分词器和模型嵌入——这是一项计算成本极高的任务。

研究人员认为,我们需要放宽这些限制。我们需要一个可以在运行时定义“砖块”的系统。

核心方法: 基于动态词表的生成

研究人员引入了动态词表 (\(V'\))。它由原始的静态词表 (\(V\)) 加上一组根据上下文变化的任意短语 (\(P\)) 组成。

\[V' = V \cup P\]

关键在于,这些短语就像标准的 Token 一样运作。模型可以观察其上下文,并在单个时间步内决定是输出一个标准 Token (如 “the”) 还是一个复杂的短语 (如 “theatre production”) 。

1. 架构

该系统包含两个主要输入: 标准的固定 Token 和一组从输入上下文派生或检索到的动态短语。

图 1: 基于动态词表的生成。模型的词表根据输入文本动态变化,短语既作为输入的也作为输出的基本块。

图 1 所示,该过程如下:

  • 左侧: 我们有一个固定的 Token 词表 (底部) 和一个动态短语词表 (顶部) 。在这个例子中,像 “written by Mark Ravenhill” 或 “theatre production” 这样的短语是可用的。
  • 右侧: 在生成过程中,模型预测下一步。它选择短语 “theatre production” 作为一个单一的原子单位。然后,这个输出被反馈回模型以进行下一步。

2. 动态短语编码器

最大的技术挑战是如何表示这些可变的短语。你不可能为英语中每一个可能的短语都建立一个查找表——那是无限的。

解决方案是动态短语编码器 (Dynamic Phrase Encoder) 。 作者没有使用静态嵌入表,而是使用一个小型神经网络 (初始化为像 GPT-2 这样的因果 Transformer) 来即时计算嵌入。

获取短语 \(p\) 的向量表示的过程如下:

  1. 使用标准的静态分词器对短语 \(p\) 进行分词。
  2. 将其输入到短语编码器中。
  3. 最后一个 Token 的隐藏状态。这个向量就变成了整个短语的嵌入。

这在静态和动态世界之间建立了一座无缝的桥梁。因为短语编码器使用与主语言模型 (LM) 相同的分词器,所以在推理过程中不需要复杂的映射或词表切换。

3. 推理: 扩充矩阵

LM 如何知道如何选择这些新短语?在标准的 Transformer 中,输出层涉及将隐藏状态乘以输出嵌入矩阵 (\(\mathbf{W}_{\text{emb,out}}\)),以获得词表中每个 Token 的 Logits。

对于动态词表,研究人员简单地在数学上扩充了这个矩阵。

描述输入和输出嵌入矩阵扩展的公式。

如上式所示,新的输入矩阵 \(\mathbf{W}'_{\text{emb,in}}\) 是通过将原始 Token 嵌入 \(\mathbf{W}_{\text{emb,in}}\) 与编码器生成的短语嵌入 \(\mathbf{P}\) 拼接而成的。同样的逻辑也适用于输出矩阵。

这允许模型同时计算标准 Token 和动态短语的概率。

展示下一个 Token 或短语概率计算的公式。

上面的概率公式显示,归一化项 \(Z\) (Softmax 的分母) 现在是对静态词表 \(V\) 和动态短语 \(P\) 进行求和。这意味着模型会根据哪个最适合上下文,自然地权衡生成单词与生成短语的选项。

4. 训练与负采样

训练短语编码器是“魔法”发生的地方,但也存在难点。如果你只是简单地把短语扔给模型,它会感到困惑。

假设目标短语是 “New York City”。

  • 模型可能只预测 “New” (一个 Token) 。
  • 它可能预测 “New York” (短语前缀) 。
  • 它可能预测 “New York City” (正确的短语) 。

模型会遭遇解码歧义 。 它难以区分一个短语与其前缀或更长的续写。为了解决这个问题,作者采用了激进的负采样 (Negative Sampling) 。 他们需要教模型将正确短语与“困难负样本”区分开来——这些短语看起来很相似,但在当前步骤中是不正确的。

图 2: 我们提出的动态词表的整体架构。在训练期间,有四个负短语来源: 批次前 (pre-batch)、语料库检索 (corpus-retrieval)、自检索 (self-retrieval) 和生成 (generation)。短语由带有额外线性层的动态短语编码器进行嵌入。最后一个 token 的隐藏层用作短语嵌入。在模型输入层中,短语被视为基本块,而不会拆分为 token。

图 2 展示了训练流程。注意标有“Negative Phrases” (负短语) 的框。作者利用了四种负样本来源:

  1. Pre-batch (批次前) : 来自先前批次的短语 (标准做法) 。
  2. Corpus-Retrieval (语料库检索) : 在海量语料库中查找短语出现的位置,并将其周围的文本作为负样本。
  3. Self-Retrieval (自检索) : 使用在当前句子中发现的其他潜在短语。
  4. Generation (生成) : 使用模型“幻觉”出看似合理但不正确的短语续写,迫使编码器学习非常具体的边界。

损失函数

为了确保模型不会偏向于只生成短语 (或只生成 Token) ,训练损失将标准的语言建模损失与特定的“对齐”损失结合起来。

KL 散度损失函数的公式。

这个 KL 散度损失 (\(L_{kl}\)) 将动态模型的分布与标准模型对齐。本质上,它确保即使模型使用动态短语,其底层概率分布仍然植根于基础模型的语言统计规律。

实验与结果

研究人员在几个维度上测试了他们的动态词表: 生成质量、效率、领域适应性和引用能力。

1. 基础语言建模性能

他们在 WikiText-103 数据集上评估了模型,这是一个语言生成的标准基准。他们将自己的方法与标准 Transformer 以及其他检索增强模型 (如 RETRO 和 kNN-LM) 进行了比较。

表 1: WikiText-103 测试集上的自动评估。星号表示由于显存有限,我们直接使用了 CoG 论文中关于 KNN-LM 的结果。此外,我们的方法在评估期间仅检索 32 个文档用于短语片段,而 CoG 检索 1024 个。Gee 等人 (2023) 将 MWT 应用于仅编码器模型,但我们在 GPT-2 上实现了 MWT。

表 1 揭示了令人印象深刻的结果:

  • 质量 (MAUVE): 动态词表模型的 MAUVE 得分达到 25.69 , 显著高于标准 Transformer (20.47)。该指标与人类对文本质量的判断高度相关。
  • 多样性 (Diversity): 多样性得分跃升至 47.44 , 表明模型的重复性更低,更具创造性。
  • 延迟 (Latency): 注意延迟一栏。动态模型更快 (0.99秒 vs 1.10秒) 。通过在单个步骤中预测多 Token 短语,模型在生成相同长度文本时需要更少的前向传播次数。

2. 人类评估

指标很有用,但人类偏好是黄金标准。

表 2: WikiText-103 上的总体人类评估以及在四个方面与 GPT-2 的详细比较。在总体评估中,我们将这四个方面视为一个整体,因此只有一个分数。“Better”表示我们需要提出的模型的输出更优;“No prefer”表示性能相当;“worse”表示我们模型的输出较差。

表 2 中,人类标注员比较了输出结果。动态模型在 57% 的案例中被认为优于 (“Better”) Transformer。它在信息量连贯性方面表现尤为出色,这可能是因为生成完整的短语比逐字拼凑更能保持句子的语义脉络。

3. 序列压缩

这种方法最有趣的理论优势之一是“序列压缩”。我们能在特定数量的步骤中打包多少信息?

表 3: WikiText-103 上的压缩统计数据。由于 CoG、KNN-LM 和 RETRO 不修改模型的分词器或输入词表,因此压缩结果与 Transformer 相同。

表 3 显示,动态模型使用显著更少的“原子单位” (101.38 vs 127.72) 来表示相同的序列。它每个 Token 携带的信息字节数更多 (5.54 vs 4.28) 。这种效率正是前文提到的延迟降低的原因。

4. 领域适应 (无需训练!)

这对于现实世界的工程师来说可能是最实际的应用。作者采用了一个在通用文本 (WikiText) 上训练的模型,并在一个完全不同的领域上进行了测试: 法律文档 (LawMT)

通常,通用模型在这里会失败,因为它不懂法律术语。然而,作者只需从文档中提取法律短语并将其添加到动态词表中——无需对模型权重进行任何微调。

表 6: Law-MT 上的自动评估。在此实验中,我们为每个样本检索 512 个文档。为了保证公平比较,我们还评估了在 LawMT 上进行进一步微调和未微调的 Transformer 模型的性能。

表 6 所示,动态模型 (Ours) 优于标准 Transformer——甚至是那些在法律数据上微调过的 Transformer!MAUVE 得分达到 26.35 , 而微调后的 Transformer 为 23.06。这表明,简单地更新词表是一种高效、轻量级的领域适应策略。

5. 生成引用

最后,作者探索了使用动态短语进行引用。在问答等任务中,引用来源至关重要。通过将特定短语与特定源文档关联 (例如,“dynamic vocabulary[1]”) ,模型可以同时生成内容和引用。

表 7: ASQA 上的自动评估。在此实验中,我们选择 TinyLlama 作为语言模型,赋予模型上下文学习能力。所有基线模型均配置为 one-shot 设置,候选文档数量设置为 3。Parsing 表示我们使用 Stanza 解析器 (Qi et al., 2020) 从候选文档中提取短语,这确保了短语拥有相对完整且定义明确的含义。

表 7 证明,与标准的 TinyLlama 模型相比,这种方法大幅提高了引用的召回率 (9.76 vs 0.62) 和精确率。这些短语充当了源材料的“锚点”,确保生成的答案忠实于证据。

结论

论文《Generation with Dynamic Vocabulary》展示了我们在语言建模方法上的一个引人注目的转变。通过摆脱传统分词器僵化、静态的砌砖方式,转而采用动态、灵活的短语系统,我们可以解锁更高的效率和适应性。

主要要点:

  1. 灵活性: 短语可以即时添加到词表或从词表中移除,无需重新训练模型。
  2. 效率: 一步生成多 Token 短语减少了延迟。
  3. 适应性: 模型仅需更新其短语列表即可适应新领域 (如法律) 。
  4. 鲁棒性: 经过巧妙负采样训练的动态短语编码器,确保模型能够将这些新短语与标准 Token 无缝集成。

随着 LLM 的不断发展,像这样能够从现有架构中挖掘更多性能和实用性的高效方法将变得至关重要。动态词表将语言模型坚硬的墙壁变成了模块化、适应性强的结构,随时准备应对任何领域或任务。