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

Токенизатор 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]

В результате модель учится инвариантности к границам токенов. Она начинает понимать смысл морфем независимо от того, как именно алгоритм разрезал слово. Это значительно повышает устойчивость нейросети к опечаткам и языкам с вариативной морфологией (таким, как русский и немецкий).

Режим применения При применении (инференсе) используется одно математически наиболее правдоподобное разбиение входной строки на основе выученных вероятностей токенов. Для его определения используется алгоритм Витерби, работающий за полиномиальное время.

Можно ли использовать несколько вариантов разбиения не только при обучении, но и при инференсе?

Да, для дополнительного повышения качества обработки возможна генерация по KK лучшим вариантам сегментации. Модель может оценить несколько наиболее вероятных разбиений (например, для слова Unionized рассмотреть оба возможных смысла) и выбрать наилучший итоговый результат с учетом контекста всего предложения. Однако такой подход требует в KK раз больше вычислений.

Сравнение с Tiktoken

Если сравнивать библиотеку SentencePiece с Tiktoken (использующей Byte-Level BPE), можно выделить следующие различия:

  • Вычислительная сложность: Tiktoken концептуально проще и работает значительно быстрее на этапе инференса. Ему не требуется применять алгоритм Витерби для поиска наиболее вероятного разбиения — он сразу последовательно применяет выученные правила слияния.
  • Работа со специальными форматами: В Tiktoken на этапе пре-токенизации грамотно подобраны правила на основе регулярных выражений (RegEx) для изолированной работы с числами, пунктуацией и отступами в программном коде. SentencePiece лишен встроенных эвристик пре-токенизации и вынужден самостоятельно, с нуля, выучивать закономерности форматирования кода или чисел, что часто приводит к менее предсказуемому разбиению математических выражений и кода.

Однако SentencePiece способен обеспечить более устойчивую работу языковой модели при наличии опечаток и при работе с морфологически богатыми языками, в которых каждое слово может участвовать в виде большого числа вариативных словоформ.

Литература

  1. Kudo T., Richardson J. SentencePiece: A simple and language independent subword tokenizer and detokenizer for neural text processing. – Empirical Methods in Natural Language Processing. – 2018.
  2. Kudo T. Subword regularization: Improving neural network translation models with multiple subword candidates. – Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics. – 2018.