Токенизация: почему не слова и не буквы, а подслова
Первый шаг любой LLM — разрезать текст на токены. Разбираемся, почему выбрали именно подслова и какие компромиссы за этим стоят.
Токенизация — разбиение текста на токены, единицы из фиксированного словаря, которые модель затем превращает в числа.
Три возможных способа резать текст
У текста есть естественные «уровни нарезки», и у каждого свои беды:
| Уровень | Плюс | Минус |
| Слова | осмысленные единицы | огромный словарь; незнакомые слова и опечатки вообще не закодировать |
| Символы | крошечный словарь, нет «незнакомых» | последовательности очень длинные; в одном символе мало смысла |
| Подслова | золотая середина | чуть сложнее устроена сборка словаря |
Почему слова — плохо
В живом языке слов сотни тысяч, плюс формы, опечатки, неологизмы, имена, эмодзи. Сделать словарь «по слову на запись» нереально: он раздуется, а любое слово вне словаря (например, «гипербореальный») придётся заменять на заглушку <UNK> — и смысл потерян. Особенно тяжело языкам с богатой морфологией, как русский: «кот, кота, коту, котом, коты» — для словаря это пять разных записей.
Почему буквы — тоже плохо
Если резать на буквы, словарь крошечный (десятки символов) и «незнакомых» нет. Но фраза из 10 слов превращается в 60–80 токенов, а модель должна обрабатывать последовательность целиком — это дорого. К тому же отдельная буква «к» почти не несёт смысла, и модели труднее.
Золотая середина — подслова
Современные LLM режут текст на подслова. Частые слова («и», «кот», «дом») становятся одним токеном, а редкие распадаются на осмысленные куски: «гипербореальный» → «гипер», «боре», «альный». Так словарь остаётся компактным (обычно 30–100 тысяч токенов), любой текст кодируется без «незнакомых», а последовательности не слишком длинны.
Полезные ориентиры на практике: в среднем один токен — это примерно ¾ английского слова; для русского текста токенов на ту же мысль обычно требуется больше (кириллица «дробится» сильнее). Поэтому один и тот же текст на русском «стоит» больше токенов, чем на английском.
Где это всплывает на практике
- Лимиты и цена. Контекстное окно и оплата API считаются в токенах, а не в словах.
- Счёт букв. Модель видит «клубника» как пару токенов, а не восемь букв — отсюда промахи в задачах вроде «сколько букв к в слове».
- Числа. Длинное число дробится на токены непредсказуемо, что мешает арифметике (обсудим в последнем разделе).
Итог
- Токенизация режет текст на единицы из фиксированного словаря.
- Слова дают слишком большой словарь и проблему незнакомых слов; буквы — слишком длинные последовательности.
- Подслова — компромисс: компактный словарь и кодирование любого текста.
- Токены, а не слова, определяют лимиты, цену и многие «странности» LLM.