Токенизация простыми словами: как LLM понимает текст
Разбираемся, как языковые модели разбивают текст на токены, зачем нужен BPE и почему русский язык обходится дороже английского.
Когда вы пишете запрос в ChatGPT или Claude, вам кажется, что модель читает ваш текст так же, как человек — слово за словом. На самом деле всё устроено иначе. Прежде чем нейросеть начнёт «думать» над вашим вопросом, текст проходит через невидимый, но критически важный этап — токенизацию. Именно от неё зависит, сколько вы заплатите за API-запрос, насколько хорошо модель поймёт контекст и почему русский текст «съедает» лимит быстрее английского.
В этой статье разберёмся, что такое токены, как работают основные алгоритмы токенизации и какие практические последствия это имеет для разработчиков и пользователей.
Что такое токен и зачем нужна токенизация
Языковая модель не работает с текстом напрямую. Она оперирует числами — векторами в многомерном пространстве. Чтобы превратить текст в числа, нужен промежуточный шаг: разбить строку на фрагменты и присвоить каждому числовой идентификатор. Эти фрагменты и называются токенами.
Токен — это не обязательно слово. Это может быть:
- целое слово (
привет→ 1 токен) - часть слова (
программирование→програм+мирование) - отдельный символ или даже байт (
щ→ несколько байтовых токенов) - знак пунктуации или пробел
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
Алгоритм обучается на большом корпусе текстов и работает итеративно:
- Старт: весь текст разбивается на отдельные символы (или байты)
- Подсчёт: находим самую частую пару соседних токенов
- Слияние: объединяем эту пару в новый токен и добавляем его в словарь
- Повтор: возвращаемся к шагу 2 — до тех пор, пока словарь не достигнет нужного размера
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 доминирует, существуют и другие подходы. Вот сравнение трёх основных алгоритмов:
| Параметр | BPE | WordPiece | SentencePiece |
|---|---|---|---|
| Принцип слияния | Самая частая пара | Пара с максимальным приростом правдоподобия | BPE или Unigram (выбирается) |
| Используется в | GPT, LLaMA, Claude | BERT, DistilBERT | T5, mBART, LLaMA 3 |
| Работа с пробелами | Внешняя предобработка | Внешняя предобработка | Пробел = часть токена (▁) |
| Мультиязычность | Средняя | Средняя | Высокая |
| Открытый код | tiktoken (OpenAI) | HuggingFace Tokenizers | google/sentencepiece |
BPE просто сливает самую частую пару. WordPiece (Google) оценивает каждое потенциальное слияние статистически: объединяет те пары, которые встречаются вместе значительно чаще, чем предсказывает случайность. SentencePiece — это не отдельный алгоритм, а фреймворк, который умеет работать с BPE и Unigram, при этом обрабатывает текст как сырой поток байтов, не полагаясь на предварительное разделение по пробелам.
Размер словаря: от 32 тысяч до 262 тысяч токенов
Один из ключевых параметров токенизатора — размер его словаря (vocabulary size). Это количество уникальных токенов, которые модель «знает». Тренд последних лет — рост словаря:
| Модель | Год | Размер словаря |
|---|---|---|
| GPT-2 | 2019 | 50 257 |
| LLaMA 2 | 2023 | 32 000 |
| GPT-4 | 2023 | 100 256 |
| LLaMA 3 | 2024 | 128 000 |
| GPT-4o | 2024 | 199 997 |
| Gemini | 2025 | 262 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
Почему так происходит
Дисбаланс обучающих данных. Токенизаторы GPT, Claude и других моделей обучались преимущественно на английских текстах. Английские слова и фразы попадают в словарь как целые токены, а русские — разбиваются на мелкие части.
Кириллица vs латиница. Кириллические символы занимают 2 байта в UTF-8 (против 1 байта у латиницы). На уровне байтов русский текст уже длиннее.
Морфологическая сложность. Русский — флективный язык с богатым склонением и спряжением. Слово «программировать» порождает десятки словоформ, и далеко не все из них попали в словарь как отдельные токены.
Ситуация постепенно улучшается. 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-вызовов до отправки
- Объяснять странности — понимать, почему модель ошибается в арифметике или «не видит» очевидное слово
Выводы
Токенизация — первый и определяющий шаг в работе любой языковой модели. Именно она решает, как модель «увидит» ваш текст: целостными смысловыми блоками или россыпью байтов.
Ключевые тезисы:
- Токен ≠ слово. Это субсловный фрагмент, размер которого зависит от алгоритма и частотности в обучающих данных.
- BPE — основной алгоритм токенизации в современных LLM, от GPT до LLaMA. Он итеративно сливает частые пары символов в новые токены.
- Размер словаря растёт: от 32 000 токенов в 2023 году до 262 000 в 2025-м, что улучшает эффективность для всех языков.
- Русский текст дороже: из-за дисбаланса в обучающих данных и свойств кириллицы русский потребляет в 1,5–3 раза больше токенов, чем английский.
- Токенизация влияет на качество: от неё зависит способность модели к арифметике, обработке редких слов и пониманию кода.
Понимание токенизации — это не академическое любопытство, а практический навык для каждого, кто работает с LLM: от разработчиков, оптимизирующих промпты, до бизнеса, планирующего бюджет на AI.