引言
像 GPT-4 和 LLaMA 这样的大型语言模型 (LLM) 是通才。它们能写诗、解数学题,或者像模像样地总结历史课。然而,当你把这些通才模型投入到高度专业化的环境中——比如律师事务所或医院——它们往往会碰壁。它们缺乏生成精确法律合同或医疗诊断所需的特定行话和深厚的领域知识。
为了弥补这一差距,研究人员通常会求助于在特定领域数据上进行 有监督微调 (Supervised Fine-Tuning, SFT) 。 但这里有一个经常被忽视的瓶颈: 词表 (vocabulary) 。 通用模型使用的词表是针对通用文本优化的。当它们遇到像“痔疮 (hemorrhoids) ”这样的专业术语或复杂的法律条文时,通常会将这些词拆解成低效、碎片化的子词 (sub-tokens) 。
标准的解决方案是简单地扩展词表——向模型中填充成千上万个新的领域特定词汇。但是,“更多”真的总是“更好”吗?
最近一篇题为 Vocabulary: An Adaptive Method for Vocabulary Expansion of Domain-Specific LLMs 的论文给出了否定的答案。研究人员介绍了一种名为 VEGAD (Vocabulary Expansion via GrADients,基于梯度的词表扩展) 的新方法。VEGAD 不会盲目地添加单词,而是利用模型自身的梯度来识别哪些单词是真正有价值的,就像淘金者在文字的河流中筛选金沙一样。
在这篇文章中,我们将探讨为什么词表大小并不是一切,VEGAD 如何在底层运作,以及为什么倾听神经网络的梯度可能是构建更好的领域专用模型的关键。
问题所在: 词表的“金发姑娘”困境
在深入了解解决方案之前,我们必须理解当前词表扩展技术存在的问题。
当使 LLM 适应一个新领域 (例如医学) 时,标准的工作流程包括:
- 收集领域语料库。
- 使用分词器 (如 SentencePiece) 查找频繁出现的新词。
- 将 所有 这些新词添加到模型中。
- 进行微调。
这种方法的假设是,更大的词表可以提高编码效率 (序列变短) 和语义理解能力。然而,研究人员进行的一项初步研究挑战了这一假设。

如上图 Figure 1 所示,研究人员绘制了模型性能提升与添加词表大小的关系图。
- 橙线 代表领域任务的性能。请注意,它在词表大小约为 2,242 时达到峰值,随着更多单词的添加,性能反而 下降 。
- 黄线和蓝线 代表通用能力 (数学和平均性能) 。随着词表规模变得过大,这些能力显著暴跌。
这种现象揭示了一个“金发姑娘 (Goldilocks) ”区域 (即“恰到好处”的区域) 。如果你添加的词太少,就会错失效率。如果你添加的太多,模型就会遭遇 灾难性遗忘 (Catastrophic Forgetting) ——它被大量涌入的、可能冗余的新 token 搞得晕头转向,以至于开始忘记预训练的基础知识 (比如如何做数学题) 。
因此,挑战不仅仅在于扩展,更在于 选择 。 我们如何自动找到那个最佳的单词子集,既能提升领域性能,又不会破坏模型的通用智能?
VEGAD 简介
为了解决这个问题,作者提出了 VEGAD 。 VEGAD 的核心理念是: 并非所有高频词都是重要的。只有当模型使用现有 token 难以处理某个词时,该词才应该被添加到词表中。

Figure 2 展示了 VEGAD 的框架。它遵循一个逻辑流程:
- 文本切分 (Text Segmentation) : 将领域数据切分为候选词。
- Trie 树构建 (Trie Construction) : 将这些候选词组织成一种便于高效搜索的数据结构。
- 梯度计算 (Gradient Calculation) : 将领域数据输入通用 LLM 并测量梯度。
- 选择 (Selection) : 基于高梯度值 (高“影响力”) 筛选单词。
- 调整大小与微调 (Resize & Fine-Tune) : 使用这个精选的词表更新模型。
这里的关键创新是第 3 步: 利用 梯度 作为重要性的度量标准。在深度学习中,梯度大意味着模型的参数需要为了适应特定输入而发生显著变化。如果一个候选词触发了较大的梯度,这意味着模型认为该特定的字符序列至关重要,且使用当前的词表很难处理。
核心方法: 它是如何工作的
让我们分解 VEGAD 的技术机制,重点关注它如何计算这些至关重要的梯度。
1. 构建 Trie 树
首先,系统需要一个 可能 值得添加的“候选词”列表。研究人员使用分词工具 (如针对中文的 Jieba) 从领域语料库中生成大量潜在单词列表。
然后,他们将这些单词组织成一个 Trie 树 (或前缀树) 。Trie 树是一种树形数据结构,在检查一串 token 是否匹配已知单词时速度极快。
2. 梯度计算
这是算法的核心。目标是为 Trie 树中的每个候选词计算一个“得分”。
研究人员将领域句子输入到预训练的 LLM 中。当数据流经模型时,他们在两个特定点跟踪梯度: Embedding 层 (输入) 和 语言建模 (LM) Head 层 (输出) 。

如 Figure 3 所示,该过程如下:
- 前向传播 (Forward Pass) : 输入 token (例如,“In the hospital…”) 通过 Transformer 层。
- 反向传播 (Backward Pass) : 模型计算损失 (误差) 并将梯度反向传播回网络。
- 映射 (Mapping) : 系统使用 Trie 树将 token 序列映射回“候选词”。例如,如果 token “hyper” 和 “tension” 出现,Trie 树会将它们识别为候选词 “hypertension”。
- 累加 (Accumulation) : 系统将构成该候选词的 token 所关联的梯度进行求和。
特定单词 \(w\) 的梯度数学公式为:

