Перейти к основному содержимому

Токенизатор WordPiece

Максимизация правдоподобия корпуса

Алгоритм WordPiece [1] был первоначально разработан компанией Google для систем голосового поиска, а позднее успешно адаптирован для систем машинного перевода [2] и языковых моделей семейства BERT.

В отличие от алгоритма BPE, который жадно объединяет самые часто встречающиеся пары символов, WordPiece опирается на вероятностную модель. Его главная цель — подобрать такие правила слияния токенов, которые обеспечивают увеличение правдоподобия (likelihood) обучающего корпуса текстов.

Представим обучающий корпус CC как последовательность слов w1,,wnw_1, \dots, w_n, где каждое слово wiw_i разбито на некоторые токены:

wi=[ti,1,,ti,Ki]w_i = [t_{i,1}, \dots, t_{i,K_i}]

Предполагается статистическая независимость встречи токенов в слове, поэтому вероятность встретить это слово P(wi)P(w_i) вычисляется как произведение вероятностей составляющих его токенов:

P(wi)=j=1KiP(ti,j)P(w_i) = \prod_{j=1}^{K_i} P(t_{i,j})

Соответственно, правдоподобие всего корпуса LL представляет собой произведение вероятностей всех слов и, как следствие, всех токенов в корпусе:

L=P(C)=i=1NP(wi)=tokensCP(t)maxtokensL = P(C) = \prod_{i=1}^N P(w_i) = \prod_{\text{tokens} \in C} P(t) \to \max_{\text{tokens}}

При объединении двух соседних токенов AA и BB в новый токен ABAB вероятностная структура корпуса меняется. Чтобы понять, насколько целесообразно именно такое слияние, вводится показатель прироста правдоподобия. Если обозначить количество совместных встреч пары как NABN_{AB}, то изменение общего правдоподобия после слияния оценивается формулой:

Gain=LnewLold=(P(AB)P(A)P(B))NAB\text{Gain} = \frac{L_{\text{new}}}{L_{\text{old}}} = \left( \frac{P(AB)}{P(A) \cdot P(B)} \right)^{N_{AB}}

Идея и критерий объединения

Основное преимущество алгоритма заключается в том, что он итеративно ищет такие соседние фрагменты, слияние которых дает максимальное значение прироста правдоподобия (Gain). При этом объединяются исключительно символы и группы символов, в то время как знаки препинания и специальные токены в процессе слияния не участвуют.

В современных реализациях (например, в библиотеках от HuggingFace, [3]) для ускорения вычислений степень NABN_{AB} часто опускается, и алгоритм использует упрощенную метрику оценки (Score):

GainP(AB)P(A)P(B)\text{Gain} \approx \frac{P(AB)}{P(A) \cdot P(B)}
В чем математический смысл упрощенной метрики?

Упрощенная формула в точности совпадает с мерой точечной взаимной информации (Pointwise Mutual Information, PMI), которая также используется в лингвистике для поиска устойчивых словосочетаний (коллокаций).

В знаменателе находится ожидаемая вероятность встречи двух токенов при условии их полной независимости, а в числителе — их реальная совместная частота. Если значение меры велико, это означает, что токены встречаются вместе гораздо чаще, чем можно было бы ожидать при их случайном совместном появлении.

Такой подход позволяет находить семантически более сильные связи, а не просто частые комбинации. Например, алгоритм с большей вероятностью объединит редкий корень с редким суффиксом, если они всегда следуют друг за другом, в отличие от BPE, который бы отдал приоритет частотному предлогу и началу следующего популярного слова.

Для обеспечения устойчивости алгоритма вводится дополнительное ограничение: пара токенов рассматривается для объединения только в том случае, если количество их совместных появлений превышает заранее заданный порог.

Алгоритм обучения

Процесс обучения токенизатора WordPiece состоит из нескольких этапов:

  1. Подготовка Текст проходит стадию нормализации (приведение к нижнему регистру, удаление диакритических знаков и т.д.) и разбивается на отдельные слова (пре-токенизация).
  2. Инициализация Базовый словарь VV заполняется всеми уникальными символами, присутствующими в языке, изолированными знаками препинания, а также системными токенами, такими как [CLS], [SEP], [PAD], [UNK].
  3. Цикл, пока словарь токенов не достигнет целевого размера:
    • Вычисляются базовые вероятности всех токенов в текущем разбиении: P(t)=количество вхождений tобщее число токеновP(t) = \frac{\text{количество вхождений } t}{\text{общее число токенов}}.
    • Для всех соседних пар токенов внутри слов рассчитывается метрика объединения (Score).
    • Пара с максимальным значением Score сливается в единый новый токен, который добавляется в словарь.

Возможна также досрочная остановка алгоритма, если максимальное значение Score среди всех пар падает ниже установленного порога, и алгоритм начинает объединять токены, слабо связанные друг с другом.

Обратимость токенизации и маркер продолжения

