Когда вы пишете запрос в ChatGPT или Claude, вам кажется, что модель читает ваш текст так же, как человек — слово за словом. На самом деле всё устроено иначе. Прежде чем нейросеть начнёт «думать» над вашим вопросом, текст проходит через невидимый, но критически важный этап — токенизацию. Именно от неё зависит, сколько вы заплатите за API-запрос, насколько хорошо модель поймёт контекст и почему русский текст «съедает» лимит быстрее английского.

В этой статье разберёмся, что такое токены, как работают основные алгоритмы токенизации и какие практические последствия это имеет для разработчиков и пользователей.

Что такое токен и зачем нужна токенизация

Языковая модель не работает с текстом напрямую. Она оперирует числами — векторами в многомерном пространстве. Чтобы превратить текст в числа, нужен промежуточный шаг: разбить строку на фрагменты и присвоить каждому числовой идентификатор. Эти фрагменты и называются токенами.

Токен — это не обязательно слово. Это может быть:

  • целое слово (привет → 1 токен)
  • часть слова (программированиепрограм + мирование)
  • отдельный символ или даже байт (щ → несколько байтовых токенов)
  • знак пунктуации или пробел
ℹ Почему не разбивать по словам?
Если токенизировать по целым словам, словарь модели станет гигантским: миллионы словоформ, имена собственные, технические термины. А если разбивать по символам — последовательности станут слишком длинными, и вычислительная стоимость вырастет квадратично из-за механизма внимания (attention) в трансформерах. Субсловная токенизация — компромисс между этими крайностями.