在这里,得分 \(G_w\) 是两部分的总和:
- Embedding 梯度 (\(G^{embed}\)) : 模型希望在多大程度上调整这些 token 的输入表示。
- LM Head 梯度 (\(G^{lmhead}\)) : 模型希望在多大程度上调整这些 token 的输出预测。
通过将这些求和 (使用范数) ,VEGAD 为每个候选词分配一个代表其“重要性”的标量值。
3. 为什么 LM Head 很重要
以前的大多数词表扩展方法仅关注 Embedding 层。然而,VEGAD 明确包含了 LM Head 。 作者认为,对于文本 生成 任务,输出层与输入层同样重要。如果模型知道一个词的意思 (Embedding) ,但不知道如何将其作为下一个 token 进行预测 (LM Head) ,那么这种扩展就是不完整的。
4. 效率优化
将海量文本语料库与海量候选词表进行比对可能会很慢。为了使其可行,作者利用了 Aho-Corasick 算法 (AC 自动机) 。

如 Figure 7 所示,Aho-Corasick 算法使用了“失败指针 (fail pointers) ” (蓝色箭头) 。这使得算法能够单次扫描文本。如果匹配失败 (例如,你匹配了 “b-c”,但下一个字母不是 “a”) ,指针会立即跳转到下一个最长的可能有效前缀,而不是从头开始重新扫描。这种优化显着加快了梯度累加过程。
实验与结果
研究人员在两个截然不同的领域验证了 VEGAD: 法律 (使用 Article QA 数据集) 和 医学 (使用 CMedQA 和 CMDD 数据集) 。他们将 VEGAD 与标准基线进行了比较,包括直接 SFT (不扩展词表) 、“Jieba” (添加分词器发现的所有单词) 和 SentencePiece (SPM)。
领域任务的表现
在法律领域,VEGAD 表现出了明显的优势。

查看 Table 1 :
- VEGAD 在 BLEU (28.58) 和 ROUGE-L (26.96) 中得分最高。
- Jieba (添加完整词表) 表现良好,但略逊于 VEGAD。
- SFT (无扩展) 明显落后。
这证实了扩展词表是有帮助的,但使用 VEGAD 进行 选择性 扩展更有帮助。
医学领域的结果 (特别是 CMDD 数据集) 在平衡学习与遗忘方面表现得更为惊人。

在 Table 4 中,VEGAD 取得了最高的 BLEU (5.84) 和 ROUGE 分数。它明显优于盲目添加医学术语的“Jieba”基线。
缓解灾难性遗忘
这篇论文最重要的发现可能不仅仅是 VEGAD 更好地学习了领域知识,还在于它 更好地记住了其他所有事情 。
当你在医疗数据上微调模型时,它通常会在数学或安全合规等通用任务上变“笨”。
- GSM8K (数学) : 在 Table 4 中,看 GSM8K 这一列,通用 LLM (General LLM) 的初始得分为 23.55。
- SFT 将其降至 22.37。
- VEGAD 保持了 23.31 的得分 (几乎没有损失) 。
- Jieba 略有下降,但其他方法如 SPM 通常会导致其他指标大幅下降 (参见论文中的 Table 5 关于相对下降的数据) 。
这意味着,由于 VEGAD 仅选择那些 梯度密集 (必要) 的单词,相比于那些向模型灌输数千个新 token 的方法,它对模型原始权重的干扰更小。
消融实验: LM Head 的重要性
加入 LM Head 的梯度计算真的有必要吗?作者进行了一项消融实验来找出答案。

Figure 6 显示了包含 LM Head (绿色) 与不包含它 (棕色) 时的提升百分比。
- 对于 Domain-ROUGE (文本生成质量) ,包含 LM Head 带来了 6.86% 的提升,而不包含时仅为 1.01% 。
- 这验证了这样一个假设: 对于生成任务,我们必须关注模型如何 输出 新词汇,而不仅仅是如何读取它。
词表大小的“最佳平衡点”
最后,研究人员使用他们的新方法重新审视了词表大小的问题。

Figure 4 绘制了 VEGAD 随着添加单词数量增加的相对提升。
- 橙线 (领域) 在约 2,500 个单词时达到峰值。
- 关键是,看图表右侧“Jieba”标签所在的位置 (代表添加了约 4,600 个单词) 。与峰值相比,性能实际上 下降 或持平。
- 黄线 (数学/GSM8K) 随着词表大小接近完整集 (Jieba) 而大幅崩盘。
这在视觉上证实了核心论点: 仅使用词表的一个子集进行扩展会带来更优越的性能。
结论与启示
多年来,数据和模型规模“多多益善”的方法主导了 AI 领域。然而,Vocabulary: An Adaptive Method for Vocabulary Expansion of Domain-Specific LLMs 这篇论文提醒我们,精度往往胜过数量。
通过将词表选择视为一个优化问题——由模型自身的梯度引导——VEGAD 实现了“两全其美”:
- 更高的领域能力: 模型学习了工作所需的困难、高影响力的行话。
- 更低的灾难性遗忘: 模型保留了其通用推理能力,因为它没有被不必要的 token 淹没。
对于致力于领域专用 LLM 的学生和从业者来说,结论很清楚: 不要只是把字典一股脑倒进你的分词器里。倾听你的模型——它知道它需要学习哪些词。
](https://deep-paper.org/en/paper/2410.01188/images/cover.png)