Что такое токенизация?

Токенизация — это процесс разбиения текста на меньшие логические единицы, называемые токенами. В зависимости от задачи, токеном может быть слово, часть слова (субтокен), предложение или даже символ. Токенизация — один из первых и важнейших этапов в обработке естественного языка (NLP), так как большинство моделей не работают напрямую с текстом, а преобразуют его в числовые представления через токены.

1. Зачем нужна токенизация

Компьютеры не понимают текст напрямую. Для обработки, анализа или обучения моделей текст необходимо превратить в последовательность чисел. Это преобразование происходит через токенизацию, а затем через векторизацию.

Примеры применения:

  • Подготовка текста к обучению нейросети

  • Классификация, поиск, перевод, суммаризация

  • Анализ синтаксической и семантической структуры

2. Типы токенизации

A. По словам (Word Tokenization)

Разделение текста на слова:

"Я люблю машинное обучение" → ["Я", "люблю", "машинное", "обучение"]

Особенности:

  • Простая реализация (по пробелам и пунктуации)

  • Подходит для языков с чёткой разделённостью слов (английский, немецкий)

  • Проблемы с агглютинативными или синтетическими языками (русский, турецкий)

  • Неустойчивость к опечаткам, редким словам, морфологии

B. По символам (Character Tokenization)

Разбиение текста на отдельные символы:

"cat"  \["c", "a", "t"\]

Плюсы:

  • Универсальность (не зависит от языка)

  • Позволяет моделировать орфографию

Минусы:

  • Очень длинные последовательности

  • Теряется семантика слов

C. Subword токенизация

Разбиение слов на морфемы или часто встречающиеся фрагменты:

"unhappiness"  \["un", "happi", "ness"\]

Методы:

  • **Byte Pair Encoding (BPE)
    **
  • **WordPiece (используется в BERT)
    **
  • **Unigram Language Model (используется в SentencePiece)
    **

Плюсы:

  • Обрабатывает незнакомые слова

  • Сокращает словарь

  • Повышает устойчивость к морфологическим вариациям

Пример с BPE:

"машинноеобучение" → ["машин", "ное", "об", "учение"]

D. Sentence Tokenization

Разделение текста на предложения:

"Привет. Как дела? Всё хорошо!"

 \["Привет.", "Как дела?", "Всё хорошо!"\]

Используется при обработке длинных документов, в суммаризации, сегментации.

3. Проблемы токенизации

A. Амбигуитет разделения

Некоторые языки, такие как китайский, японский, не используют пробелы между словами. Поэтому word-level токенизация требует сегментаторов (jieba, MeCab, Kuromoji).

B. Сокращения и апострофы

"don't" → ["do", "n't"] или ["don", "'", "t"] — зависит от токенизатора

C. Пунктуация

"Hello, world!"  \["Hello", ",", "world", "!"\]
или  \["Hello", "world"\]  при очистке пунктуации

D. Эмодзи и спецсимволы

Современные токенизаторы (например, в модели GPT) умеют обрабатывать эмодзи и Unicode-символы как отдельные токены.

4. Токенизация в современных NLP-моделях

A. BERT и WordPiece

  • Использует WordPiece токенизацию

  • Словарь ограничен (30k-50k токенов)

  • Незнакомые слова разбиваются на субтокены с префиксом ##:

"unhappiness"  \["un", "##happiness"\]
  • Модель обучается понимать и связывать такие части слова

B. GPT и Byte-Pair Encoding (BPE)

  • Использует BPE или GPT2-BPE (с кодировкой byte-level)

  • Возможна обработка слов, которых нет в обучении

  • Более устойчива к редким словам, опечаткам и эмодзи

C. SentencePiece

  • Универсальный токенизатор, не требует предварительной токенизации

  • Используется в T5, ALBERT, XLNet, mBART

  • Обрабатывает текст как последовательность байт/символов

  • Генерирует subword-словарь с оптимальной сегментацией

5. Примеры токенизации с разными подходами

Входной текст Токенизатор Результат токенов
"машинное обучение" whitespace ["машинное", "обучение"]
--- --- ---
"машинное обучение" BPE ["маш", "ин", "ное", "об", "учение"]
--- --- ---
"don't worry" WordPiece ["don", "'", "t", "worry"]
--- --- ---
"北京市" (Пекин) jieba ["北京", "市"]
--- --- ---

6. Как обучаются токенизаторы

Subword токенизаторы (BPE, WordPiece, Unigram):

  1. Анализируют корпус текста.

  2. Строят частотную таблицу всех слов и фрагментов.

  3. Итеративно объединяют наиболее часто встречающиеся пары символов или токенов.

  4. Формируют финальный словарь фиксированного размера (например, 32 000 токенов).

7. Токенизация и обратная сборка (detokenization)

После токенизации важно, чтобы модель могла обратно собрать текст для вывода или генерации.

  • Для subword токенов — detokenization происходит с учётом префиксов, пробелов, символов.

  • Ошибки детокенизации могут повлиять на смысл:

\["I", "love", "chat", "##bots"\]  "I love chatbots"

8. Влияние токенизации на обучение модели

  • Длина последовательности напрямую зависит от токенизации. Например, subword токенизация может превратить одно слово в 3–5 токенов.

  • Ограничение длины (например, 512 токенов в BERT) учитывает именно токены, а не слова.

  • Токенизация влияет на:

    • обобщающую способность

    • размер обучаемого словаря

    • производительность модели

9. Инструменты токенизации

Библиотека Описание
nltk.tokenize Токенизация слов и предложений
--- ---
spaCy Быстрая и языко-зависимая токенизация
--- ---
transformers (HuggingFace) Токенизаторы для всех моделей
--- ---
SentencePiece Универсальный токенизатор от Google
--- ---
tokenizers (HF) Быстрый токенизатор на Rust
--- ---

10. Пример токенизации в Python (с HuggingFace)

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokens = tokenizer.tokenize("Natural Language Processing is awesome!")
print(tokens)
\# \['natural', 'language', 'processing', 'is', 'awesome', '!'\]
encoded = tokenizer("Natural Language Processing is awesome!")
print(encoded\['input_ids'\])
\# \[101, 3019, 2653, 8222, 2003, 12476, 999, 102\]

Токенизация — основа всей работы в NLP. От качества токенизации и выбора подходящего метода зависит успех downstream-задач: классификации, генерации, перевода и анализа текста. Под разные языки, задачи и модели используются разные стратегии, которые требуют внимательного подбора и оценки.