graph TD
    A["Входной текст:
Нейросеть генерирует текст"] --> B["Токенизатор"] B --> C["Ней + ро + сеть + _ + генер + ирует + _ + текст"] C --> D["[15234, 891, 4502, 220, 8837, 2291, 220, 7421]"] D --> E["Модель (трансформер)"] E --> F["Числовой вывод"] F --> G["Детокенизация"] G --> H["Ответ на естественном языке"]

Токенизация — это мост между человеческим языком и математикой нейросети. Без неё модель буквально не может прочитать ни одного символа.

Как работает BPE: главный алгоритм токенизации

Подавляющее большинство современных LLM используют алгоритм Byte Pair Encoding (BPE) или его вариации. BPE изначально был разработан как алгоритм сжатия данных в 1994 году, а в 2015-м исследователи из OpenAI адаптировали его для токенизации текста в нейросетях.

Принцип работы BPE

Алгоритм обучается на большом корпусе текстов и работает итеративно:

  1. Старт: весь текст разбивается на отдельные символы (или байты)
  2. Подсчёт: находим самую частую пару соседних токенов
  3. Слияние: объединяем эту пару в новый токен и добавляем его в словарь
  4. Повтор: возвращаемся к шагу 2 — до тех пор, пока словарь не достигнет нужного размера
📝 BPE в действии
Допустим, в тексте часто встречается последовательность t + h. BPE объединит их в токен th. Затем th + e станет the. А the + _ (пробел) может стать the_. Так постепенно набираются частые подслова и целые слова.

Вот упрощённый пример на Python, демонстрирующий логику BPE:

from collections import Counter

def get_pairs(tokens):
    """Находим все пары соседних токенов."""
    pairs = Counter()
    for i in range(len(tokens) - 1):
        pairs[(tokens[i], tokens[i + 1])] += 1
    return pairs

# Начинаем с символов
tokens = list("нейросеть нейросети нейросетей")
print(f"Старт: {tokens}")

# Итерация 1: самая частая пара — ('н', 'е') → 'не'
# Итерация 2: ('не', 'й') → 'ней'
# Итерация 3: ('ней', 'р') → 'нейр'
# ...и так далее, пока 'нейросет' не станет одним токеном

Результат обучения BPE — таблица слияний (merge table), которая сохраняется и используется при каждой токенизации. При обработке нового текста токенизатор применяет те же правила слияния в том же порядке.

Три алгоритма: BPE, WordPiece, SentencePiece

Хотя BPE доминирует, существуют и другие подходы. Вот сравнение трёх основных алгоритмов:

ПараметрBPEWordPieceSentencePiece
Принцип слиянияСамая частая параПара с максимальным приростом правдоподобияBPE или Unigram (выбирается)
Используется вGPT, LLaMA, ClaudeBERT, DistilBERTT5, mBART, LLaMA 3
Работа с пробеламиВнешняя предобработкаВнешняя предобработкаПробел = часть токена (▁)
МультиязычностьСредняяСредняяВысокая
Открытый кодtiktoken (OpenAI)HuggingFace Tokenizersgoogle/sentencepiece

BPE просто сливает самую частую пару. WordPiece (Google) оценивает каждое потенциальное слияние статистически: объединяет те пары, которые встречаются вместе значительно чаще, чем предсказывает случайность. SentencePiece — это не отдельный алгоритм, а фреймворк, который умеет работать с BPE и Unigram, при этом обрабатывает текст как сырой поток байтов, не полагаясь на предварительное разделение по пробелам.

💡 Практическое правило
При работе с API всегда используйте токенизатор той модели, к которой отправляете запрос. Токенизация GPT-4o и Claude различается — одинаковый текст даст разное количество токенов. OpenAI предоставляет библиотеку tiktoken, Anthropic — метод count_tokens в своём SDK.

Размер словаря: от 32 тысяч до 262 тысяч токенов

Один из ключевых параметров токенизатора — размер его словаря (vocabulary size). Это количество уникальных токенов, которые модель «знает». Тренд последних лет — рост словаря:

МодельГодРазмер словаря
GPT-2201950 257
LLaMA 2202332 000
GPT-42023100 256
LLaMA 32024128 000
GPT-4o2024199 997
Gemini2025262 000

Больший словарь означает, что модель может представить больше слов и фраз одним токеном, а не разбивать их на части. Это повышает эффективность: тот же текст укладывается в меньшее число токенов, что экономит контекстное окно и снижает стоимость запроса.

Рост размера словаря — с 32 000 у LLaMA 2 до 262 000 у Gemini — составил 8 раз за три года. Это один из тихих, но важнейших трендов в развитии LLM.

Но есть и обратная сторона: чем больше словарь, тем больше памяти занимает embedding-матрица модели. Для модели с embedding-размерностью 4096 и словарём 200 000 токенов только таблица эмбеддингов займёт около 3 ГБ в float32.

Русский язык и проблема неравной токенизации

Вот факт, который удивляет многих: один и тот же текст на русском языке потребляет в 1,5–3 раза больше токенов, чем его английский эквивалент. Это не баг — это следствие того, как обучались токенизаторы.


graph LR
    A["English: 'Artificial intelligence'"] --> B["2 токена"]
    C["Русский: 'Искусственный интеллект'"] --> D["4-6 токенов"]
    style B fill:#4CAF50,color:#fff
    style D fill:#FF9800,color:#fff

Почему так происходит

  1. Дисбаланс обучающих данных. Токенизаторы GPT, Claude и других моделей обучались преимущественно на английских текстах. Английские слова и фразы попадают в словарь как целые токены, а русские — разбиваются на мелкие части.

  2. Кириллица vs латиница. Кириллические символы занимают 2 байта в UTF-8 (против 1 байта у латиницы). На уровне байтов русский текст уже длиннее.

  3. Морфологическая сложность. Русский — флективный язык с богатым склонением и спряжением. Слово «программировать» порождает десятки словоформ, и далеко не все из них попали в словарь как отдельные токены.

⚠ Практическое следствие
Если вы используете API и платите за токены — русскоязычные запросы обходятся в 1,5–3 раза дороже английских при том же объёме информации. Также русский текст быстрее заполняет контекстное окно модели.

Ситуация постепенно улучшается. GPT-4o с его словарём в 200 000 токенов значительно эффективнее обрабатывает не-латинские языки, чем GPT-4. Модели LLaMA 3, использующие SentencePiece со словарём 128 000 токенов, тоже лучше справляются с мультиязычным текстом.

Как токенизация влияет на качество ответов

Токенизация — не просто техническая деталь. Она напрямую влияет на способности модели:

Арифметика. Число 12345 может стать одним токеном 12345 или разбиться на 123 + 45. В разных разбивках модель «видит» разные паттерны, что объясняет, почему LLM иногда ошибаются в простой арифметике.

Редкие слова. Слово, разбитое на 5–6 субтокенов, модель понимает хуже, чем слово из 1–2 токенов. Каждое дробление — потеря семантической целостности.

Код. Программный код токенизируется по-особому: отступы, скобки, операторы — всё это отдельные токены. Вот почему модели иногда путаются в длинных вложенных структурах.

# Пример: как токенизатор GPT-4 разбивает код
# "def calculate_total(items):" → ["def", " calculate", "_total", "(", "items", "):", ]
# 6 токенов на одну строку определения функции

# А вот русский комментарий:
# "# Вычисляем сумму" → ["#", " В", "ыч", "исл", "яем", " сум", "му"]
# 7 токенов — больше, чем сам код

Будущее токенизации: от костыля к эволюции

В сообществе исследователей растёт мнение, что субсловная токенизация — это «необходимый костыль», от которого индустрия рано или поздно уйдёт. Среди перспективных направлений:

  • Byte-level модели — работают напрямую с байтами, без предварительной токенизации. Meta и Google уже экспериментируют с такими архитектурами.
  • Динамическая токенизация — адаптация разбиения под конкретный язык или домен в реальном времени.
  • Мультимодальные токенизаторы — единый словарь для текста, кода, изображений и аудио.

Но пока субсловная токенизация остаётся стандартом индустрии. И понимание её принципов помогает:

  • Оптимизировать промпты — зная, как модель разбивает текст, можно формулировать запросы компактнее
  • Контролировать расходы — оценивать стоимость API-вызовов до отправки
  • Объяснять странности — понимать, почему модель ошибается в арифметике или «не видит» очевидное слово
💡 Попробуйте сами
Откройте tiktokenizer.app — бесплатный инструмент, который показывает, как именно токенизаторы GPT-4 и GPT-4o разбивают ваш текст. Введите одну и ту же фразу на русском и английском — разница в количестве токенов будет наглядной.

Выводы

Токенизация — первый и определяющий шаг в работе любой языковой модели. Именно она решает, как модель «увидит» ваш текст: целостными смысловыми блоками или россыпью байтов.

Ключевые тезисы:

  • Токен ≠ слово. Это субсловный фрагмент, размер которого зависит от алгоритма и частотности в обучающих данных.
  • BPE — основной алгоритм токенизации в современных LLM, от GPT до LLaMA. Он итеративно сливает частые пары символов в новые токены.
  • Размер словаря растёт: от 32 000 токенов в 2023 году до 262 000 в 2025-м, что улучшает эффективность для всех языков.
  • Русский текст дороже: из-за дисбаланса в обучающих данных и свойств кириллицы русский потребляет в 1,5–3 раза больше токенов, чем английский.
  • Токенизация влияет на качество: от неё зависит способность модели к арифметике, обработке редких слов и пониманию кода.

Понимание токенизации — это не академическое любопытство, а практический навык для каждого, кто работает с LLM: от разработчиков, оптимизирующих промпты, до бизнеса, планирующего бюджет на AI.