Skip to content
Neuronavt
Go back

Шрифты для визуализации токенизации LLM

Инструмент7/10

Коротко

Статья описывает локальный компилятор шрифтов, который отображает токены языковых моделей одинаковой шириной или цветом, помогая изучать токенизацию прямо в тексте Discord и Slack. Это наглядный инструмент, но не точный счётчик токенов для API: результат зависит от браузера, форматирования и ограничений конкретного токенизатора.

Контекст

Автор развивает проект Token-space font compiler: браузерный инструмент, который строит TTF по шрифту и токенизатору. Исходная задача — сделать границы токенов видимыми в обычных сообщениях, не требуя отдельного скрипта токенизации при отображении. Для интеграции описаны Discord через Vesktop/Vencord и веб-версия Slack через пользовательский скрипт.

Главное

Как сделано

Пользователь вводит текст, выбирает пресет токенизатора или загружает совместимый pipeline и исходный шрифт, после чего компилятор создаёт TTF с токенизатором, встроенным в shaping-правила. В режиме равной ширины каждый выведенный токен занимает 3 em в пределах поддерживаемого shaping run; дополнительный межтокенный интервал по умолчанию равен нулю и ограничен 0,5 em. Режим цветовой маркировки сохраняет естественную ширину символов, но раскрашивает токены; он поддерживает BPE-текст, но не ctok и не соединённые emoji.

Для Discord нужно установить TTF, скачать созданную тему CSS и подключить её в Vesktop через Vencord → Themes; можно ограничить применение Discord ID конкретного автора. Для Slack нужно установить TTF, указать отображаемые имена или member ID отправителей, скачать userscript и включить его в менеджере скриптов браузера. Скрипт стилизует совпавшие сообщения, не меняет их текст и не отправляет сетевые запросы. Сборка выполняется локально с Pyodide и fontTools.

Результаты

Проведены целевые аудиты: 17 904 BPE-проверки пробелов на шести доступных бинарных файлах шрифтов и 2 355 случаев ctok; браузерные проверки включали 60 сравнений ширины и 20 примеров переноса строк. В аудите пробелов Trinity Large Thinking и Laguna M.1 прошли все 2 984 проверки каждый. Для Gemma 4 и Gemini 3.5 Flash обычный текст прошёл 5 493 Gutenberg-примера в каждом из двух режимов; две закреплённые Google-реализации совпали на 6 007 входах. Noto Emoji прошёл 5 250 проверок поддерживаемых emoji. Это результаты ограниченных тестов, а не гарантия совпадения во всех приложениях и для любого текста.

Ограничения

Шрифт не является точным счётчиком токенов или биллинга API: он не универсально учитывает специальные токены, шаблоны чатов, мультимодальные данные и служебные накладные расходы. Границы shaping runs, форматирование, ссылки, переносы, пробелы, нормализация Unicode, bidi, сложные письменности, лигатуры и подстановка отсутствующих глифов могут изменить результат или нарушить одинаковую ширину. Произвольные загруженные токенизаторы не получают тех же аудитов, что и пресеты.

Есть известные ошибки и пределы: DeepSeek неверно классифицирует U+001C–U+001F как пробельные символы; GLM-5.3 и Llama 3 ограничивают отдельные фрагменты 64 байтами/32 раундами и могут показать [BPE limit]. ctok — неофициальное приближение Claude, не проверенное вызовами Claude; поиск ограничен 256 шагами на компонент, а некоторые версии имеют ошибки нормализации и обрамления. В браузерных сравнениях ширины 43 из 60 совпали, 15 разошлись из-за табуляции/переносов, два выявили отдельную границу перед начальным пробелом. Длинный свёрнутый текст может отображаться медленно; стоимость использования или производительность в масштабе статья не приводит.

Что взять себе

Читать оригинал, если…

Откройте оригинал, если нужны пошаговые инструкции для Vesktop и Slack, подробные отчёты аудитов, перечень поддерживаемых профилей и воспроизводимые примеры расхождений.