токенизация в nlp
Токенизация в NLP — процесс разбиения исходного текста на элементарные единицы обработки, называемые токенами. Токены могут быть словами, подсловами, символами или байтами в зависимости от выбранного алгоритма. Токенизация — первый и фундаментальный шаг большинства NLP-пайплайнов: от неё зависит, как модель «видит» текст.
Зачем нужна токенизация
Нейронные сети работают с числами, а не с сырыми символами. Токенизатор преобразует строку в последовательность целых чисел — идентификаторов из словаря. Модель обрабатывает именно эту последовательность. Конструкция словаря и алгоритм разбивки определяют: насколько эффективно модель использует своё контекстное окно, как она обрабатывает редкие слова и разные языки, какова производительность при обработке текста.
Типы токенизации
Токенизация по словам (Word-level)
Самый интуитивный подход: каждое слово — один токен. Проблемы: огромный словарь (10–500 тыс. слов), невозможность обработать слова, не вошедшие в словарь (OOV), плохая работа с морфологически богатыми языками (русский, финский) и агглютинативными (турецкий, немецкий).
Посимвольная токенизация (Character-level)
Каждый символ — токен. Крошечный словарь (около 100 символов), нет OOV-проблемы. Но последовательности длиннее в 5–10 раз, модель вынуждена изучать язык с самого начала без готовых «кирпичиков» слов.
Подсловная токенизация (Subword)
Золотая середина: частые слова остаются целыми токенами, редкие разбиваются на части. «программирование» → [«программ», «ирование»]. Это доминирующий подход в современных LLM.
Алгоритмы подсловной токенизации
BPE (Byte Pair Encoding)
Начинает с символьного словаря и итерационно объединяет наиболее часто встречающиеся пары символов в новые токены. GPT-2, GPT-3, GPT-4 используют BPE. Исходная версия работает с байтами (Byte-level BPE) — это устраняет проблему кодировок и делает словарь по-настоящему универсальным.
WordPiece
Схож с BPE, но объединяет пары с максимальным увеличением вероятности обучающего корпуса. Используется в BERT и его производных. Токены, не являющиеся началом слова, получают префикс «##» (например, «##ing»).
SentencePiece
Языковонезависимый токенизатор, работающий с сырым текстом (включая пробелы как часть токенов). Использует BPE или Unigram Language Model. Применяется в T5, LLaMA, Mistral, mT5. Хорошо справляется с русским, японским, китайским языками.
Unigram
Начинает с большого словаря и итерационно удаляет токены, наименее влияющие на вероятность корпуса. Используется в SentencePiece как альтернатива BPE.
Токены и число токенов
Среднее соотношение для английского текста: ~1.3 токена на слово. Для русского и других флективных языков: ~2–3 токена на слово (из-за падежных окончаний, приставок, суффиксов). Это означает, что обработка русского текста вдвое-втрое дороже и потребляет больше контекстного окна. Специально обученные мультиязычные токенизаторы снижают это неравенство.
Специальные токены
Большинство токенизаторов вводят служебные токены: [BOS] (Beginning of Sequence), [EOS] (End of Sequence), [PAD] (заполнение батча до одинаковой длины), [UNK] (неизвестный токен), [SEP] (разделитель), [MASK] (для masked language modeling). В chat-моделях добавляются шаблонные токены разметки диалога (<|user|>, <|assistant|>).
Практические инструменты
Hugging Face Tokenizers — быстрая (Rust) библиотека с готовыми токенизаторами для всех популярных моделей. tiktoken (OpenAI) — токенизатор семейства GPT с высокой производительностью. SentencePiece — стандарт для моделей на основе T5/LLaMA. Онлайн-инструмент platform.openai.com/tokenizer позволяет визуализировать токенизацию конкретного текста.
Влияние токенизации на эффективность модели
Плохая токенизация — расточительное использование контекстного окна и завышенные затраты. Числа, даты и специфические форматы часто разбиваются неоптимально: «2024-01-15» может стать 5–7 токенами. Тематическое и предметно-специфическое дообучение токенизатора под конкретный домен способно существенно сократить число токенов для специализированных текстов.
Частые вопросы
Почему русский текст занимает больше токенов, чем английский?
Большинство популярных LLM (GPT-4, LLaMA) обучены преимущественно на английском тексте, поэтому их словари оптимизированы под английскую морфологию. Русские слова с их богатой флексией разбиваются на большее число подслов. Специализированные мультиязычные токенизаторы (как у mT5) или модели, обученные с большой долей русского текста (YandexGPT), токенизируют русский эффективнее.
Как токенизация влияет на стоимость использования LLM API?
API-провайдеры (OpenAI, Anthropic) тарифицируют по числу токенов. Более длинная токенизация языка напрямую увеличивает стоимость. Например, русский текст в среднем в 2 раза дороже английского эквивалента на токен. Это стоит учитывать при проектировании промптов и выборе языка системных инструкций.
Можно ли обучить собственный токенизатор?
Да. Hugging Face Tokenizers и SentencePiece позволяют обучить BPE или Unigram токенизатор на произвольном корпусе. Это полезно для доменных систем с нестандартной лексикой (химические формулы, медицинские коды, код на DSL). Размер словаря обычно 32 000–128 000 токенов — меньше означает более мелкую сегментацию.
Другие термины в теме «ИИ и машинное обучение»
Не хватает деталей?
Напишите, что уточнить по теме «токенизация в nlp» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).