Модели, специализированные для определенной области или задачи путем дообучения общих моделей с открытым исходным кодом, таких как Qwen и Gemma, наследуют словарь, созданный для множества областей и общих применений.
В средстве проверки эссе, которое мы используем в продакшене, этот словарь разбивает текст, который модель пишет чаще всего, на множество токенов. Эта статья содержит предварительный обзор результатов из научной работы VocabX, которую мы скоро опубликуем: как мы специализировали словарь с учетом стоимости каждого токена, а не его частоты, и снизили измеренную стоимость инференса на 77% без изменения базовой модели.
Токенизатор обычно рассматривается как фиксированное свойство базовой модели: оно наследуется и остается без изменений. Для модели, специализирующейся в одной области, это может стать одним из главных рычагов влияния на затраты, причем этот параметр устанавливается до начала любого этапа обучения.
Одна из систем, используемых нами в продакшене, — это автоматический оценщик португальских эссе, созданный на базе Qwen3-4B. Он принимает эссе, промт и вспомогательные тексты, а затем возвращает оценку в формате JSON с баллом и комментарием по каждому критерию.
Модель уже была небольшой (4 миллиарда параметров) и уже была дообучена для этой задачи. Однако ее токенизатор все еще оставался оригинальным от Qwen3-4B, созданным для множества языков и различных типов текста. В оценщике он использовался для одного языка (португальского) и одного формата ответа. Это влекло за собой две проблемы: текст, который оценщик пишет при каждом запросе, требовал больше токенов, чем необходимо, а для каждого сгенерированного токена модель оценивала словарь из 151 669 записей, включая множество тех, которые эта задача практически никогда не использует.
Мы пересоздали этот словарь с помощью метода, который называем VocabX, сохранив при этом ту же базовую модель, те же данные и ту же методику обучения. Цифры в этой статье взяты из текущей версии статьи, которая все еще находится на рецензировании, и могут измениться до публикации.
Словарь, созданный для всех
Ведущие языковые модели читают и пишут токенами, а токенизатор определяет, как текст превращается в токены. Токенизаторы ведущих универсальных моделей обучаются на больших коллекциях текста из самых разных областей и языков — от исходного кода и контрактов до китайского. Для универсальной модели такой выбор вполне разумен.
Для модели, используемой в одной конкретной области, это создает два вида потерь одновременно.
Первый — это фрагментация. Токенизатор разбивает на множество частей именно то, что данная область повторяет чаще всего. В оценщике каждый ответ начинается с одной и той же оболочки JSON, одних и тех же названий компетенций, одних и тех же оценочных фраз. В контрактах это стандартные пункты. В коде — идентификаторы. Каждая из таких последовательностей требует нескольких токенов там, где хватило бы одного, и модель платит за каждый из них при каждом запросе.
Второй — избыточность. Словарь содержит десятки тысяч записей, которые область никогда не использует, и модель вычисляет оценку для каждой из них при генерации каждого токена. Модель, настроенная на оценку американских школьных экзаменов по биологии, практически никогда не будет писать на китайском языке, тем не менее она вычисляет вероятность каждого китайского токена на каждом шаге. Словарь разбивает на множество частей то, что область повторяет чаще всего, и содержит записи, которые эта область никогда не использует.
Чтение обходится дешево, а запись — дорого
Естественная реакция — подсчитать токены и попытаться уменьшить их количество. Но количество — это еще не счет к оплате.
Чтобы понять, почему сгенерированный токен стоит дороже, полезно рассмотреть, как работает инференс. В нем выделяют две фазы. На этапе предварительного заполнения (prefill) модель обрабатывает весь ввод за один проход через сеть: каждый вес, считываемый из памяти GPU, переиспользуется для каждого входного токена, и ограничивающим фактором здесь являются вычисления. На этапе декодирования (decode) модель генерирует ответ по одному токену за раз, и каждый токен требует полного прохода. Каждый считанный вес используется лишь несколько раз, и графический процессор большую часть времени ждет поступления данных из памяти: ограничивающим фактором становится пропускная способность памяти.
Этот эффект проявляется сильнее всего как раз в тех условиях, в которых работаем мы: малые модели, обслуживаемые с умеренными батчами. Батчинг запросов распределяет чтение весов между ними и смягчает проблему, но не решает ее полностью. На каждом шаге декодирования модель также считывает кэш KV — память внимания, которая содержит уже обработанный контектекст и растет вместе с ним. В рассмотренном нами случае (оценщик) сгенерированный токен обходится в 7,4 раза дороже прочитанного токена, но это соотношение варьируется в зависимости от оборудования, задачи, размера батча, длины контекста и других факторов и может быть еще выше. В целом общая тенденция сохраняется: генерация стоит дороже, чем чтение.
Представьте транспортную компанию, которая берет плату за каждую коробку, но за исходящие коробки берет в семь раз больше, чем за входящие. Сокращение общего количества коробок помогает. Сокращение количества исходящих коробок помогает в семь раз сильнее. Метод, который сжимает входные и выходные данные в равной степени, упускает большую часть возможных сбережений.
Третьей составляющей счета является сам словарь. Последний слой модели (LM head) преобразует внутреннее состояние в оценку для каждого возможного токена. Для этого он содержит по одной строке параметров на каждую запись словаря. В модели размером с Qwen3-4B эта матрица составляет почти 10% всех параметров. Крупные модели поглощают такую долю без особых проблем, но для малой модели это серьезная нагрузка.
Причем эта цена платится не один раз. Входной слой ищет только строку считываемого токена, но LM head считывает и умножает всю матрицу целиком для каждого сгенерированного токена. Поскольку процесс декодирования и так ограничен пропускной способностью памяти, каждая лишняя строка означает дополнительные данные, которые нужно пересылать на каждом шаге. Запись, которую предметная область никогда не использует, стоит ровно столько же, сколько и частая запись. Именно поэтому добавление токенов может одновременно снизить их количество и увеличить сумму в счете. VocabX не включает этот компонент в свой критерий отбора, но контролирует размер словаря в два этапа: слияние подслов заменяет базовый словарь на более компактный, специфичный для конкретной предметной области, а макросы добавляются в рамках фиксированного бюджета. В оценщике выходной слой сократился примерно со 152 000 до 65 000 строк.
Почему существующие решения оказались неэффективными
Адаптация словарного запаса модели — не новая идея. Эталонные методы в литературе, такие как быстрая передача словаря (FVT), многословная токенизация (MWT) и in-place токенизация от Liquid AI (in-place BPE), продолжающая обучение BPE на базе исходного словаря, уже снижают уровень фрагментации. Когда мы протестировали их на нашей проблеме, то обнаружили два ограничения.
Они выбирают токены по частоте, а не по стоимости. Выражение, которое часто встречается во вводе, для них ценнее того, что появляется реже в ответе, даже если второе обходится дороже при обслуживании.
Они работают на одном уровне. Они либо корректируют разбиение слов на части, либо объединяют целые фразы в один токен. Ни один из этих трех подходов не делает и то, и другое по одному и тому же критерию. Кроме того, главная проблема оценщика заключалась именно в длинных повторяющихся фрагментах, таких как оболочка JSON, до которых метод подслов добирается только после пошагового слияния каждой детали.
Как мы это решили
VocabX устраняет оба эти ограничения, а также решает третью проблему, возникающую на очевидном пути решения первой.
Во-первых, мы изменили подход к постановке вопроса. Вместо того чтобы спрашивать, сколько токенов экономит кандидат, мы спрашиваем, во сколько обходится эта экономия в плане затрат и времени. Каждый исключенный токен умножается на стоимость поля, в котором он появляется: системного промта, сообщения пользователя или ответа модели. В исследованном нами случае системы проверки (грейдера) токен, сэкономленный в ответе, в 7,4 раза ценнее токена, сэкономленного во входных данных, и в соответствии с этим строится словарь.
Во-вторых, мы работаем сразу с двумя уровнями. Возвращаясь к аналогии с транспортной компанией: можно сократить объем коробок, упаковывая каждый предмет компактнее, или же заметить, что один и тот же набор из двенадцати предметов отправляется каждую неделю, и пересылать его в единой коробке. VocabX делает и то, и другое. На уровне субтокенов система перерабатывает правила разбиения предметных слов на части. На многословном уровне она ищет повторяющиеся целые фрагменты — от коротких выражений до полных строк и JSON-оберток — и превращает каждый из них в один токен, который мы называем макротокеном. Оба уровня выбираются по одному и тому же критерию стоимости, каждый в рамках своего бюджета.
Для поиска таких фрагментов мы используем пять майнеров — механизмов автоматического поиска повторяющихся по всему корпусу текстов фрагментов, каждый из которых специализируется на определенном типе повторов: длинных словах, целых строках, выражениях, полных предложениях и структурах с пунктуацией (таких как JSON и теги). В среднем по восьми корпусам наибольший вклад внес последний тип, а в коде он один обеспечил 17,5 пункта. Без всех пяти майнеров сокращение количества токенов в грейдере упало бы на 55,6 пункта.
В-третьих, мы оцениваем то, что выборка не способна обнаружить. Выбор токенов по критерию стоимости требует понимания того, сколько еще экономит каждый кандидат после уже выбранных. Точное измерение этого потребовало бы пересчета всего корпуса после каждого выбора, десятки тысяч лет или раз. Распространенный способ масштабирования этой задачи — измерения на выборке документов, при этом кандидат, отсутствующий в выборке, получает нулевой показатель прироста.
Выражение, которое встречается 37 раз в 50 000 документах, попадает в выборку из 400 документов лишь примерно в 26% случаев. В корпусе контрактов только 16,6% кандидатов обнаруживаются в выборке из 400 документов; остальные не оцениваются никогда.
Прирост от кандидата складывается из двух частей. Первая — это объем экономии по всему корпусу, и его можно подсчитать точно, без выборки. Вторая часть показывает, какая доля этой экономии еще не покрыта уже выбранными токенами, и оценивать нужно только ее. Для кандидатов, которых выборка не видит, мы используем статистическую оценку на основе поведения тех кандидатов, которых она видит, вместо нуля. Кандидат, редкий в выборке, но частый в корпусе, возвращается в число претендентов.
Одно это изменение при той же выборке и том же бюджете увеличило сокращение токенов на корпусе контрактов с 44,7% до 52,8%.
Что изменилось в грейдере
Чтобы измерить реальный эффект, мы обучили семь версий грейдера на одной и той же базовой модели, с теми же данными, тем же рецептом и тем же начальным значением случайных чисел (seed). Единственным различием между ними был токенизатор. Все они выполнили одни и те же 500 запросов на одной тестовой машине с графическим процессором RTX 5090 и сервером вывоза vLLM, а стоимость рассчитывалась на основе измерений времени выполнения.
Ответ модели сократился в среднем с 350 до 101 токена. Затраты снизились на 77,0%. Качество, измеренное с помощью бенчмарк-оценки, которая объединяет точность проверки и точность отсеивания нерелевантных или нарушающих правила эссе, выросло с 0,703 до 0,810.
Достижение этого результата потребовало корректировки курса. Первая версия словаря объединяла оценку за каждую компетенцию вместе с окружающим JSON в единый макротокен. Это был самый компактный вариант, но качество при этом падало: его оценка по бенчмарку составила 0,689, что ниже показателей продакшн-грейдера (0,703). Когда оценка находилась внутри макротокена, каждая комбинация оценки и структуры становилась отдельным вариантом одного и того же токена, и модель выбирала оба элемента за один шаг. Выделение оценки в отдельный токен стоило дополнительных 2 токенов на ответ, но подняло оценку по бенчмарку до 0,810 и по результатам измерений оказалось даже выгоднее: сокращение составило 77,0% против 73,3% у объединенной версии.
Этот урок применим далеко за пределами грейдера. Сжатие имеет свою цену, когда сжимаемый фрагмент несет в себе именно то решение, ради которого существует модель. Цель состоит не в том, чтобы получить самый дешевый словарь, а в том, чтобы получить самый дешевый словарь, сохраняющий действительно важные токены.
За пределами грейдера
Чтобы выяснить, был ли этот прирост специфичным только для нашего случая, мы сравнили VocabX с тремя эталонными методами на пяти публичных доменах (контракты, медицинские статьи, научные статьи, новости и код на Python) и трех семействах моделей (Qwen3, Llama-3.1 и Gemma-3). Во всех методах использовались одни и те же документы для майнинга и тестирования, а также единый предельный размер словаря.
VocabX обеспечил более высокий уровень сжатия, чем самый сильный эталонный метод во всех пятнадцати комбинациях, с отрывом от 1,2 до 9,3 пункта. По оценкам стоимости инференса усеченная версия VocabX также заняла первое место во всех пятнадцати случаях со средним отрывом в 10,2 пункта на Qwen3, 7,5 на Llama-3.1 и 13,6 на Gemma-3. На контрактах усеченная версия достигла 62,6% сокращения токенов при 113 426 элементах словаря против 61,8% у лучшей конфигурации со встроенным BPE, использующей 207 803 элемента.
Оплата только за те токены, которые имеют значение
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:2607.15232 (2026).
Для дальнейшего чтения
- Тот же кластер, утилизация выше на 33 пункта: все дело в порядке
- Управление графическими процессорами: почему простаивающие GPU — это новые самолеты на приколе
- Почему специализация неизбежна
- Специализация превосходит масштабирование: стратегическая переменная, которую упускает из виду большинство покупателей ИИ
- Деградация текста: сбой в продакшне, который не отслеживает большинство бенчмарков
Изучайте Dharma AI на Hugging Face, чтобы опробовать наши демоверсии, скачать открытые модели и узнать, как специализированные ИИ-системы превосходят универсальные модели в реальных корпоративных приложениях.











