Как токенизируются редкие слова (out-of-vocabulary) с помощью BPE или Unigram?
Краткий тезис
Редкие слова (OOV, out-of-vocabulary) – стандартная проблема NLP-моделей. Два популярных подхода к субсловной токенизации – BPE (Byte-Pair Encoding) и Unigram – решают её, разбивая слово на известные фрагменты (BPE) или выбирая наиболее вероятную последовательность субслов, вплоть до сохранения всего редкого токена целиком (Unigram). Оба метода обучаются на корпусе и строят словарь субслов, который значительно уменьшает долю OOV-токенов.
2. BPE: разбиение на субслова (известные части)
BPE (Sennrich et al., 2016) – итеративный алгоритм сжатия, адаптированный для токенизации.
Как работает BPE
- Инициализация: каждое слово разбивается на отдельные символы (включая конец слова
</w>или пробел). Начальный словарь – все уникальные символы корпуса. - Слияния: на каждом шаге находится самая часто встречающаяся пара соседних символов (или пар субслов). Эта пара объединяется в новый токен, который добавляется в словарь.
- Повторение: шаг 2 повторяется до достижения заданного размера словаря (обычно 32-64k токенов).
- Токенизация нового слова: применять слияния в том же порядке, что и при обучении, разбивая слово на максимально длинные известные фрагменты.
Преимущество для OOV
- Если слово не встречалось целиком, оно разбивается на части, которые есть в словаре (например, транс-континент-альный).
- Даже если какая-то часть всё ещё неизвестна (крайне редко при большом словаре), используется символьный уровень.
- BPE детерминирован: для одного и того же слова всегда получается одинаковое разбиение.
Реализации
| Инструмент | Платформа | Примечание |
|---|---|---|
| 🤗 Tokenizers | Python | Быстрая BPE-токенизация (ByteLevelBPETokenizer) |
| SentencePiece | C++/Python | BPE с явным пробелом; не требует предварительной токенизации |
| SubwordNMT | Python | Оригинальная реализация BPE для seq2seq |
3. Unigram: вероятностная модель, может оставить редкий токен
Unigram (Kudo, 2018) – другой подход, основанный на вероятностной модели языка над субсловами.
Как работает Unigram
- Инициализация: начальный словарь содержит все возможные субслова (например, все последовательности символов до определённой длины) из корпуса.
- Оценка: строится вероятностная модель, где каждому субслову приписывается вероятность. (Обычно используется EM-алгоритм с маргинализацией по всем возможным разбиениям слова.)
- Прунинг: субслова с наименьшей вероятностью удаляются из словаря, чтобы уменьшить его до заданного размера.
- Токенизация: для нового слова выбирается наиболее вероятное разбиение (обычно через алгоритм Витерби или beam search). В отличие от BPE, допускается несколько вариантов разбиения, и модель может выбрать оставить слово целиком, если это максимизирует вероятность.
Преимущество для OOV
- Unigram может «пережить» редкое слово, не разбивая его, если оно набрало достаточную вероятность в обучении. На практике это означает, что очень редкие токены не дробятся на части, а остаются целыми (пока не будут отсечены на этапе прунинга).
- Модель хорошо калибруется: если слово состоит из частей, которые часто встречаются вместе, Unigram может их объединить.
Сравнение BPE и Unigram
| Характеристика | BPE | Unigram |
|---|---|---|
| Алгоритм | Итеративные слияния | Вероятностная маргинализация + прунинг |
| Детерминированность | Да | Нет (может выбрать разный путь) |
| Размер словаря | Фиксируется заранее | Фиксируется через прунинг |
| OOV | Всегда разбивается на символы | Может оставить целый токен |
| Поддержка нескольких вариантов разбиения | Нет | Да (при необходимости) |
| Популярные модели | GPT-2, BART, RoBERTa | T5, ALBERT, XLM-RoBERTa |
Как правило, BPE проще и быстрее, а Unigram даёт более гибкое представление, но требует больше вычислительных ресурсов на обучение.
4. Пример: «трансконтинентальный» → субслова
Рассмотрим слово «трансконтинентальный» на русском языке. Предположим, что обученный словарь BPE и Unigram содержит субслова «транс», «континент», «альн», «ый», а также отдельные символы.
BPE (обучен на слияниях)
- Шаг 1:
т р а н с к о н т и н е н т а л ь н ы й(символы) - После применённых слияний (порядок):
транс(слияние т+р+а+н+с) – есть в словареконтинент(к+о+н+т+и+н+е+н+т) – естьальн(а+л+ь+н) – естьый(ы+й) – есть
Результат: транс##континент##альн##ый (спецсимволы ## – как в WordPiece, но BPE обычно использует другой разделитель, например @@ или пробел с маркером).
Unigram (вероятностная модель)
Unigram может выбрать:
- Вариант A:
транс##континент##альн##ый– сумма вероятностей выше, чем у других. - Вариант B:
транс##конт##инент##альн##ый– если «конт» и «инент» оказались частыми, но модель обычно выбирает более длинные субслова с большей вероятностью. - Вариант C:
трансконтинентальный– если слово целиком набрало высокую вероятность (редко для длинных слов, но возможно, если слово часто встречалось в обучении).
На практике Unigram почти всегда дробит слово, но в крайних случаях может оставить неизвестное слово как единый токен (если его вероятность выше суммы вероятностей разбиения). BPE же никогда не сохранит целое редко встречавшееся слово, если оно не было выучено как слияние на этапе обучения.
5. Пет-проект для закрепления
Задача: Обучить субсловную токенизацию на небольшом корпусе русских текстов (например, первые 10 тыс. строк из Википедии или новостного датасета) с помощью BPE (библиотека tokenizers) и Unigram (SentencePiece), визуализировать разбиения для нескольких редких слов.
Инструменты:
- Python,
pip install tokenizers sentencepiece - Корпус:
ru_tokenization_sample.txt(скачать можно отсюда: https://github.com/...) - Jupyter Notebook для визуализации
Шаги:
- Собрать корпус: скачать небольшой русский текст, очистить, сохранить как текстовый файл.
- Обучить BPE-токенизатор через
ByteLevelBPETokenizerсо словарём 5000 токенов. - Обучить Unigram-токенизатор через
SentencePieceс параметрамиvocab_size=5000. - Загрузить редкие слова: «трансконтинентальный», «дезоксирибонуклеиновый», «гидрометеоцентр», «криптовалюта».
- Применить оба токенизатора и вывести разбиения.
- Сравнить: какое разбиение даёт BPE, какое – Unigram, есть ли случаи, когда Unigram не разбивает слово.
Ожидаемый результат:
- Увидеть, что BPE всегда разбивает редкие слова на субслова, а Unigram может оставить некоторые короткие редкие слова целиком.
- График частотности токенов после каждого алгоритма.
- Понимание, что размер словаря влияет на степень дробления.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 929 | Текущий вопрос |
| 927 | Общий обзор токенизации |
| 928 | Сравнение WordPiece и BPE |
| 930 | Дальнейшая обработка токенов |
Навигация
- Предыдущий: 928
- Следующий: 930
- Индекс: 00. Индекс разборов