Понимание алгоритма токенизации на основе подслов, используемого в современных моделях НЛП - WordPiece

За последние несколько лет появилось много шума в области ИИ и особенно НЛП. 😎 Понимание и анализ человеческого языка - это не только сложная задача, но и увлекательная. Человеческий язык выглядит простым, но очень сложным, поскольку даже короткий текст может содержать ссылки как на личную жизнь, так и на внешний мир. 🧐 Эта сложность приносит много проблем. Исследователи во всем мире работают над решением этих проблем и создают более умные приложения для реального мира. 👩‍💻

Когда мы начинаем работать с текстом, мы выполняем ряд шагов предварительной обработки для преобразования текста в числа. Эти шаги имеют решающее значение в любом процессе разработки модели или даже при анализе текстов. В этом многоэтапном процессе предварительной обработки одним из важных шагов является токенизация, которая, опять же, может быть разных типов. Существует токенизация на основе слова, подслова и символа. У каждого есть свои цели, преимущества и недостатки. Дайте нам сначала немного узнать об алгоритме токенизации на основе подслов.

Токенизация на основе подслов

Токенизация на основе подсловов - это решение между токенизацией на основе слов и символов. Основная идея состоит в том, чтобы решить проблемы, с которыми сталкиваются токенизация на основе слов (очень большой размер словаря, большое количество токенов OOV и разное значение очень похожих слов) и токенизация на основе символов (очень длинные последовательности и менее значимые отдельные токены).

Алгоритмы токенизации на основе подслов не разделяют часто используемые слова на более мелкие подслова. Он скорее разбивает редкие слова на более мелкие значимые подслова. Например, «мальчик» не разделяется, а «мальчики» делятся на «мальчик» и «s». Это помогает модели понять, что слово «мальчики» образовано с использованием слова «мальчик» с немного разными значениями, но с тем же корнем.

Некоторые из популярных алгоритмов токенизации на основе подслов: WordPiece, Byte-Pair Encoding (BPE), Unigram и SentencePiece. В этой статье мы рассмотрим алгоритм WordPiece. WordPiece используется в таких языковых моделях, как BERT, DistilBERT, Electra. Существует две реализации алгоритма WordPiece - снизу вверх и снизу вверх. Первоначальный восходящий подход основан на BPE. BERT использует нисходящую реализацию WordPiece. В этой статье я расскажу об оригинальной восходящей реализации на основе BPE.

Если вы хотите узнать разницу между тремя методами токенизации, вы можете прочитать эту статью, практическое руководство по TDS. 😍



Давайте начнем с алгоритма WordPiece. 🏃‍♀️

WordPiece

WordPiece - это алгоритм токенизации на основе подслов. Впервые он был описан в статье Голосовой поиск на японском и корейском языках (Schuster et al., 2012). Алгоритм приобрел популярность благодаря известной современной модели BERT. Этот алгоритм не сильно отличается от BPE, поэтому я рекомендую вам сначала понять BPE, прежде чем читать эту статью.

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



BPE берет пару токенов (байтов), смотрит на частоту каждой пары и объединяет пару с самой высокой комбинированной частотой. Процесс жадный, так как на каждом шаге ищет наивысшую комбинированную частоту.

Итак, в чем проблема с BPE? 🤔 Он может иметь случаи, когда существует более одного способа кодирования определенного слова. Затем алгоритму становится сложно выбрать токены подслов, поскольку нет способа определить приоритеты, которые из них использовать в первую очередь. Следовательно, один и тот же ввод может быть представлен разными кодировками, влияющими на точность изученных представлений. 🤦‍♀️

Взгляните на следующую таблицу токенов подслов.

Предположим, это словарь для небольшого корпуса, и мы хотим обозначить нашу входную фразу «линейная алгебра». Мы можем токенизировать его следующим образом:

linear = li + рядом или li + n + ea + r

алгебра = al + ge + bra или al + g + e + bra

Мы видим, что есть два разных способа токенизировать каждое слово в данной фразе, что дает в общей сложности четыре способа токенизации этой фразы. Итак, один и тот же вводимый текст можно закодировать четырьмя способами, и это действительно проблема. 🤷‍♀️

Каждый раз, когда мы думаем о продвижении / улучшении в какой-либо области, мы всегда ищем лучший и более реалистичный подход. Один из подходов, который может работать лучше, чем частотный подход BPE, состоит в том, чтобы учесть влияние, которое слияние конкретной пары байтов (пары символов) оказывает на каждом шаге. 👍

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

Например, алгоритм проверит, больше ли вероятность появления «es», чем вероятность появления «e», за которым следует «s». Слияние произойдет, только если вероятность деления «es» на «e», «s» больше, чем у любой другой пары символов.

Таким образом, мы можем сказать, что WordPiece оценивает, что он потеряет, объединяя два символа, чтобы убедиться, что шаг, который он делает, действительно стоит того или нет. 🤗

Алгоритм WordPiece является итеративным, и краткое изложение алгоритма в соответствии с бумагой выглядит следующим образом:

  1. Инициализируйте инвентарь словарных единиц базовыми символами.
  2. Постройте языковую модель на основе данных обучения, используя инвентарь слов из 1.
  3. Сгенерируйте новую словарную единицу, объединив две единицы из текущего словарного запаса. Инвентарь словарной единицы будет увеличен на 1 после добавления этой новой словарной единицы. Новая единица слова выбирается из всех возможных, так что она максимально увеличивает вероятность обучающих данных при добавлении в модель.
  4. Переходите к 2 до тех пор, пока не будет достигнут заранее заданный предел единиц слова или пока увеличение вероятности не упадет ниже определенного порога.

Вы, должно быть, думаете, что обучение должно быть процедурой, требующей больших вычислительных ресурсов, если оно выполняется с использованием грубой силы. Если да, то вы правы. 🤨 Временная сложность составляет O (K²), где K - количество текущих словарных единиц. Что касается каждой итерации, нам нужно тестировать все возможные комбинации пар и каждый раз обучать новую языковую модель. Однако алгоритм обучения может значительно ускориться, выполнив несколько простых приемов, обсуждаемых в статье. 🏃‍♂️ Мы можем тестировать только пары, которые действительно существуют в обучающих данных, тестировать только пары со значительными шансами на то, чтобы быть лучшими (те, которые имеют высокий априор), объединять несколько шагов кластеризации в одну итерацию (возможно для группы пар, не влияющих друг на друга). Согласно документу, эти жадные ускорения помогли создать 200-тысячный словарь для японских и корейских наборов данных всего за несколько часов на одной машине. Разве это не потрясающе? 🥳 Этот инвентарь затем можно использовать для моделирования языка, построения словарей и декодирования.

Это все еще жадно?

Да, даже после вероятностного подхода алгоритм WordPiece по-прежнему жаден, поскольку он выбирает лучшую пару на каждой итерации для слияния и построения токенизатора снизу вверх (от символов к парам и т. Д.). Полностью вероятностная модель использовала бы вероятность как для выбора пар для слияния, так и для того, объединять ли их или нет. Несмотря на это, алгоритм довольно популярен и дает отличные результаты.

Итак, подведем итоги.

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

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

Ссылки:

  1. Https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/37842.pdf
  2. Https://huggingface.co/transformers/tokenizer_summary.html
  3. Https://www.tensorflow.org/text/guide/subwords_tokenizer#applying_wordpiece

Всем спасибо, что прочитали эту статью. Поделитесь своими ценными отзывами или предложениями. Приятного чтения! 📗 🖌