Токенизатор SentencePiece
Проблема детерминированной токенизации
Рассмотренные ранее алгоритмы BPE, BBPE и WordPiece обладают общим свойством: они сегментируют текст детерминированно. Это означает, что одно и то же слово всегда будет разбито на токены-подслова одним и тем же спо собом, заложенным на этапе обучения токенизатора.
Такой жесткий подход порождает ряд проблем при обработке естественного языка:
-
Чувствительность к шуму и опечаткам Если в BPE слово playing разбивается на токены
[play],[ing], то модель успешно извлекает векторное представление (эмбеддинг) корняplay. Однако малейшая опечатка, например, plawing, приведет к совершенно иному разбиению, скажем, на[p],[law],[ing]. В результате связь с исходным смысловым корнем полностью теряется, и для нейросети слово становится неузнаваемым. -
Потеря смыслового корня при словообразовании Детерминированные алгоритмы, опирающиеся на частотность, могут по-разному обрабатывать однокоренные слова. Например, слово happy может быть представлено единым токеном
[happy]. При этом производное слово happiness может быть разбито на[happi]и[ness]. Нейросети придется самостоятельно выучивать неочевидную связь между независимыми токенами[happy]и[happi]. -
Риск некорректного выбора границ в омонимах Разб иение омонимов существенно влияет на смысл слова. Рассмотрим, к примеру, слово Unionized. В зависимости от контекста оно может означать:
-
[Union],[ized]— объединенный в профсоюз. -
[Un],[ionized]— неионизированный (в физике).
Детерминированный алгоритм выберет лишь один, наиболее частотный вариант разбиения, лишая языковую модель возможности правильно интерпретировать альтернативный смысл.
-
Библиотека SentencePiece и алгоритм Unigram
Для решения описанных проблем была разработана библиотека SentencePiece [1]. В отличие от BPE и WordPiece, которые требуют предварительного разбиения текста на слова, SentencePiece представляет собой комплексный обработчик, работающий напрямую с сырым текстом (end-to-end).
Это свойство делает предварительную обработку (пре-токенизаци ю) ненужной, что особенно удобно для языков, в которых исторически отсутствуют пробелы между словами, таких как японский и китайский. Библиотека активно используется в архитектурах T5, ALBERT и XLNet.
В основе автоматического разбиения текста в SentencePiece лежит алгоритм Unigram [2]. В отличие от BPE, который строит словарь снизу вверх, последовательно объединяя токены в более крупные и стартуя от базовых символов, Unigram работает по принципу сверху вниз. Он инициализируется избыточным словарем, содержащим множество длинных фраз и слов, а затем итеративно удаляет из него наименее полезные токены, пока не достигнет целевого размера словаря.
Детали реализации
Алгоритм Unigram базируется на униграммной языковой модели. Она предполагает, что вероятность появления каждого токена не зависит от предыдущих. Если у нас есть исходная строка, то вероятность ее конкретного разбиения вычисляется как произведение вероятностей отдельных токенов.
При начальном формирован ии словаря Unigram-подход использует EM-алгоритм для оценки вероятностей каждого подслова, а затем удаляет те токены (~20%), исключение которых приводит к минимальному падению общего правдоподобия обучающего корпуса.
Механика работы алгоритма Unigram
Алгоритм Unigram предлагает вероятностный подход к сегментации, который применяется как на этапе обучения языковой модели, так и на этапе применения.
Режим обучения Вместо того чтобы всегда подавать в нейросеть детерминированное разбиение, алгоритм на каждой эпохе обучения выбирает случайным образом с учетом вероятностей разные варианты сегментации одного и того же слова. Например, слово happiness в разных минибатчах обучения может представляться в виде:
[happ],[piness][happi],[ness][hap],[pi],[ness]
В результате модель учится