Токенизация
Материал из MachineLearning.
| | Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Iaroslav Lyakhov 19:15, 5 июля 2026 (MSD) |
|
Токениза́ция (англ. tokenization) в обработке естественного языка - это разбиение текста на элементарные единицы (токены), которыми оперирует модель. Токен может быть словом, частью слова, отдельным символом или даже байтом. Токенизация - это самый первый шаг любого конвейера работы с текстом: именно последовательность токенов, а не сам текст, языковая модель превращает в числа, обрабатывает и предсказывает. От того, как устроена токенизация, зависят размер словаря, длина входа, скорость работы, стоимость запроса и даже то, какие задачи модели даются легко, а какие - с трудом.
Зачем она нужна
Нейросеть не умеет работать с буквами напрямую - ей нужны числа. Токенизатор решает две задачи: разбивает строку на токены и сопоставляет каждому токену целочисленный номер из заранее построенного словаря. Дальше номер превращается в вектор, и уже с векторами работает модель.
Ключевой вопрос - что считать токеном. Здесь есть противоречие между двумя крайностями.
- Словами. Словарь из целых слов даёт короткие последовательности, но получается огромным (сотни тысяч и миллионы форм), а любое незнакомое слово - опечатка, неологизм, редкий термин - выпадает из словаря (проблема out-of-vocabulary, OOV) и не может быть закодировано.
- Символами. Словарь из букв крошечный и OOV не бывает, но последовательности становятся очень длинными. Для трансформера, у которого вычислительная сложность растёт квадратично с длиной входа, это дорого.
Практически все современные модели используют компромисс - токенизацию по подсловам (subword tokenization).
Подсловная токенизация
Идея простая: частые слова остаются целыми токенами, а редкие дробятся на осмысленные куски - приставки, корни, окончания. Так словарь остаётся ограниченным (обычно от 30 до 100 и более тысяч токенов), OOV не возникает вообще (в самом плохом случае слово соберётся из отдельных символов или байтов), а типичный текст кодируется недлинной последовательностью. Например, частотное слово «дом» будет одним токеном, а редкое «токенизация» распадётся на несколько частей, условно «токен» + «из» + «ация».
BPE
BPE (Byte Pair Encoding) строит словарь снизу вверх. Сначала все слова разбиты на отдельные символы. Затем алгоритм много раз находит самую частую пару соседних токенов и объединяет её в один новый токен, добавляя его в словарь. Так постепенно «склеиваются» частые буквосочетания, слоги и целые слова, пока словарь не достигнет заданного размера. BPE лёг в основу большинства современных токенизаторов.
WordPiece
WordPiece очень похож на BPE, но выбирает для слияния не самую частую пару, а ту, что сильнее всего увеличивает правдоподобие обучающих данных. Применяется в модели BERT.
Unigram
Unigram действует наоборот - сверху вниз: стартует с заведомо большого словаря и постепенно выбрасывает из него токены, потеря которых меньше всего вредит правдоподобию. Реализован в популярной библиотеке SentencePiece.
Byte-level BPE
Byte-level BPE применяет тот же BPE, но не к символам, а к байтам представления UTF-8. Благодаря этому словарь гарантированно покрывает вообще любой текст - любые языки, эмодзи, спецсимволы - и OOV становится невозможным в принципе. Этот вариант используют модели семейства GPT.
Специальные токены
Кроме «содержательных» токенов, словарь обычно включает служебные:
- маркеры начала и конца текста (например, <bos>, <eos>);
- разделители и метки для BERT-подобных моделей ([CLS], [SEP]);
- токен-заполнитель (padding) для выравнивания длин в батче;
- иногда - специальные токены для ролей в диалоге и вызова инструментов.
Особенности и подводные камни
- Неравномерность по языкам. Словари обучаются в основном на английских текстах, поэтому русский, арабский или китайский обычно дробятся на большее число токенов. Одна и та же по смыслу фраза на русском может стоить в полтора-два раза больше токенов, чем на английском. Это и удорожает запросы, и быстрее «съедает» контекстное окно.
- Токен - это не слово. Одно слово нередко становится несколькими токенами, а ведущий пробел часто входит в токен как его часть. Именно поэтому модели плохо решают задачи вида «сколько букв „р“ в слове» или «переверни строку»: они видят не буквы, а куски.
- Числа и код. Длинные числа и фрагменты кода токенизируются неинтуитивно (число может распасться на произвольные куски), что напрямую влияет на арифметические способности модели.
- Стоимость и лимиты. И тарификация API, и ограничение длины контекста измеряются в токенах, а не в словах или символах.
Связь с другими понятиями
После токенизации каждый токен превращается в векторное представление (эмбеддинг). Именно с обучаемой векторизации токенов начинается работа моделей дистрибутивной семантики, матричных разложений текстов и трансформеров. Таким образом, токенизация задаёт «алфавит», в котором модель вообще воспринимает язык, и её качество опосредованно влияет на всё, что происходит дальше - от предобучения до пошаговых рассуждений.
См. также
- Большая языковая модель
- Векторное представление (эмбеддинг)
- Трансформер
- BERT
- Обработка естественного языка
Литература
- Sennrich R., Haddow B., Birch A. Neural Machine Translation of Rare Words with Subword Units // Proc. of ACL. — 2016.
- Kudo T., Richardson J. SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing // Proc. of EMNLP (System Demonstrations). — 2018.
- Kudo T. Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates // Proc. of ACL. — 2018.

