Токенизация

Материал из 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, и ограничение длины контекста измеряются в токенах, а не в словах или символах.

Связь с другими понятиями

После токенизации каждый токен превращается в векторное представление (эмбеддинг). Именно с обучаемой векторизации токенов начинается работа моделей дистрибутивной семантики, матричных разложений текстов и трансформеров. Таким образом, токенизация задаёт «алфавит», в котором модель вообще воспринимает язык, и её качество опосредованно влияет на всё, что происходит дальше - от предобучения до пошаговых рассуждений.

См. также

Литература

  • 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.