Что такое токенизация?
Токенизация — это процесс разбиения текста на меньшие логические единицы, называемые токенами. В зависимости от задачи, токеном может быть слово, часть слова (субтокен), предложение или даже символ. Токенизация — один из первых и важнейших этапов в обработке естественного языка (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):
-
Анализируют корпус текста.
-
Строят частотную таблицу всех слов и фрагментов.
-
Итеративно объединяют наиболее часто встречающиеся пары символов или токенов.
-
Формируют финальный словарь фиксированного размера (например, 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-задач: классификации, генерации, перевода и анализа текста. Под разные языки, задачи и модели используются разные стратегии, которые требуют внимательного подбора и оценки.