COMRAD404 / GLOSSARY

Токен (Token)

Token

Токен (token) — единица, на которую модель разбивает текст, а в Gemini также части мультимодального ввода. Ниже — что это значит на практике, почему токен не равен слову и как его правильно считать.

TL;DR

Токен — это единица, на которую tokenizer разбивает вход и выход модели; точный счёт зависит от конкретной модели и encoding.

Токен (token) — это единица, на которую токенизатор разбивает вход и выход модели. В документации OpenAI токены описаны как «building blocks» текста: один токен может быть символом, частью слова или целым словом, а пробелы и знаки препинания влияют на разбиение. Для Gemini токен — это гранулярность обработки ввода и вывода, причём токенизация относится не только к тексту, но и к изображениям и другим нетекстовым данным.

Главное практическое правило: токен почти никогда не стоит оценивать «на глаз». Точный счёт зависит от конкретной модели и encoding, поэтому OpenAI рекомендует проверять его через Tokenizer tool или tiktoken.encoding_for_model(model), а в Gemini и Vertex AI для этого предусмотрены count_tokens и models.countTokens.

Английский термин: token. Также встречается: единица токенизации, токен ввода, токен вывода. Рядом по смыслу, но не тождественно: токенизация.

Простыми словами

Грубо говоря, токены можно представить как кусочки, на которые система режет ваш ввод перед тем, как «понять» его. Это не обязательно слова целиком: слово может распасться на несколько частей, а короткий знак препинания или пробел — тоже повлиять на разбиение.

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

Как это работает

С технической точки зрения токенизатор — это отдельный компонент перед моделью. В документации Hugging Face Transformers он описан как часть pipeline, которая нормализует и делит текст, добавляет специальные токены, превращает результат в input_ids и при необходимости декодирует их обратно в текст.

  1. Нормализация входа. Текст приводится к форме, с которой работает конкретный tokenizer.
  2. Разбиение на части. Строка делится на токены. В современных системах это часто не слова, а subword-единицы.
  3. Преобразование в идентификаторы. Каждый токен сопоставляется с числовым ID из словаря.
  4. Передача модели. Уже эти ID попадают в трансформер и учитываются в контекстном окне.
  5. Обратное декодирование. Выходные ID преобразуются обратно в текст.
Текст / изображение / другой ввод
        ↓
   tokenizer
        ↓
 [token_1, token_2, token_3, ...]
        ↓
   [id_1, id_2, id_3, ...]
        ↓
      модель
        ↓
 [output_id_1, output_id_2, ...]
        ↓
   detokenization
        ↓
   ответ модели

Почему токены часто бывают «кусочками слов»? Потому что subword-подход помогает работать с редкими словами и открытым словарём. Это классически показано в работе Sennrich и соавторов для neural machine translation. В практике токенизации используются разные алгоритмы: например, tiktoken у OpenAI описан как быстрый BPE-tokenizer, а SentencePiece реализует subword units, включая BPE и unigram language model, и позиционируется как language-independent.

Отсюда следует важная деталь: точное разбиение определяется не русским языком «вообще», а конкретным tokenizer и словарём модели. Поэтому ориентиры уровня «примерно 4 символа на токен» допустимы только как грубая оценка. В документации Gemini это прямо дано как rule of thumb и отдельно уточняется оценка порядка 60–80 английских слов на 100 токенов; переносить её один в один на русский текст нельзя.

Где применяется

  • Проверка, влезет ли запрос в модель. Перед отправкой длинного промпта, истории чата или документов считают токены, чтобы не превысить лимит контекстного окна.
  • Учёт потребления в API. В Gemini usage возвращает детальные счётчики: input, output, thought, cached, tool use и total tokens. Это полезно для отладки, контроля расходов и анализа цепочек вызовов.
  • Биллинг и кэш. По документации Gemini API биллинг основан, среди прочего, на счётчиках input, output и cached tokens. Актуальные условия free tier, paid tier и возможные требования к prepaid-плану зависят от региона, аккаунта и даты, поэтому в продукте это нужно перепроверять на официальной странице.
  • Обучение моделей. На этапе претрейнинга корпус сначала превращают в токены и ID, а уже затем подают в модель. Без этого трансформер не работает с сырой строкой.
  • Мультимодальный ввод. В Gemini токенизация относится ко всему вводу, включая текст, изображения и другие нетекстовые данные. Поэтому «сколько стоит запрос» и «сколько места он занимает» в таких сценариях нельзя оценивать только по длине текста.

Практический пример

Если вы работаете с OpenAI-совместимой моделью, безопасный базовый сценарий — считать токены программно до отправки запроса. В README проекта tiktoken показан вызов encoding_for_model("gpt-4o").

import tiktoken

text = "Ваш промпт или фрагмент диалога"
enc = tiktoken.encoding_for_model("gpt-4o")
token_ids = enc.encode(text)
count = len(token_ids)

print(count)

