词表特化如何把推理成本降低 77%:基于 Qwen3-4B 的葡萄牙语作文自动评分器与 VocabX 方法解析
How Specializing the Vocabulary of SLMs Can Cut Inference Cost by 77% in Real Applications
Hugging Face 预告了即将发表的 VocabX 论文结果:在不更换基座模型、数据和训练配方的前提下,为 Qwen3-4B 构建的葡萄牙语作文自动评分器重建词表后,实测推理成本降低 77%。
通过微调 Qwen 和 Gemma 等通用开源模型而针对特定领域或任务进行专门化的模型,继承了一个为众多领域和通用应用构建的词表。
在我们生产环境中运行的一个作文评分器中,这个词表把模型最常写的文本切分成了大量 token。本文预览即将发表的 VocabX 论文的部分结果:我们如何围绕每个 token 的成本而非其出现频率来专门化词表,并在不改变基础模型的情况下将实测推理成本降低了 77%。
tokenizer 通常被视为基础模型的一个固定属性,被继承下来且无人改动。但对于一个专门用于单一领域的模型来说,它可能是最大的成本杠杆之一,而且它在任何训练步骤开始之前就已经确定。
我们在生产环境中运行的系统之一,是一个基于 Qwen3-4B 构建的葡萄牙语作文自动评分器。它接收作文、提示词和辅助文本,返回一份 JSON 评估结果,包含每个维度的分数和评语。
这个模型已经很小,只有 40 亿参数,并且已经针对该任务进行过训练。然而,它的 tokenizer 仍是原始 Qwen3-4B 的 tokenizer,是为多种语言和多种文本类型构建的。在评分器中,它只用于单一语言——葡萄牙语——和单一的响应格式。这带来了两方面的成本:评分器每次请求所写的文本占用了超出必要的 token 数量,而且模型每生成一个 token 都要对 151,669 个词表条目进行打分,其中许多条目在该任务中几乎从不使用。
我们用一种称为 VocabX 的方法重建了那个词表,同时保持相同的基础模型、相同的数据和相同的训练配方。本文中的数字来自论文的当前版本,仍在审阅中,发表前可能会有所变化。
为所有人构建的词表
领先的语言模型以 token 进行读取和写入,而 tokenizer 决定了文本如何变成 token。领先的通用模型的 tokenizer 是在来自众多领域和语言的大量文本集合上训练的,从源代码到合同再到中文。对于通用模型而言,这种选择是合理的。
对于一个只在单一领域使用的模型,这会同时造成两种浪费。
第一种是碎片化。tokenizer 恰恰把该领域重复最多的内容切分成许多碎片。在评分器中,每次响应都以相同的 JSON 包裹结构、相同的维度名称、相同的评价措辞开头。在合同中,是那些套话条款。在代码中,是标识符。这些序列每一个都要花费多个 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 上都要读取并乘以整个矩阵。由于解码本已受内存限制,每一行额外的数据都意味着每一步要搬运更多数据。领域从未使用的条目与高频条目的成本完全相同。这就是为什么增加 token 会同时降低数量却抬高账单。VocabX 没有把这一项纳入其选择标准,但它通过两个步骤控制词表大小:子词合并用更小的、领域专属的词表替换基础词表,宏则在固定预算下加入。在评分器中,输出层从约 152,000 行减少到约 65,000 行。
为什么现有方案不够用
调整模型词表并不是新想法。文献中的参考方法,如 fast vocabulary transfer(FVT)、multi-word tokenization(MWT)以及 Liquid AI 的 原位分词器扩展(in-place BPE,从原词表继续 BPE 训练),已经能减少碎片化。但当我们在自己的问题上测试它们时,发现了两个局限。
它们按频率而非成本选择 token。 一个在输入中频繁出现的表达式,其价值被认为高于一个在响应中出现较少的表达式,即使后者才是服务成本更高的那个。
它们只在单一层面上工作。它们要么调整词语被切分成碎片的方式,要么把整句短语合并成一个 token。这三者没有一个能在同一标准下同时做这两件事。而评分器最大的浪费恰恰在于冗长且重复的片段,比如 JSON 封套,子词方法只能在逐个合并各部分之后才能触及它。
我们如何解决
VocabX 同时解决了这两个局限,以及通向解决第一个局限的明显路径上出现的第三个问题。
首先,我们改变了问题本身。我们不再问一个候选能节省多少 token,而是问它能节省多少成本和时间。每个被消除的 token 都乘以其出现字段的单价:系统提示、用户消息或模型响应。在我们测量的案例(评分器)中,响应里节省的一个 token 的价值是输入里的 7.4 倍,词表也据此构建。
其次,我们同时在这两个层面上工作。回到物流公司的例子:你可以通过更好地打包每件物品来节省箱子,也可以认识到同一套十二件物品的套件每周都要发货,于是把整套件装进一个箱子。VocabX 两者都做。在子词层面,它重建领域词被切分成碎片的方式。在多词层面,它寻找重复出现的完整片段,从短表达式到整行乃至 JSON 封套,并把每一个变成单个 token,我们称之为宏 token(macro token)。两个层面都在同一成本标准下选择,各自拥有自己的预算。
为了找到这些片段,我们使用五个挖掘器,即在语料库中自动搜索重复片段的机制,每个专门针对一种重复类型:长词、整行、表达式、完整句子,以及带标点的结构如 JSON 和标签。在八个语料库上取平均,最后一种贡献最大,在代码上仅它一项就占了 17.5 分。如果缺少全部五个,评分器上的 token 缩减量会下降 55.6 分。
第三,我们估算样本看不到的部分。按成本选择 token 需要知道每个候选在已选 token 之外还能节省多少。精确测量这一点需要在每次选择之后重新处理整个语料库数万次。在大规模场景下,一种常见做法是在文档样本上测量,此时不在样本中的候选收益为零。
一个在 50,000 篇文档中出现 37 次的表达式,在 400 篇文档的样本中大约只有 26% 的概率出现。在一个合同语料库中,只有 16.6% 的候选出现在 400 篇文档的样本里;其余的从未被评估。
一个候选的收益有两个部分。其一是它在整个语料库上节省多少,这可以不依赖样本精确计算。其二是其中有多少尚未被已选 token 覆盖,只有这一部分需要估算。对于样本看不到的候选,我们基于样本可见候选的行为使用统计估算,而不是取零。一个在样本中罕见但在语料库中频繁出现的候选,重新回到了竞争之中。
仅这一项改动,在使用同样样本和同样预算的情况下,就把合同语料库上的 token 缩减率从 44.7% 提升到了 52.8%。
评分器中发生了什么变化
为了衡量真实效果,我们用相同的基础模型、相同的数据、相同的配方和相同的随机种子训练了七个版本的评分器。它们之间唯一的区别是分词器。所有版本都在同一台配有 RTX 5090 GPU 的测试机器上,使用 vLLM 推理服务器运行相同的 500 个请求,成本根据实测运行时间计算。
模型的响应从平均 350 个 token 降至 101 个。成本下降 77.0%。由基准分数衡量的质量(该分数综合了评分准确率以及筛选离题或违规作文的准确率)从 0.703 提升至 0.810。
实现这一点需要一次方向修正。词表的第一版把每项能力的分数与周围的 JSON 融合成单个宏 token。这是最紧凑的方案,但质量下降了:其基准分数为 0.689,低于生产评分器的 0.703。由于分数被包在宏里,分数和结构的每种组合都成了同一个 token 的不同变体,模型在单步中同时选择两者。给分数单独一个 token 每次响应多花 2 个 token,将基准分数提高到 0.810,而且在测量中甚至更便宜:降幅达 77.0%,而融合版本为 73.3%。
这条经验不仅适用于评分器。当被压缩的片段承载的正是模型存在的意义所系的那项决策时,压缩是有代价的。目标不是尽可能最便宜的词表,而是能保留重要 token 的最便宜词表。
超越评分器
为了弄清这一收益是否只在我们这个场景成立,我们在五个公开领域(合同、医学论文、科学论文、新闻和 Python 代码)和三个模型家族(Qwen3、Llama-3.1 和 Gemma-3)上,将 VocabX 与三种参考方法进行了比较。所有方法使用相同的挖掘文档和测试文档,以及相同的词表规模上限。
VocabX 在全部十五种组合中的压缩率都超过最强的参考方法,领先 1.2 到 9.3 个百分点。在估算的推理成本上,VocabX 的剪枝版本同样在全部十五种组合中领先,在 Qwen3 上平均领先 10.2 个百分点,在 Llama-3.1 上为 7.5,在 Gemma-3 上为 13.6。在合同领域,剪枝版本在拥有 113,426 个词表条目的情况下实现了 62.6% 的 token 缩减,而最优的原位 BPE 配置使用 207,803 个条目,仅达到 61.8%。
只为你真正需要的 token 付费
VocabX 并不会让模型更聪明。它让模型不再为不需要逐字写出的文本付费,也不再为一个永远不会用到的词表打分。在我们的评分器中,这使实测推理成本降低了 77%,同时使用相同的基础模型和相同的训练配方。
专用化通常从数据和权重开始。它也可以提前一层开始——从词表开始。
完整的方法、每个实验的表格以及被舍弃的干预手段将收录在 VocabX 论文中,我们即将发表。
参考文献
- Dharma-AI. "VocabX: Cost-Weighted Vocabulary Adaptation for Domain-Specific Language Models."(撰写中,2026)。
- Gee, Leonidas 等。"Fast vocabulary transfer for language model compression." EMNLP Industry Track(2022)。
- Gee, Leonidas 等。"Multi-word tokenization for sequence compression." EMNLP Industry Track(2023)。
- Smith, Jimmy T.H. 等。"In-Place Tokenizer Expansion for Pre-trained LLMs." arXiv:2607.15232(2026)。
延伸阅读
- 同一集群,利用率多出 33 个百分点:改变的是顺序
- GPU 管理:为什么闲置 GPU 是新的停飞飞机
- 为什么专业化不可避免
- 专业化胜过规模化:大多数 AI 采购决策忽视的战略变量
- 文本退化:大多数基准测试未追踪的生产故障模式
探索 Hugging Face 上的 Dharma AI,试用我们的演示、下载我们的开源模型,看看专业化 AI 系统如何在真实企业应用中超越通用模型。
来源: Hugging Face Blog · huggingface.co