Важной проблемой сабворд-токенизации является неоднозначность восстановления текста. Декодер должен понимать, где заканчивается одно слово и начинается другое. Например, английское слово dropout и фраза из двух слов drop out могут быть токенизированы идентично: [drop] и [out].

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

  • Слово dropout (слитно) \to [drop], [#out]
  • Фраза drop out (раздельно) \to [drop], [out]

Логика такого подхода очевидна: первый токен слова всегда является «чистым», а все последующие части (суффиксы, окончания, части сложных слов) помечаются как «зависимые». Это позволяет модели легко отличать приставки и корни от окончаний.

Пример вычислений при обучении

Рассмотрим механику алгоритма на небольшом примере.

Обучающий корпус playing replayed replaying

Инициализация (разбиение на токены) Слова разбиваются на базовые символы, при этом все символы, кроме первых в слове, получают префикс #:

  1. p, #l, #a, #y, #i, #n, #g (7 токенов)
  2. r, #e, #p, #l, #a, #y, #e, #d (8 токенов)
  3. r, #e, #p, #l, #a, #y, #i, #n, #g (9 токенов)

Общее количество токенов на старте: N=7+8+9=24N = 7 + 8 + 9 = 24.

Пример расчета метрики объединения Сравним две потенциальные пары для слияния: (p, #l) и (#i, #n).

  • Для пары (p, #l): Токен p встречается 1 раз (в слове playing). P(p)=1/24P(p) = 1/24. Токен #l встречается 3 раза. P(#l)=3/24P(\#l) = 3/24. Пара встречается вместе 1 раз. P(p,#l)=1/24P(p, \#l) = 1/24. Расчет метрики:

    Score(p,#l)=1/24(1/24)(3/24)=13/24=8\text{Score}(p, \#l) = \frac{1/24}{(1/24) \cdot (3/24)} = \frac{1}{3/24} = 8
  • Для пары (#i, #n): Токен #i встречается 2 раза. P(#i)=2/24P(\#i) = 2/24. Токен #n встречается 2 раза. P(#n)=2/24P(\#n) = 2/24. Пара встречается вместе 2 раза. P(#i,#n)=2/24P(\#i, \#n) = 2/24. Расчет метрики:

    Score(#i,#n)=2/24(2/24)(2/24)=12/24=12\text{Score}(\#i, \#n) = \frac{2/24}{(2/24) \cdot (2/24)} = \frac{1}{2/24} = 12

Результат: метрика для пары (#i, #n) выше (12 > 8), поэтому эти токены побеждают на текущей итерации и объединяются в новый токен #in.

Применение алгоритма к новым текстам

После завершения всех итераций обучения в словаре WordPiece накапливаются различные по размеру морфемы. В нашем примере там могут оказаться такие элементы, как:

  • play (токен начала слова)
  • #play (токен корня в середине слова, как в replaying)
  • #ing, #ed (популярные суффиксы)
  • re (популярная приставка)

При применении токенизатора к новому тексту WordPiece использует жадный алгоритм, известный как MaxMatch. Обработка идёт слева направо внутри каждого отдельного слова:

  1. Алгоритм ищет в словаре самый длинный префикс, который совпадает с началом текущего неразобранного остатка слова.
  2. Найденный префикс отщепляется, а к оставшейся части применяется тот же самый поиск самого длинного префикса (с учетом маркера #).
  3. Процесс повторяется, пока слово не будет полностью токенизировано.

Это делает WordPiece очень быстрым на практике, но менее гибким при работе с зашумленными текстовыми данными.

Обработка неизвестных слов

Если на каком-либо шаге алгоритм не может найти ни одного совпадения в словаре для оставшейся части слова, то всё слово целиком отбрасывается и заменяется единым специальным токеном [UNK] (Unknown).

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

Возьмем гипотетический словарь из примера выше и применим его к новым словам: play, played, playroom.

  1. play \to [play] Алгоритм находит слово целиком в словаре.
  2. played \to [play], [#ed] Самый длинный префикс, который есть в словаре — это play. Остается ed, который сопоставляется с маркером #ed. Оба токена найдены.
  3. playroom \to [UNK] Самый длинный префикс — play. Остается room. Алгоритм ищет префиксы для остатка (то есть токены, начинающиеся с #). Если в словаре есть только #r, то остается #oom. Поскольку элементы #oom, #oo или #o в словаре отсутствуют, нераспознанным объявляется не только суффикс, а всё исходное слово целиком.

Анализ метода

Достоинства

  • Высокая скорость работы на этапе применения за счет жадного алгоритма поиска MaxMatch.
  • Математическая логика объединения токенов (увеличение правдоподобия) позволяет выявлять неочевидные, но важные семантические связи. В частности, метод хорошо выделяет реальную морфологию слов (приставки, корни, суффиксы).

Недостатки

  • Классический WordPiece работает не на уровне байтов, как BBPE, а на уровне символов текста, из-за чего возможна проблема невозможности обработки слов, включающих редкие символы Unicode.

  • Поскольку каждому символу необходимо иметь как базовую версию, так и версию с префиксом #, стартовый размер словаря равен как минимум удвоенному числу символов алфавита. Из-за этого приходится дополнительно ограничивать множество рассматриваемых символов.

    Например, в мультиязычной версии BERT (mBERT) в WordPiece-токенизаторе используется словарь всего на 110 000 токенов, что очень мало для 104 поддерживаемых языков. В результате многие языки с редкими алфавитами страдают от переизбытка токенов [UNK] или разбиения слов на неэффективно мелкие части.

Метод WordPiece является стандартом для таких популярных архитектур энкодеров, как BERT, DistilBERT, ELECTRA.

Дополнительно прочитать о WordPiece-токенизации и о её использовании в библиотеке transformers можно в [4].

Литература

  1. Schuster M., Nakajima K. Japanese and korean voice search. – 2012 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). – 2012.
  2. Wu Y. et al. Google's neural machine translation system: bridging the gap between human and machine translation. – arXiv preprint. – 2016.
  3. HuggingFace. BPE, WordPiece, and SentencePiece tokenization. – HuggingFace NLP Course. – 2023.
  4. Hugging Face LLM course: токенизация WordPiece.