Токенизация (Tokenization) — это преобразование текста в токены: единицы, с которыми работает конкретная языковая модель. В LLM это не равно «разбить текст на слова»: по данным OpenAI, отдельным токеном может быть один символ, целое слово, пробел, знак препинания или часть слова, а точный результат зависит от модели и encoding.
На практике токенизация нужна, чтобы правильно считать вход и выход модели, воспроизводить её препроцессинг и не ошибаться в оценке стоимости API: OpenAI прямо указывает, что использование тарифицируется по токенам, причём условия зависят от модели и могут различаться для input, output и cached tokens.
Английский термин: tokenization. Не путайте процесс токенизации с самим токеном (Token): токенизация — это операция, токен — её результат.
Простыми словами
Грубо говоря, токенизация — это способ «нарезать» текст на детали того размера, который понимает конкретная модель. Можно представить это как разные правила резки одной и той же фразы: одна система возьмёт целое слово, другая — слово вместе с пробелом, третья — только часть слова.
Из-за этого два инструмента могут посчитать один и тот же русский текст по-разному. Поэтому для точного подсчёта нельзя опираться на усреднённые советы вроде «примерно столько-то символов на токен»: официальные материалы OpenAI рекомендуют проверять разбиение у конкретной модели и конкретного encoding.
Как это работает
В документации Hugging Face пайплайн токенизатора описан как normalizer -> pre-tokenizer -> model -> post-processor. Это удобная схема, чтобы понять механику без привязки к одной библиотеке.
Исходный текст
-> Normalizer
-> Pre-tokenizer
-> Model
-> Post-processor
-> Последовательность токенов / token ids
- Normalizer приводит строку к форме, с которой дальше работает токенизатор.
- Pre-tokenizer делает предварительное разбиение текста на более удобные фрагменты.
- Model применяет конкретный алгоритм токенизации. Для OpenAI-совместимых encodings библиотека
tiktokenописана как быстрый BPE-tokenizer; в её README показаныget_encoding("o200k_base")иencoding_for_model("gpt-4o"), а также указано, что BPE-токенизация обратима, не теряет информацию и работает с произвольным текстом. Для BERT-подобной токенизации WordPiece в статье Fast WordPiece Tokenization описан как подход с longest-match-first / maximum matching. SentencePiece, в свою очередь, позиционируется как быстрый, лёгкий, не требующий разметки tokenizer и detokenizer для нейросетевой генерации текста, где фиксированный словарь задаётся до обучения. - Post-processor делает финальную обработку последовательности перед подачей дальше по пайплайну.
Ключевой момент: точное число токенов зависит не только от текста, но и от выбранной модели или encoding. Поэтому OpenAI советует проверять результат либо через официальный Tokenizer, либо программно через tiktoken.encoding_for_model(model).
Где применяется
- Оценка использования OpenAI API. Если вы считаете бюджет или контролируете расход, вам нужен именно токенизатор вашей модели, потому что тарификация идёт по токенам и зависит от модели, а также от типа токенов: входных, выходных и cached.
- Проверка реального разбиения промпта. Официальный веб-инструмент OpenAI Tokenizer подходит, когда нужно быстро увидеть, как текст распадается на токены и сколько их получается у конкретного OpenAI-encoding.
- Подсчёт токенов в коде. Репозиторий
tiktokenпоказывает типовой путь черезencoding_for_model("gpt-4o")илиget_encoding("o200k_base"), если вам нужен повторяемый расчёт в приложении или пайплайне. - Подготовка данных для других NLP-моделей. В Hugging Face токенизатор можно загружать через
Tokenizer.from_pretrained("bert-base-uncased"). Если вы обучаете собственный подсловный tokenizer по сырым текстам, практичнее смотреть в сторону SentencePiece с его фиксированным словарём, заданным до обучения.
Практический пример
Если вы работаете с OpenAI-моделью, безопаснее всего считать токены тем же encoding, который привязан к этой модели.
import tiktoken
text = "Сделай краткое резюме этого абзаца."
enc = tiktoken.encoding_for_model("gpt-4o")
token_ids = enc.encode(text)
print(len(token_ids))
print(token_ids)
- Вы выбираете модель.
encoding_for_model(...)возвращает encoding, связанный с этой моделью.encode(...)превращает строку в последовательность token ids.- Если нужен ручной контроль, сверяете тот же текст в официальном Tokenizer.
Не фиксируйте однажды получившееся число токенов как «вечную истину». В официальных источниках прямо сказано, что разбиение зависит от модели и encoding, а в текущем наборе проверенных материалов отдельно отмечено: при обновлении encodings точные counts и token ids стоит перепроверять.
Практический вердикт: сначала выбирайте модель, потом считайте токены её собственным tokenizer. Переносить числа между разными экосистемами «по аналогии» рискованно.
На 2026-08-16 на PyPI для tiktoken указан релиз 0.13.0; также там указаны требование Python >= 3.9 и лицензия MIT.
Чем отличается от токена, BPE, WordPiece и SentencePiece
| Термин | Что это | Ключевое отличие |
|---|---|---|
| Токенизация | Процесс преобразования текста в токены | Это операция разбиения, а не отдельная единица текста. |
| Токен | Единица текста после токенизации | Токен — результат процесса, а не сам процесс. |
| BPE | Конкретный алгоритм токенизации; tiktoken описан как BPE-tokenizer для моделей OpenAI |
Это один из способов выполнять токенизацию, а не синоним токенизации вообще. |
| WordPiece | Подход к токенизации с longest-match-first / maximum matching | Это отдельный алгоритм, часто обсуждаемый в BERT-подобных пайплайнах. |
| SentencePiece | Инструмент и подход для неразмеченной подсловной tokenization/detokenization с фиксированным словарём | Это самостоятельная система токенизации, которую можно обучать на сырых текстах. |
Ограничения и заблуждения
- Заблуждение: «один токен = одно слово». Нет. OpenAI прямо пишет, что токеном может быть один символ, целое слово, пробел, знак препинания или часть слова.
- Заблуждение: «один и тот же текст всегда даёт одинаковый счёт». Нет. Разбиение зависит от модели и encoding; для OpenAI его нужно перепроверять через официальный Tokenizer или
tiktoken.encoding_for_model(model). - Ограничение библиотек.
tiktokenоптимизирован под OpenAI encodings. Hugging Face tokenizers — библиотека с версионным API; в release notes на 2026-08-16 стабильной в ветке 0.23 указана версия 0.23.1, поэтому поведение лучше сверять именно с установленным релизом. SentencePiece требует обученную модель или предоставленные model files; на GitHub как последний релиз на ту же дату указан v0.2.2. - Ограничение официального веб-инструмента. OpenAI Tokenizer подходит для точной интерактивной проверки OpenAI-токенизации, но это веб-инструмент, а не универсальная библиотека для всех экосистем.
- Редакционное ограничение статьи. Здесь намеренно нет универсальной таблицы «русское слово → число токенов». Официальные источники прямо предупреждают о зависимости от модели и encoding, а также о необходимости перепроверки после обновлений encodings.
- Что ещё не покрыто источниками. В проверенном наборе материалов нет явной документации о региональных различиях доступа к OpenAI Tokenizer или к зеркалам пакетов. Если вы работаете в конкретном регионе или корпоративном контуре, доступ лучше проверить отдельно.
Связанные термины и инструменты
Для следующего шага полезно развести понятия токена и токенизации. Если вы хотите понять, что происходит с последовательностью токенов дальше, логично перейти к статье про механизм внимания (attention). Если вас интересует обучение собственных разбиений по данным без ручной разметки, пригодится материал про обучение без учителя. А при работе с пользовательскими вводами в агентных системах полезно отдельно изучить риск промпт-инъекции.
| Инструмент | Для чего подходит | Что проверить перед использованием | Состояние на 2026-08-16 |
|---|---|---|---|
| OpenAI Tokenizer | Интерактивно посмотреть токены и точный счёт для OpenAI-моделей | Подходит именно для OpenAI-encoding; это веб-инструмент | Официальный инструмент по адресу platform.openai.com/tokenizer |
| tiktoken | Программно считать токены и использовать OpenAI-совместимые BPE-encoding | Точный результат зависит от выбранной модели или encoding | PyPI: 0.13.0 |
| Hugging Face tokenizers | Быстрая общая токенизация, загрузка pretrained-tokenizer, обучение и encoding | Сверяйте код и поведение с точной версией релиза | Стабильный релиз 0.23.1 |
| SentencePiece | Обучать подсловные tokenizer/detokenizer по сырым текстам с фиксированным словарём | Нужна обученная модель или готовые файлы модели | GitHub release: v0.2.2 |
Источники
- What are tokens and how to count them?
- Tokenizer
- openai/tiktoken
- tiktoken · PyPI
- Tokenizer · Hugging Face
- Releases · huggingface/tokenizers
- google/sentencepiece
- Releases · google/sentencepiece
- SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing
- Fast WordPiece Tokenization
Вопросы и ответы
Сколько слов в одном токене?
Универсального соотношения нет. По данным OpenAI, токен может быть символом, словом, пробелом, знаком препинания или частью слова, поэтому переводить слова в токены «по формуле» нельзя.
Почему один и тот же текст даёт разное число токенов в разных моделях?
Потому что токенизация зависит от модели и encoding. Для точной проверки OpenAI рекомендует использовать официальный Tokenizer или tiktoken.encoding_for_model(model).
Как точно посчитать токены для OpenAI?
Либо через официальный веб-инструмент OpenAI Tokenizer, либо в коде через tiktoken. Проверять лучше именно тем encoding, который соответствует вашей модели.
Чем tiktoken отличается от Hugging Face tokenizers?
tiktoken в официальном репозитории описан как быстрый BPE-tokenizer для моделей OpenAI. Hugging Face tokenizers — более общий стек токенизации с явным pipeline normalizer -> pre-tokenizer -> model -> post-processor и загрузкой pretrained-tokenizer через Tokenizer.from_pretrained(...).
SentencePiece и WordPiece — это одно и то же?
Нет. WordPiece — конкретный алгоритм токенизации с maximum matching; SentencePiece — отдельный инструмент и подход для неразмеченной подсловной токенизации и детокенизации с фиксированным словарём.