Что здесь важно:

  1. Вы выбираете encoding не «вообще BPE», а под конкретную модель через encoding_for_model(...).
  2. Счёт идёт по результату encode(), а не по словам или символам.
  3. Если вы меняете модель, число токенов может измениться.

Для Gemini практический сценарий такой же по смыслу: сначала вызвать count_tokens, затем сравнить результат с вашим лимитом и только потом отправлять основной запрос. В корпоративных сценариях Google Cloud/Vertex AI для этого документирован REST-метод models.countTokens. Это удобнее, чем строить собственные приближённые калькуляторы.

Чем отличается от…

Термин Что это Чем отличается от токена
Символ Отдельная буква, цифра, пробел или знак Токен не равен символу: один токен может включать несколько символов, а пунктуация и пробелы влияют на разбиение.
Слово Лексическая единица языка Токен не равен слову: слово может стать одним токеном или распасться на несколько частей.
Токенизация Процесс разбиения входа на токены Токен — результат, токенизация — процедура. Их часто путают, но это не одно и то же.
Контекстное окно Максимальный объём входа/истории, который модель может учитывать Контекстное окно измеряется токенами, но само по себе токеном не является.

Ограничения и заблуждения

  • Заблуждение: «один токен = одно слово». Нет. Официальные источники OpenAI прямо указывают, что токен может быть символом, частью слова или словом целиком.
  • Заблуждение: «если я знаю число символов, я знаю число токенов». Нет. Даже ориентир Gemini «около 4 символов на токен» — это только грубое правило, а не точный расчёт.
  • Заблуждение: «у разных моделей один и тот же текст всегда имеет одинаковый счёт». Нет. Точный результат зависит от модели и encoding.
  • Заблуждение: «текст — единственное, что токенизируется». Для Gemini это неверно: документация относит токенизацию ко всему вводу, включая изображения и другие нетекстовые данные.
  • Ограничение практики: релизы tokenizer-библиотек, версии SDK и правила биллинга меняются. В source pack отдельно отмечено, что версии tiktoken и условия Gemini billing нужно перепроверять перед фиксацией в документации или продукте.

Практический вердикт. Если вы проектируете промпты, агентные пайплайны или бюджеты на API, считайте токены только штатным инструментом конкретной модели: tiktoken, count_tokens или models.countTokens. Оценка «на глаз» годится лишь для очень грубого планирования.

Редакционное ограничение. Эта статья сознательно не приводит фиксированные цены, лимиты контекста и универсальные коэффициенты для русского текста: supplied sources подчёркивают, что такие значения зависят от модели, encoding, API, региона и даты проверки.

Связанные термины и инструменты

Чтобы лучше понять тему, полезно отдельно разобрать токенизацию, контекстное окно, архитектуру трансформера и претрейнинг. Из инструментов для практики в источниках этой статьи фигурируют tiktoken, Hugging Face Tokenizers, SentencePiece, Gemini count_tokens и Vertex AI models.countTokens.

Источники

Вопросы и ответы

Токен — это слово?

Нет. По официальному описанию OpenAI токен может быть символом, частью слова или словом целиком. Именно поэтому подсчёт «по словам» обычно неточен.

Почему один и тот же текст даёт разное число токенов в разных моделях?

Потому что модели используют разные encoding и словари. Для точного результата нужно считать токены инструментом, привязанным к конкретной модели.

Можно ли заранее примерно оценить число токенов?

Да, но только грубо. В документации Gemini есть ориентир порядка 4 символов на токен и 60–80 английских слов на 100 токенов, однако это не универсальное правило и не точный расчёт для русского текста.

Зачем считать токены до запроса?

Чтобы не выйти за пределы контекстного окна, понять ожидаемое потребление API и избежать ошибок в длинных промптах или мультимодальных запросах.

Чем отличаются count_tokens и usage в Gemini?

count_tokens помогает посчитать токены во входе до отправки запроса, а usage возвращает детальные счётчики уже по факту обработки: input, output, thought, cached, tool use и total tokens.

Источники

SOURCES

Вопросы и ответы

FAQ
Токен — это слово?

Нет. По официальному описанию OpenAI токен может быть символом, частью слова или словом целиком, поэтому подсчёт по словам обычно неточен.

Почему один и тот же текст даёт разное число токенов в разных моделях?

Потому что модели используют разные encoding и словари. Для точного результата нужно считать токены инструментом, привязанным к конкретной модели.

Можно ли заранее примерно оценить число токенов?

Да, но только грубо. В документации Gemini есть ориентир порядка 4 символов на токен и 60–80 английских слов на 100 токенов, однако это не универсальное правило и не точный расчёт для русского текста.

Зачем считать токены до запроса?

Чтобы не выйти за пределы контекстного окна, понять ожидаемое потребление API и избежать ошибок в длинных промптах или мультимодальных запросах.

Чем отличаются count_tokens и usage в Gemini?

count_tokens помогает посчитать токены во входе до отправки запроса, а usage возвращает детальные счётчики уже по факту обработки: input, output, thought, cached, tool use и total tokens.

Читайте также

LINKS