Токен в нейросети — минимальная структурная единица текста, полученная в результате токенизации, которая подаётся на вход языковой модели. Это может быть слово, часть слова (подслово), отдельный символ, знак препинания или даже байт. Каждый токен сопоставляется с числовым идентификатором из словаря модели и затем преобразуется в векторное представление (эмбеддинг), с которым нейросеть выполняет вычисления.
🧩 Что такое токенизация
Токенизация — процесс разбиения исходного текста на токены. Её главная задача — представить естественный язык в форме, удобной для обработки математическими алгоритмами. Без качественной токенизации модель не сможет адекватно улавливать смысловые связи, морфологию и контекст. Процесс включает два ключевых этапа: прямое кодирование (текст → последовательность ID токенов) и обратное декодирование (ID токенов → текст). Современная токенизация почти всегда является подсловной, что позволяет находить баланс между семантической насыщенностью слов и гибкостью символьных представлений.
🔍 Основные типы токенов
- Слова и числа — классические токены, выделяемые по пробелам и знакам пунктуации. Страдают от проблемы невидимых слов (OOV).
- Подслова — фрагменты слов, получаемые статистическими алгоритмами. Позволяют представить любое, даже ранее не встречавшееся слово, через композицию известных частей. Самый распространённый тип в современных LLM.
- Символы (включая Unicode) — каждый символ становится отдельным токеном. Абсолютная гибкость, но очень длинные последовательности и слабая смысловая нагрузка одного токена.
- Байты — токенизация на уровне отдельных байтов UTF-8. Устраняет OOV полностью, но требует огромного контекстного окна для длинных текстов.
- Специальные токены — служебные маркеры, управляющие поведением модели:
<s>(начало последовательности),</s>(конец),<pad>(заполнитель),<unk>(неизвестный токен),<mask>(маскирование) и другие.
⚙️ Ключевые алгоритмы токенизации
Выбор алгоритма определяет словарь токенов, эффективность кодирования и способность модели обрабатывать мультиязычные тексты. Рассмотрим наиболее влиятельные подходы:
- Byte Pair Encoding (BPE): итеративно объединяет наиболее частую пару символов (или токенов) в новый токен, пока не достигнет заданного размера словаря. Создаёт подслова, хорошо ловящие частые морфемы, но может порождать неоднозначные разбиения для редких последовательностей.
- WordPiece: близок к BPE, но выбирает пару для слияния по максимальному приросту правдоподобия языковой модели на обучающем корпусе. Маркирует продолжения слов префиксом
##(например,нейро+##сети). Использован в BERT. - Unigram Language Model: стартует с очень большого набора кандидатов и итеративно удаляет наименее вероятные токены, оптимизируя перплексию. Даёт более вероятностно обоснованный словарь; применяется в T5 и XLNet.
- SentencePiece: фреймворк, реализующий BPE или Unigram напрямую по сырому тексту (без предварительной токенизации по пробелам). Воспринимает пробелы как обычный символ (часто отображается как
▁), что делает его языконезависимым. Используется в LLaMA, Gemma и других. - Byte-level BPE: работает на уровне байтов, а не Unicode-символов. Благодаря этому любой возможный символ представим без единого токена
<unk>. Применён в GPT-3/4 и даёт универсальную обработку эмодзи, кода и редких письменностей. - Token-free подходы (byte-/character-level models): полностью отказываются от фиксированного словаря. Модели типа ByT5 или CANINE оперируют байтами или символами напрямую, но требуют кратно большей вычислительной мощности.
📊 Сравнение популярных токенизаторов
| 🔤 Токенизатор | ⚡ Принцип | 🔧 Особенность | ✂️ Пример разбиения «нейросети» | 🤖 Примеры моделей |
|---|---|---|---|---|
| Пробельный + правила | Разделение по пробелам и пунктуации | Много токенов OOV; полная зависимость от словаря | нейросети (если в словаре) либо UNK | Ранние рекуррентные LM |
| Byte Pair Encoding (BPE) | Итеративное слияние частых пар | Компактный словарь; частые подслова приоритетны | нейр + ос + ети | GPT-2, RoBERTa, GPT-Neo |
| WordPiece | Слияние по максимуму правдоподобия | Префикс ## для продолжений; детерминированное кодирование | нейро + ##сети | BERT, DistilBERT, ELECTRA |
| Unigram LM | Вероятностное удаление избыточных токенов | Оптимизирует перплексию; мягкая сегментация | нейро + сети (два варианта) | T5, XLNet, mBART |
| SentencePiece | BPE/Unigram по сырому тексту | Языконезависимость; пробел как символ ‘▁’ | ▁нейро + сети | LLaMA 1/2/3, ALBERT, Gemma, PaLM |
| Byte-level BPE | BPE на уровне байтов UTF-8 | Гарантированно нет UNK; универсальность для эмодзи и кода | (байтовые подслова) | GPT-3.5, GPT-4, GPT-4o |
| Token-free (ByT5, CANINE) | Побайтовое/посимвольное кодирование | Нулевой словарь, но длинные последовательности | н, е, й, р, о, с, е, т, и | ByT5, CANINE, MambaByte |
🧠 Историческая справка
Эволюция токенизации началась с простого разделения текста по пробелам и замены редких слов служебным токеном OOV. С развитием глубоких нейросетей потребовались методы, способные работать с морфологией и неизвестными словами. В 2016 году команда под руководством Рико Сеннриха адаптировала Byte Pair Encoding из алгоритмов сжатия данных для нейронного машинного перевода, что стало переломным моментом. В 2018 году токенизатор WordPiece, внедрённый в BERT, показал эффективность статистического подсловного разбиения для понимания языка. В том же году Таку Кудо представил SentencePiece — первый полностью языконезависимый токенизатор, изменивший подход к мультиязычным моделям. Дальнейшее масштабирование привело к byte-level BPE в GPT-3, где любая последовательность байтов кодируется без потерь. Сегодня токенизация — высокоспециализированная область, напрямую влияющая на качество и стоимость инференса.
👤 Ключевые персоны
- Рико Сеннрих (Rico Sennrich) — в 2016 году адаптировал BPE для токенизации в нейронном машинном переводе, что позволило эффективно разбивать редкие и сложные слова на подслова и стало стандартом в NLP.
- Таку Кудо (Taku Kudo) — создатель библиотеки SentencePiece (2018), реализовавшей токенизацию без привязки к языку и пробелам; его работа легла в основу токенизаторов большинства современных больших языковых моделей.
❓ Часто задаваемые вопросы (FAQ)
- Почему количество токенов в тексте часто больше количества слов?
- Токенизаторы разбивают длинные или редкие слова на несколько подслов, а также выделяют знаки препинания, пробелы и специальные маркеры как отдельные токены. Например, слово «нейросетями» может превратиться в три токена: «нейро», «сет», «ями».
- Как токены связаны со стоимостью использования API?
- Коммерческие провайдеры (OpenAI, Anthropic, Google) тарифицируют запросы пропорционально количеству обработанных и сгенерированных токенов. Промпт с 2000 токенов стоит вдвое дороже промпта из 1000 токенов при одинаковой генерации. Выбор компактного токенизатора и лаконичных формулировок экономит бюджет.
- Что такое контекстное окно и зачем оно измеряется в токенах?
- Контекстное окно — это максимальная длина (в токенах) текста, которую модель может удержать в памяти за один проход. Например, окно 128k токенов позволяет загрузить целую книгу. Превышение приводит к усечению или отказу модели. Токены служат универсальной мерой ёмкости окна независимо от языка.
- Можно ли вообще обойтись без токенизации в нейросетях?
- Да, существуют token-free архитектуры, такие как ByT5, CANINE или MambaByte. Они работают напрямую с байтами или символами, избегая фиксированного словаря. Однако цена такой универсальности — резкое увеличение длины последовательности и требований к вычислениям.
- В чём разница между словарём токенов и эмбеддингами?
- Словарь токенов — это конечная таблица соответствия текстового представления токена (подслова, символа) его целочисленному ID. Эмбеддинги — это непрерывные числовые векторы, сопоставленные каждому ID и обучаемые для отражения семантических отношений между токенами. Словарь задаёт дискретный вход, а эмбеддинги — его смысловое представление.






