Tokenization

Токенизация — разбиение входного текста на токены, минимальные единицы, которыми оперирует LLM. Самый частый алгоритм — BPE (Byte Pair Encoding): итеративно склеивает самые частотные пары символов, пока словарь не достигнет заданного размера (например, ~100 000 токенов).

Суть

Модель не видит «буквы» или «слова» напрямую — она видит токены из фиксированного словаря. Каждый шаг генерации — это выбор следующего токена из распределения вероятностей по всему словарю (см. Sampling Parameters).

Зачем это нужно

Два наивных подхода плохи:

  • По символам — последовательности слишком длинные, моделям тяжело, и в один символ не заложить смысл.
  • По словам — словарь взрывается (слов слишком много), а распределение вероятностей ограничено размером словаря.

BPE — компромисс: токены получаются осмысленными (часто это слова, приставки, суффиксы, корни) и при этом словарь компактный.

Как работает

  • Старт с символов; алгоритм берёт пары (2 символа), затем тройки и т.д., каждый раз добавляя в словарь самую частотную комбинацию из корпуса.
  • Процесс идёт, пока не достигнут целевой размер словаря (в материале — пример 100 000).
  • Один токен ≠ одно слово: короткое предложение может стать 3 токенами, длинное слово — несколькими.
  • Размер словаря напрямую влияет на то, из скольких вариантов модель выбирает следующий токен.
  • Алгоритмы: BPE (GPT, Claude, Llama), WordPiece (BERT), SentencePiece (современный вариант). У каждой модели свой токенизатор и словарь — они идут в комплекте и не взаимозаменяемы (словарь обычно в tokenizer.json).
  • Спец-токены (пример из BERT): [CLS] (начало), [SEP] (разделитель), [MASK] (маска), [PAD] (выравнивание), [UNK] (неизвестное).
  • Размеры словарей: BERT-base 30 522, GPT-2 50 257, GPT-3/4 ~100 000, Llama 3 128 000.
  • Русский «дороже» по токенам: BPE строит словарь из самых частотных сегментов преимущественно англоязычного корпуса → английские слова часто = 1 токен, а кириллица дробится на более мелкие куски. Tip: технические/system-инструкции иногда выгоднее держать на английском (экономия ~30% токенов), а ответ просить на русском. Но это не догма — качество и требования к ответу важнее экономии; доменно-важный русский контент не переводят насильно ради токенов.
  • Цифры fertility (кириллица, прокси): по исследованию токенизации для украинского/кириллицы — кириллический текст даёт 1.88 ток/слово (Llama 3.1) … 3.32–3.45 (GPT-3.5/4, Claude 3); в узких доменах (законы/наука) до **4.4**; словари ≥100k токенов устойчивее. Это прокси для RU (данные на украинском/кириллице), не прямой RU-бенчмарк размера чанка.
  • Проверка стоимости на практике: расход токенов проверяют через tokenizer / usage в ответе API / budget-трекер; локальная оценка через tiktoken и аналоги — отдельная hands-on задача (см. открытый вопрос).

Пример

"мама мыла раму"  →  ["мама", " мыла", " раму"]   # 3 токена
"токенизация"     →  ["токен", "из", "ация"]       # дробится на части

Связано с

  • Embeddings — каждый токен дальше превращается в вектор
  • Transformer — токены-векторы подаются в архитектуру
  • Context Window — окно меряется именно в токенах, биллинг тоже

Открытые вопросы

  • как считать токены своего текста до запроса (tiktoken и аналоги)