Hugging Face Blog · 2026/10/22 01:35:36
VocabX 论文预览:SLM 词汇表特化可降推理成本 77%
Dharma-AI 团队发布 VocabX 论文预览,提出通过特化小语言模型(SLM)的词汇表来优化推理效率。在真实生产环境的作文评分应用中,该方法将推理成本降低了 77%,解决了通用开源模型继承庞大词汇表导致特定领域文本分词碎片化的问题。
报道全文原始报道全文
本文目录9 个章节
通过专业化小语言模型(SLM)的词表,在真实应用中降低 77% 的推理成本
团队文章 发布于 2026 年 10 月 21 日 点赞 1
Bernardo França de Aguiar bernardoaguiar Dharma-AI Gabriel Pimenta de Freitas Cardoso GabrielPimenta99 Dharma-AI Bruno Duarte brunoduarte01 Dharma-AI Francisco de Almeida Rocha Alves falves9101 Dharma-AI
通过对 Qwen 和 Gemma 等通用开源模型进行微调,从而针对特定领域或任务进行专业化的模型,会继承一个为多领域和通用应用构建的词表。
在我们生产环境中运行的作文评分系统中,该词表将模型生成的文本拆分成了大量的 token。本文预告了即将发布的 VocabX 论文中的一些结果:我们如何围绕每个 token 的成本而非其频率来专业化词表,并在不改变基础模型的情况下,将实测推理成本降低了 77%。
Tokenizer 通常被视为基础模型的固定属性,被直接继承且不做修改。对于专注于单一领域的模型而言,它可能是最大的成本杠杆之一,并且在任何训练步骤开始之前就已经确定。
我们在生产环境中运行的一套系统是基于 Qwen3-4B 构建的葡萄牙语作文自动评分器。它接收作文、提示词和支持材料,并返回一个包含每项能力评分和评语的 JSON 评估结果。
该模型本身已经很小,仅有 40 亿参数,并且已经针对特定任务完成了训练。然而,它的分词器(tokenizer)仍然是原始的 Qwen3-4B 版本,是为处理多种语言和多种文本类型而构建的。在评分器中,它仅用于单一语言(葡萄牙语)和单一响应格式。这带来了两方面的代价:评分器在每次请求中生成的文本消耗了比实际需要更多的 token;此外,在生成每个 token 时,模型都需要对包含 151,669 个条目的词汇表进行打分,其中许多条目在该任务中几乎从未使用。
我们采用一种名为 VocabX 的方法重建了该词汇表,同时保持基础模型、数据和训练方案不变。本文中的数字来自当前版本的论文(仍在审稿中),在正式发表前可能会有所变动。
为所有人构建的词汇表
主流大语言模型以 token 为单位进行读写,而分词器决定了文本如何转化为 token。主流通用模型的分词器是在涵盖多个领域和语言的大规模文本集合上训练的,从源代码到合同再到中文文本。对于通用模型而言,这种选择是合理的。
但对于仅在单一领域使用的模型来说,这会同时造成两种浪费。
第一种是碎片化。分词器会将领域中重复最多的内容拆分成许多片段。在评分器中,每个响应都以相同的 JSON 封装结构开头,包含相同的能力名称和评估短语。在合同中,则是样板条款;在代码中,则是标识符。这些序列本可以用一个 token 表示,却耗费了多个 token,导致模型在每次请求中都要为此付出额外成本。
第二种是冗余。词汇表中包含了数万个该领域从未使用的条目,模型在生成每个 token 时都需要计算所有这些条目的得分。一个专门用于批改美国学校生物考试的模型几乎永远不会输出中文,但它在每一步仍需计算所有中文 token 的概率。简而言之,词汇表将领域中重复最多的内容拆分成了过多片段,同时还保留了大量领域内从未使用的条目。
读取成本低,生成成本高
直觉反应往往是统计 token 数量并试图减少总数。但 token 数量并不等同于实际成本。
要理解为什么生成的 token 成本更高,有助于了解推理的工作机制。推理分为两个阶段。在 预填充(prefill) 阶段,模型通过单次网络前向传播处理整个输入:从 GPU 内存中读取的每个权重都会复用于所有输入 token,此时的瓶颈是计算能力。而在 解码(decode) 阶段,模型逐个生成响应 token,每个 token 都需要一次完整的前向传播。此时,每次读取的权重仅被少量复用,GPU 大部分时间都在等待数据从内存传输过来:瓶颈转变为内存带宽。
这种效应在我们操作的场景中最为显著:即以小批量服务的小型模型。批处理请求可以将权重读取分摊到多个请求上,从而缓解这一问题,但无法彻底解决。在每个解码步骤中,模型还需要读取 KV Cache——即存储已处理上下文的注意力记忆,其大小随上下文增长而增加。在我们测量的案例中,评分器每生成一个 token 的成本相当于读取一个 token 成本的 7.4 倍。但该比率会因硬件、任务类型、批次大小、上下文长度及其他因素而变化,甚至可能高于此值。总体而言,方向是一致的:生成比读取更昂贵。
想象一家物流公司按箱收费,但发出的箱子费用是接收箱子的七倍。减少总箱数当然有帮助,但减少发出的箱子能带来七倍的额外节省。如果一种方法对输入和输出进行同等程度的压缩,就会错过大部分潜在的节省空间。
账单的第三个组成部分是词表本身。模型的最后一层,即 LM head(语言模型头),将内部状态转换为每个可能 token 的得分。为此,它为词表中的每个条目保留一行参数。在 Qwen3-4B 这样规模的模型中,该矩阵约占参数总量的 10%。对于大型模型而言,这一占比几乎可以忽略不计,但对于小型模型来说却是不小的负担。
而且,这种成本并非只支付一次。输入层仅查找当前读取 token 对应的那一行,但 LM head 在生成每个 token 时都需要读取并乘以整个矩阵。由于解码阶段已经是内存受限(memory-bound)的,每一行额外的数据都意味着每一步需要搬运更多的数据。一个领域内从未使用的条目,其成本与高频条目完全相同。这就是为什么增加 tokens 可能会减少 token 数量,但同时提高计算开销的原因。VocabX 并未将此成本项纳入其选择标准,但它通过两个步骤来控制词表大小:子词合并(sub-word merge)用更小的、特定于领域的词表替换基础词表,而宏(macros)则在固定预算下引入。在评分器(grader)中,输出层的行数从约 152,000 行降至约 65,000 行。
为什么现有方案存在不足
调整模型的词表并不是一个新想法。文献中的参考方法,如快速词表迁移(FVT)、多词分词(MWT)以及 Liquid AI 的 原地 tokenizer 扩展(原地 BPE,即从原始词表继续 BPE 训练),已经能够减少碎片化问题。当我们针对自身问题进行测试时,发现了两个局限性。
它们根据频率而非成本来选择 tokens。 对于它们而言,在输入中频繁出现的表达式比在响应中出现较少但服务成本更高的表达式更有价值。
它们仅作用于单层。 这些方法要么调整词语切分为片段的方式,要么将整个短语合并为一个 token。这三种方法中没有一种能在同一标准下同时做到这两点。而评分器中最大的浪费恰恰出现在长且重复的跨度上,例如 JSON 信封结构,子词方法只能逐个合并各部分后才能触及这些内容。
我们的解决方案
VocabX 解决了上述两个局限性,同时还应对了在解决第一个问题的明显路径上出现的第三个问题。
首先,我们改变了问题的定义。 不再询问候选词能节省多少 token,而是询问它能节省多少成本和时间。每个被消除的 token 都会乘以其所在字段的单价:系统提示(system prompt)、用户消息或模型响应。在我们测量的案例中,对于评分器(grader)而言,在响应中节省一个 token 的价值相当于在输入中节省 7.4 个 token,词汇表据此构建。
其次,我们在两个层级上同时进行处理。 回到物流公司的例子:你可以通过更好地打包每件物品来减少箱子数量,或者通过识别出每周都发送相同的十二件套装,从而将整个套装装在一个箱子里发送。VocabX 两者兼做。在子词(sub-word)层级,它重构领域词汇切分为片段的方式。在多词(multi-word)层级,它寻找重复出现的完整跨度(spans),从短表达式到整行代码和 JSON 封装结构,并将每个跨度转化为单个 token,我们称之为宏 token(macro token)。这两个层级的选择均基于相同的成本标准,且各自拥有独立的预算。
为了找到这些跨度,我们使用了五个挖掘器(miners),即自动搜索语料库中重复出现的跨度的机制,每个挖掘器专门针对一种重复类型:长单词、整行代码、表达式、完整句子以及包含标点符号的结构(如 JSON 和标签)。在八个语料库上的平均结果显示,最后一种贡献最大;而在代码数据上,仅这一种就贡献了 17.5 个百分点。如果缺少这五个挖掘器中的任何一个,评分器上的 token 缩减量将下降 55.6 个百分点。
第三,我们估算样本无法观察到的部分。 基于成本选择 token 需要知道在已选定的候选词之后,每个剩余候选词还能节省多少。精确测量这一点需要在每次选择后重新处理整个语料库,这将涉及数万次操作。大规模执行此任务的常见方法是在文档样本上进行测量,但这样一来,未出现在样本中的候选词将被视为零收益。
在一个包含 50,000 篇文档的语料库中,某个表达式出现了 37 次。然而,在仅抽取 400 篇文档的样本中,该表达式被选中的概率只有约 26%。在合同语料库中,仅有 16.6% 的候选项出现在 400 篇文档的样本里;其余候选项从未被评估过。
候选项的收益由两部分组成。一部分是其在整个语料库中节省的量,这部分可以精确计算,无需依赖样本。另一部分是这些节省中尚未被已选定 token 覆盖的比例,只有这部分需要估算。对于样本无法看到的候选项,我们不再将其收益设为零,而是基于样本中可见候选项的行为特征进行统计估算。这样一来,那些在样本中罕见但在语料库中高频出现的候选项便重新进入了竞争行列。
仅这一改动,在保持相同样本和预算的情况下,就将合同语料库上的 token 缩减率从 44.7% 提升到了 52.8%。
Grader 的变化
为了衡量实际效果,我们在相同的基座模型、相同的数据、相同的训练配方以及相同的随机种子下,训练了七个版本的 Grader(评分器)。它们之间唯一的区别在于 tokenizer。所有版本都在同一台测试机器上运行了相同的 500 个请求,使用 RTX 5090 GPU 和 vLLM 推理服务器,成本根据实测运行时间计算得出。
模型的平均响应长度从 350 个 token 降至 101 个 token。成本降低了 77.0%。质量方面,通过基准分数(bench score)来衡量——该分数综合了评分准确性以及对离题或违规文章的筛查准确率——从 0.703 提升至 0.810。
到达这一步需要一次方向修正。词表的第一版将每项能力的评分与周围的 JSON 融合为单个宏 token(macro token)。这是最紧凑的方案,但质量下降了:其基准测试得分为 0.689,低于生产环境评分器的 0.703。由于评分包含在宏 token 内部,评分与结构的每种组合都变成了同一 token 的不同变体,模型需要在单步中同时做出这两项选择。将评分单独作为一个 token 会使每次响应多消耗 2 个 token,但基准测试得分提升至 0.810,并且在实测中反而更便宜:推理成本降低了 77.0%,而融合版本的降低幅度仅为 73.3%。
这一经验教训不仅适用于评分器。当被压缩的片段恰好承载了模型存在的核心决策时,压缩就会付出代价。目标不是追求最廉价的词表,而是保留关键 token 的前提下实现最低成本。
超越评分器
为了验证这种增益是否仅适用于我们的特定场景,我们在五个公开领域(合同、医学论文、科学论文、新闻和 Python 代码)以及三个模型系列(Qwen3、Llama-3.1 和 Gemma-3)上,将 VocabX 与三种参考方法进行了对比。所有方法均使用相同的挖掘文档和测试文档,并设定了相同的词表上限。
在所有十五种组合中,VocabX 的压缩率均超过了最强的参考方法,领先幅度为 1.2 到 9.3 个百分点。在估算的推理成本方面,经过剪枝(pruned)的 VocabX 版本也在所有十五种组合中保持领先,平均优势分别为:Qwen3 上 10.2 个百分点,Llama-3.1 上 7.5 个百分点,Gemma-3 上 13.6 个百分点。在合同领域,剪枝后的 VocabX 版本以 113,426 个词表条目实现了 62.6% 的 token 减少量,相比之下,表现最佳的就地 BPE 配置虽然达到了 61.8% 的减少量,却使用了 207,803 个词表条目。
只为关键 Token 付费
VocabX 并没有让模型变得更聪明。它只是让模型停止为那些无需逐字生成的文本付费,并停止对永远不会用到的词表进行打分。在我们的评分器中,这一优化使推理成本降低了 77%,且使用的是相同的基础模型和相同的训练配方。
专业化通常始于数据和权重。但它也可以从更早的一层开始——即词表。
完整的方法、所有实验的表格以及被舍弃的干预措施将收录于 VocabX 论文中,我们即将发布该论文。
参考文献
- Dharma-AI. "VocabX: Cost-Weighted Vocabulary Adaptation for Domain-Specific Language Models." In preparation (2026).
- Gee, Leonidas, et al. "Fast vocabulary transfer for language model compression." EMNLP Industry Track (2022).
- Gee, Leonidas, et al. "Multi-word tokenization for sequence compression." EMNLP Industry Track (2023).
- Smith, Jimmy T.H., et al. "In-Place Tokenizer Expansion for Pre-trained LLMs." arXiv.15232 (2026).









