Токенизация: почему не слова и не буквы, а подслова

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

Токенизация — разбиение текста на токены, единицы из фиксированного словаря, которые модель затем превращает в числа.

Три возможных способа резать текст

У текста есть естественные «уровни нарезки», и у каждого свои беды:

УровеньПлюсМинус
Словаосмысленные единицыогромный словарь; незнакомые слова и опечатки вообще не закодировать
Символыкрошечный словарь, нет «незнакомых»последовательности очень длинные; в одном символе мало смысла
Подсловазолотая серединачуть сложнее устроена сборка словаря

Почему слова — плохо

В живом языке слов сотни тысяч, плюс формы, опечатки, неологизмы, имена, эмодзи. Сделать словарь «по слову на запись» нереально: он раздуется, а любое слово вне словаря (например, «гипербореальный») придётся заменять на заглушку <UNK> — и смысл потерян. Особенно тяжело языкам с богатой морфологией, как русский: «кот, кота, коту, котом, коты» — для словаря это пять разных записей.

Почему буквы — тоже плохо

Если резать на буквы, словарь крошечный (десятки символов) и «незнакомых» нет. Но фраза из 10 слов превращается в 60–80 токенов, а модель должна обрабатывать последовательность целиком — это дорого. К тому же отдельная буква «к» почти не несёт смысла, и модели труднее.

Золотая середина — подслова

Современные LLM режут текст на подслова. Частые слова («и», «кот», «дом») становятся одним токеном, а редкие распадаются на осмысленные куски: «гипербореальный» → «гипер», «боре», «альный». Так словарь остаётся компактным (обычно 30–100 тысяч токенов), любой текст кодируется без «незнакомых», а последовательности не слишком длинны.

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

Где это всплывает на практике

  • Лимиты и цена. Контекстное окно и оплата API считаются в токенах, а не в словах.
  • Счёт букв. Модель видит «клубника» как пару токенов, а не восемь букв — отсюда промахи в задачах вроде «сколько букв к в слове».
  • Числа. Длинное число дробится на токены непредсказуемо, что мешает арифметике (обсудим в последнем разделе).

Итог

  • Токенизация режет текст на единицы из фиксированного словаря.
  • Слова дают слишком большой словарь и проблему незнакомых слов; буквы — слишком длинные последовательности.
  • Подслова — компромисс: компактный словарь и кодирование любого текста.
  • Токены, а не слова, определяют лимиты, цену и многие «странности» LLM.
Проверьте себя
1. Почему словарь из целых слов — плохая идея?
AСлова занимают мало места
BСловарь становится огромным, а незнакомые слова и опечатки невозможно закодировать
CСлова нельзя превратить в числа
DМодель не умеет читать слова
2. Главный недостаток посимвольной токенизации?
AСлишком большой словарь
BОчень длинные последовательности и мало смысла в одном символе
CНевозможность кодировать опечатки
DПотеря пробелов
3. Чем хороши подслова как единицы токенизации?
AОни полностью убирают необходимость в обучении
BКомпактный словарь и при этом любой текст кодируется без «незнакомых» слов
CОни всегда совпадают с морфемами языка
DОни делают последовательности максимально длинными
Поддержать проект