Токен (LLM)

21 августа 2026 · ~12 мин чтения

llm nlp токенизация byte-pair-encoding ai-стоимость

Токен (LLM)

Токен — минимальная единица, на которую языковая модель делит текст перед обработкой. Это не буква, не слово и не слог, а кусок из одного-нескольких символов, полученный по заранее обученному словарю.

История

Слово «token» в компьютерной лингвистике появилось задолго до нейросетей —
ещё в 1950-х, когда статистики считали частоты слов и n-грамм. Тогда токен
означал «одно вхождение слова в тексте» (в противовес type — уникальному
слову). Различие type/token — базовое для корпусной лингвистики,
приписывают ему статью Уиллиса Джона Гейджа середины XX века.

Ключевой момент, породивший современный смысл слова «токен» в LLM, —
1994 год. Филипп Гейдж (Philip Gage) опубликовал в журнале
«C Users Journal» алгоритм под названием Byte Pair Encoding (BPE).
Гейдж придумал его как метод сжатия данных: находишь самую частую пару
байтов, заменяешь на новый символ, повторяешь. Двадцать лет он лежал в
области сжатия и никого особо не интересовал.

В 2015 году исследователи из Эдинбургского университета — Рико Сеннрих,
Барри Хэддоу и Александра Бёрч — в статье «Neural Machine Translation of
Rare Words with Subword Units» переизобрели BPE как способ бороться с
«редкими словами» в машинном переводе. Проблема была такая: словарь
модели фиксирован, а языки бесконечны. Если модель видит «Konferenzverband»
впервые, она не знает, что делать. Идея Сеннрих — заранее разбить всё на
подслова, чтобы «Konferenz» и «verband» встречались часто по отдельности
и модель могла их сложить.

С 2018 года BPE и её вариации стали стандартом. GPT-2 (OpenAI, 2019)
использовал BPE на уровне байтов (byte-level BPE) — это позволило одному
токенизатору работать с любым языком и эмодзи. Claude, Llama, Mistral,
все крупные модели сегодня используют варианты BPE или близкие подходы
(WordPiece, SentencePiece, Unigram).

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

Anthropic не публикует свой токенизатор целиком, но предоставляет через
API счётчик токенов (count_tokens). Устройство близко к GPT-4-подобному,
но словарь свой.

Что это такое

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

Токен — это элемент словаря токенизатора. Словарь фиксирован при
обучении: обычно 50 000–200 000 токенов. У каждого токена есть свой
целочисленный id. Токенизатор делает две операции:

Разбиение — не по буквам, не по словам, а по «часто встречающимся
кускам». Английское «hello» может стать одним токеном (id=15496 в
tiktoken cl100k_base). А слово «prestidigitation» — уже четырьмя, потому
что редкое. Русское «привет» скорее всего разобьётся на 3-4 токена, а
«необыкновенный» — на 5-7.

Грубая эмпирика для английского: 1 токен ≈ 4 символа ≈ 0,75 слова.
Для русского — примерно вдвое хуже: 1 токен ≈ 2 символа ≈ 0,3–0,5
слова
. Причина простая: корпус, на котором обучали большинство
токенизаторов, преимущественно английский. Русские подслова редки —
значит, редкие идут в словарь как более мелкие куски.

Ключевое отличие от похожих вещей:

Аналогии из жизни

Купюры в кассе. Кассир не принимает произвольную сумму — только
дискретные номиналы: 100, 500, 1000, 5000. Хочешь заплатить 1700 —
собираешь из купюр: 1000 + 500 + 100 + 100. Токены похожи: модель
видит текст только как комбинацию «купюр» из своего словаря.

Слоги. Кажется, что токен — это слог. «При-вет» на два слога, значит
на два токена? Но токенизатор про фонетику не знает, он про статистику.
«Привет» скорее всего будет «пр» + «ив» + «ет» или что-то похожее —
разбиение не совпадает со слогами.

Морфемы (корень + суффикс + окончание). Кажется удобной аналогией:
«running» = «run» + «ning» — почти корень плюс окончание. Иногда
токенизатор действительно так режет. Но чаще — нет.

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

Возьмём BPE — самый распространённый алгоритм.

Шаг 1. Обучение токенизатора (один раз, до тренировки модели).

Собирают огромный корпус текста — терабайты. Разбивают каждое слово на
отдельные символы. Считают частоту всех пар соседних символов. Находят
самую частую пару — например, «t» + «h» встречается 500 миллионов раз.
Объединяют её в новый символ «th» и записывают в словарь. Повторяют:
теперь ищут самую частую пару уже с учётом «th». Через 50 000 –
200 000 итераций получают словарь.

Псевдокод:

vocab = набор всех уникальных символов
while len(vocab) < 100000:
    pairs = count_pairs(корпус)  # частоты пар соседних символов
    best_pair = argmax(pairs)
    vocab.add(merge(best_pair))
    corpus = apply_merge(корпус, best_pair)

Итог — файл с двумя вещами: (1) сам словарь (id → строка),
(2) правила слияния в порядке применения.

Шаг 2. Encode при работе модели.

Пришёл текст «Привет, мир». Токенизатор:

  1. Разбивает на байты (в byte-level BPE) или Unicode-символы.
  2. Применяет правила слияния из обученного файла по порядку.
  3. На выходе — массив id: [136, 8817, 47420, 11, 3907] (числа
    выдуманные, для примера).

Шаг 3. Модель.

Каждый id превращается в embedding — вектор из 4096-16384 чисел
(зависит от модели). Дальше эти вектора идут через слои трансформера
(attention, feed-forward), и модель предсказывает следующий токен —
то есть распределение вероятностей по всему словарю. Выбирает один id
(или семплирует).

Шаг 4. Decode.

Выбранный id превращается обратно в строку и приклеивается к ответу.
Потом всё повторяется: новый вход = старый вход + новый токен.

Важная деталь: пробелы. В большинстве токенизаторов пробел не
отдельный токен, а часть следующего слова. Токен « hello» (с ведущим
пробелом) и токен «hello» (без пробела) — это разные id. Поэтому «Hello
world» и «Hello world» (с двумя пробелами) кодируются по-разному, и
модель по-разному их поймёт.

Специальные токены. В словарь входят не только куски текста, но и
служебные метки: <|start|>, <|end|>, <|user|>, <|assistant|>.
Через них модель понимает, где чья реплика в диалоге. Их нельзя ввести
как обычный текст — токенизатор их экранирует.

ASCII-схема полного цикла:

"Привет, мир"
      │
      ▼
[Tokenizer.encode]
      │
      ▼
[136, 8817, 47420, 11, 3907]     ← массив id токенов
      │
      ▼
[Embedding lookup]
      │
      ▼
матрица векторов [5, 4096]
      │
      ▼
[Transformer 96 слоёв]
      │
      ▼
вероятности по словарю [100000]
      │
      ▼
argmax или sampling → id=7891
      │
      ▼
[Tokenizer.decode]
      │
      ▼
" Здравствуй"

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Масштаб: OpenAI обрабатывает, по разным оценкам, около 100 миллиардов
токенов в сутки на своих API. Точной цифры компания не раскрывает —
искать в отчётах SemiAnalysis и The Information.

Альтернативы и конкуренты

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера в логах Claude Code слово «токен» и «token» суммарно всплывали
почти сотню раз — при обсуждении лимитов контекста, стоимости запросов
к API Anthropic, prompt caching. Стало любопытно, что именно измеряется
этими токенами и почему у русского языка они «дороже» английского.

Краткое резюме