VocabX - метод Dharma-AI для специализации словаря небольшой языковой модели под один домен или задачу. Токены в нём отбирают по стоимости: считается, во сколько обходится генерация токена, а не как часто он встречается в корпусе.
В продакшн-системе автоматической проверки португальских эссе на базе Qwen3-4B замена исходного словаря сократила средний ответ с 350 до 101 токена. Измеренная стоимость инференса упала на 77%. Базовая модель, данные и рецепт обучения остались прежними, пересобрали только токенизатор.
Все числа ниже взяты из текущей версии статьи Dharma-AI, она ещё на рецензировании и может измениться до публикации. Собственных замеров здесь нет: разбор опирается на опубликованный кейс.
Что такое VocabX и почему токенизатор - недооценённый рычаг стоимости
Токенизатор обычно наследуют от базовой модели и не трогают: он идёт в комплекте с весами, а обучение начинается поверх готового словаря. Для модели, заточенной под один домен, такая логика обходится дорого. Словарь задаётся до первого шага обучения и дальше влияет на каждый сгенерированный токен. В статье Dharma-AI его называют одним из крупнейших рычагов стоимости для специализированной модели.
VocabX пересобирает словарь под задачу. Критерий отбора - вклад токена в стоимость инференса, а не частота в корпусе. Разница принципиальная: частотный подход спрашивает «что чаще встречается в текстах», стоимостный - «на чём система тратит больше денег». Ответы не совпадают, если генерация дороже чтения.
Две потери от универсального словаря: фрагментация и избыточность
Фрагментация: токенизатор дробит на множество кусков именно то, что домен повторяет чаще всего. В оценщике эссе это JSON-оболочка, названия компетенций и фразы оценки. В контрактах - шаблонные пункты (boilerplate clauses). В коде - идентификаторы.
Избыточность: словарь несёт десятки тысяч записей, которые домен не использует. У Qwen3-4B это 151 669 записей, и на каждом сгенерированном токене модель считает распределение вероятностей по всем ним. Такое распределение и есть логиты: чтобы выбрать следующий токен, нужно посчитать скор для каждой записи словаря. Лишние записи - это вычисления, которые никто не заказывал.
| Потеря | Что происходит | Пример в оценщике эссе |
|---|---|---|
| Фрагментация | Повторяющийся фрагмент режется на несколько токенов, генерация тратится на служебную структуру | JSON-оболочка и названия компетенций в каждом ответе |
| Избыточность | Скор считается по 151 669 записям, включая почти не используемые в задаче | Токены других языков и форматов, которые в оценке не встречаются |
Модель, настроенная на проверку американских школьных экзаменов по биологии, почти никогда не пишет по-китайски, но на каждом шаге считает вероятность каждого китайского токена. Это прямая аналогия из статьи, и она хорошо объясняет вторую потерю.
Кейс: автоматический оценщик португальских эссе на Qwen3-4B
Система получает эссе, формулировку задания и опорные тексты, а возвращает JSON с баллом и комментарием по каждой компетенции. Задача узкая: один язык, один формат ответа, повторяющаяся структура каждого ответа. Нагрузка продакшн, поэтому стоимость одного запроса умножается на объём проверок.
Исходный токенизатор Qwen3-4B на 151 669 записей строился для многих языков и типов текста. В оценщике он работал для португальского и одного шаблона вывода. Разрыв между тем, на что рассчитан словарь, и тем, где он применяется, и есть источник потерь.
Кейс типичный, если у задачи есть три признака: узкий домен, стабильный формат вывода и высокая доля генерируемых токенов. Рядом в статье стоят контракты с шаблонными пунктами и код с повторяющимися идентификаторами. Логика одна: домен воспроизводит ограниченный набор конструкций, а универсальный словарь каждую режет на куски.
Почему сгенерированный токен дороже прочитанного в 7,4 раза
Инференс делится на две фазы. Prefill - чтение промпта: токены входа обрабатываются параллельно, модель проходит по контексту один раз. Decode - генерация: токены выходят по одному, каждый требует отдельного прямого прохода по весам и по всему словарю. В этом кейсе сгенерированный токен обходился в 7,4 раза дороже прочитанного.
Отсюда стратегия: давить на выход. Сокращение ответа с 350 до 101 токена уменьшает самую дорогую часть биллинга примерно в 3,5 раза по объёму генерации. Искать тот же эффект на входе пришлось бы через сжатие промптов, а там запас куда меньше.
Как ускоряют противоположную фазу, чтение контекста, видно на другом примере: разбор подхода V4.1 Flash к KV-кэшу на Qwen3 показывает, почему выигрыш в prefill оценивают отдельно от генерации. Стоимость токена не одна на всю систему: она зависит от фазы и от длины контекста.
Как VocabX работает: два уровня сжатия и статистика для редких кандидатов
Метод меняет словарь на двух уровнях одновременно. Первый - перестройка разбиения слов на сабворды под доменный корпус: словарь учится на текстах задачи, а не на смеси языков и форматов. Второй - склейка повторяющихся длинных фрагментов в макротокены, когда одна запись словаря заменяет последовательность из нескольких токенов.
Отдельный механизм - статистическая оценка для редких кандидатов, не попавших в выборку. Смысл в том, чтобы не отбрасывать потенциально выгодный токен из-за низкой частоты: длинный фрагмент, который стабильно повторяется в проде, может окупаться, даже появляясь в корпусе нечасто.
Граница известного: в опубликованном тексте статьи оба уровня описаны тезисно, формулы отбора и точная статистика по редким кандидатам не раскрыты. Оценить применимость метода по заметке можно, воспроизвести - нет, для этого нужна сама статья.
Меняется только словарь. Веса, датасет и рецепт обучения остаются прежними, поэтому подход стыкуется с уже работающим пайплайном: не нужно переразмечать данные или заново подбирать гиперпараметры.
Макротокены: как JSON-оболочка превращается в один токен
Каждый ответ оценщика начинается с одной и той же JSON-оболочки, содержит те же названия компетенций и те же фразы оценки. Универсальный токенизатор дробит эту оболочку на несколько токенов, и модель тратит генерацию на воспроизведение служебной структуры.
Макротокен снимает эту работу: один шаг вместо нескольких. Чем длиннее и стабильнее повторяющийся фрагмент, тем выше выигрыш. В контрактах такими фрагментами становятся шаблонные пункты, в коде - идентификаторы и повторяющиеся конструкции, в оценщике - служебные строки формата.
| Тип фрагмента | Где повторяется | Что даёт макротокен |
|---|---|---|
| JSON-оболочка ответа | Оценщик эссе, любой шаблонный вывод | Служебная структура перестаёт занимать шаги генерации |
| Шаблонные пункты договора | Контракты и юридические документы | Одинаковые абзацы кодируются компактнее |
| Идентификаторы и конструкции | Код, логи, конфиги | Повторяющиеся имена не дробятся на куски |
Результаты: -77% стоимости инференса и ответ 101 токен вместо 350
Итог кейса в трёх строках. Средняя длина ответа сократилась с 350 до 101 токена. Измеренная стоимость инференса упала на 77%. Базовая модель, данные и рецепт обучения не менялись, пересобрали только словарь.
| Параметр | До | После |
|---|---|---|
| Средняя длина ответа | 350 токенов | 101 токен |
| Измеренная стоимость инференса | базовый уровень | минус 77% |
| Базовая модель, данные, рецепт обучения | Qwen3-4B | без изменений |
«Измеренная стоимость» здесь означает замер на реальной системе, а не оценку по числу токенов на бумаге. Методику расчёта статья в открытом виде не раскрывает: неясно, какое железо, какой движок инференса и какая цена за токен заложены в расчёт. Поэтому 77% стоит читать как ориентир для похожего сценария, а не как гарантию для вашего стека.
Второй ограничитель - статус источника. Статья на рецензировании, числа могут измениться до публикации. Планировать бюджет на основе предварительной версии можно только с запасом.
Компромиссы: где сжатие формата начинает вредить качеству
Сжатие не бесплатное. В кейсе слишком агрессивное сжатие формата ответа ухудшило качество: экономия на служебных токенах дошла до точки, где модель начала терять структуру, которую от неё ждут. Вывод простой: специализация словаря требует баланса, а не максимального сжатия любой ценой.
Есть и вторая сторона. Смена токенизатора меняет то, как модель видит текст, поэтому качество после замены словаря нужно мерить заново. Старые метрики, снятые на исходном словаре, ничего не гарантируют.
Bench score 0,703 → 0,810: почему отдельный токен для оценки компетенции сработал
Выделение оценки компетенции в отдельный токен подняло bench score с 0,703 до 0,810, и экономия при этом стала чуть больше. Модель перестаёт тратить шаги на дробление служебной строки и реже путается в формате: структура ответа зашита в словарь, а не собирается каждый раз заново.
Случай редкий. Обычно качество и стоимость тянут в разные стороны, здесь дизайн словаря сработал в обе. Экстраполировать на другие задачи без проверки не стоит: детали замера в статье краткие, а сама работа на рецензировании.
Риски для практика: сужение обобщения за пределами домена, хрупкость при смене формата ответа, дополнительная работа при обновлении базовой модели. Если завтра JSON-схема поменяется, макротокены придётся пересобирать и заново проверять качество.
Сравнение с FVT, MWT и in-place BPE: 15 из 15 в пользу VocabX
Авторы сравнили VocabX с тремя альтернативами: FVT, MWT и in-place BPE. Охват - пять публичных доменов и три семейства моделей: Qwen3, Llama-3.1, Gemma-3. Во всех 15 комбинациях VocabX дал большее сжатие.
Как читать этот результат. Метрика сравнения - степень сжатия, а не универсальный рейтинг токенизаторов. Большее сжатие не гарантирует лучшего качества на вашей задаче: в кейсе с оценщиком качество росло при аккуратном дизайне словаря и падало при слишком агрессивном. Абсолютные значения сжатия по доменам в открытом изложении не приводятся, так что оценивать отрыв от альтернатив приходится по счёту побед, а не по процентам.
Набор семейств моделей здесь важнее, чем кажется. Эффект не привязан к одному токенизатору Qwen: у Llama-3.1 и Gemma-3 собственные словари, и в комбинациях с ними VocabX тоже показал большее сжатие.
Кому подходит VocabX и как оценить свою задачу
Признаки, при которых стоит смотреть в сторону специализации словаря:
- один домен или один язык, а не широкая мультиязычная задача;
- стабильный формат ответа: JSON, шаблоны, boilerplate-структуры;
- выходные токены доминируют в стоимости запроса;
- объём запросов продакшн-уровня, где экономия окупает инженерные часы.
Когда не стоит: задача живёт в нескольких языках сразу, формат вывода меняется каждые пару недель, нагрузка небольшая и пересборка словаря не вернёт вложенное. Специализация сужает словарь под текущий домен, и вместе с ним сужается запас прочности на неожиданных входах.
Практические шаги, которые не требуют экзотических инструментов:
- Собрать доменный корпус из реальных промптов и ответов системы.
- Посмотреть, какие фрагменты универсальный токенизатор дробит чаще всего: обычно это служебные строки и повторяющиеся шаблоны.
- Посчитать соотношение стоимости входных и выходных токенов на своём стеке. Если генерация дешевле чтения, выигрыш от экономии на выходе будет скромным.
- После смены словаря прогнать собственный бенч качества, а не только замер длины ответа.
Токеномика не заканчивается на словаре. Tessera-27B-B-CJK экономит thinking-токены за счёт сжатого CJK-шортката в рассуждениях, а Swift-1.5-Qwen3.8-Flash-Next прошёл Aider с 41,1% против 40,2%, потратив около 40% токенов и времени. Три разных рычага, один вопрос: сколько токенов стоит получить нужный ответ.
Что важно знать об источнике и статусе цифр
Статья Dharma-AI опубликована 21 октября 2026 года. Авторы: Bernardo França de Aguiar, Gabriel Pimenta de Freitas Cardoso, Bruno Duarte, Francisco de Almeida Rocha Alves, все из Dharma-AI.
Числа взяты из текущей версии работы, которая ещё на рецензировании и может измениться до публикации. Это касается и 77%, и длины ответа, и сравнения с FVT, MWT и in-place BPE: детали замеров в открытом изложении краткие, поэтому относиться к ним стоит как к предварительным.
Переносимая часть вывода шире конкретных 77%: токенизатор задаётся до обучения, а стоимость токена на выходе обычно выше, чем на входе. Проверять эту идею всё равно придётся на своей задаче, со своим корпусом и своим бенчем качества.