Узнайте, как сиамские сети BERT точно преобразуют предложения во вложения

Введение

Ни для кого не секрет, что трансформеры добились эволюционного прогресса в НЛП. На основе преобразователей возникли многие другие модели машинного обучения. Одним из них является BERT, который в основном состоит из нескольких составных преобразователей кодировщиков. Помимо использования для решения ряда различных задач, таких как анализ настроений или ответы на вопросы, BERT становился все более популярным для создания вложений слов — векторов чисел, представляющих семантические значения слов.

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

Проблема в том, что на практике нам часто приходится строить вложения не для отдельных слов, а для целых предложений. Однако базовая версия BERT создает вложения только на уровне слов. В связи с этим позже для решения этой проблемы было разработано несколько подходов, подобных BERT, которые будут обсуждаться в этой статье. Постепенно обсуждая их, мы придем к современной модели под названием SBERT.

Чтобы получить глубокое понимание того, как работает SBERT, рекомендуется, чтобы вы уже были знакомы с BERT. Если нет, то в предыдущей части этой серии статей это объясняется подробно.



БЕРТ

Прежде всего, напомним, как BERT обрабатывает информацию. В качестве входных данных он принимает токен [CLS] и два предложения, разделенные специальным токеном [SEP]. В зависимости от конфигурации модели эта информация обрабатывается 12 или 24 раза многоголовыми блоками внимания. Затем выходные данные агрегируются и передаются в простую регрессионную модель для получения окончательной метки.

Для получения дополнительной информации о внутренней работе BERT вы можете обратиться к предыдущей части этой серии статей:

Кросс-кодирующая архитектура

Можно использовать BERT для расчета сходства между парой документов. Рассмотрим задачу найти наиболее похожую пару предложений в большой коллекции. Чтобы решить эту проблему, каждая возможная пара помещается в модель BERT. Это приводит к квадратичной сложности во время вывода. Например, для обработки n = 10 000 предложений требуется n * (n — 1) / 2 = 49 995 000 вычислений BERT, которые на самом деле не масштабируются.

Другие подходы

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

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

Исследователи попытались устранить эту проблему, используя выходные данные внедрения токена [CLS], надеясь, что они будут содержать достаточно информации для представления предложения. Однако [CLS] оказался совершенно бесполезным для этой задачи просто потому, что изначально он был предварительно обучен в BERT для предсказания следующего предложения.

Другой подход заключался в передаче одного предложения в BERT и последующем усреднении выходных токенов. Однако полученные результаты оказались даже хуже, чем простое усреднение вложений GLoVe.

Получение независимых вложений предложений является одной из основных проблем BERT. Чтобы смягчить этот аспект, был разработан SBERT.

СБЕРТ

SBERT представляет концепцию сиамской сети, означающую, что каждый раз два предложения передаются независимо через одну и ту же модель BERT. Прежде чем обсуждать архитектуру SBERT, давайте обратимся к тонкому примечанию о сиамских сетях:

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

Возвращаясь к SBERT, после прохождения предложения через BERT к встраиваниям BERT применяется слой объединения, чтобы получить их представление с меньшей размерностью: исходные 512 768-мерных векторов преобразуются в один 768-мерный вектор. Что касается уровня пула, авторы SBERT предлагают выбрать уровень среднего пула в качестве уровня по умолчанию, хотя они также отмечают, что можно использовать стратегию максимального пула или просто брать выходные данные [CLS] токен вместо этого.

Когда оба предложения проходят через слои объединения, у нас есть два 768-мерных вектора u и v. Используя эти два вектора, авторы предлагают три подхода к оптимизации различных целей, которые будут обсуждаться ниже.

Целевая функция классификации

Цель этой задачи — правильно отнести данную пару предложений к одному из нескольких классов.

После создания вложений u и v исследователи сочли полезным сгенерировать еще один вектор, полученный из этих двух, как поэлементную абсолютную разность |u-v|. Они также пробовали другие методы проектирования функций, но этот показал лучшие результаты.

Наконец, три вектора u, v и |u-v| объединяются, умножаются на обучаемую весовую матрицу W и результат умножения подается в классификатор softmax, который выводит нормированные вероятности предложений, соответствующих различным классам. Функция перекрестной энтропийной потери используется для обновления весов модели.

Одной из самых популярных существующих задач, решаемых с этой целью, является NLI (вывод естественного языка), где для данной пары предложений A и B, определяющих гипотезу и посылку, необходимо предсказать является ли гипотеза истинной (вывод), ложной (противоречие) или неопределенной (нейтральной) с учетом предпосылки. Для этой задачи процесс вывода такой же, как и для обучения.

Как сказано в бумаге, модель SBERT изначально обучается на двух наборах данных SNLI и MultiNLI, которые содержат миллион пар предложений с соответствующими метками влечет за собой, противоречие или нейтральный. После этого исследователи статьи упоминают подробности о параметрах настройки SBERT:

«Мы настраиваем SBERT с помощью трехсторонней целевой функции softmax-классификатора для одной эпохи. Мы использовали размер пакета 16, оптимизатор Адама со скоростью обучения 2e-5 и линейную разминку скорости обучения более 10% обучающих данных. Наша стратегия объединения по умолчанию является подлой».

Целевая функция регрессии

В этой формулировке после получения векторов u и v оценка сходства между ними вычисляется напрямую с помощью выбранной метрики сходства. Прогнозируемый показатель сходства сравнивается с истинным значением, а модель обновляется с использованием функции потерь MSE. По умолчанию авторы выбирают косинусное сходство в качестве метрики сходства.

Во время вывода эту архитектуру можно использовать одним из двух способов:

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

Триплетная целевая функция

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

Маржа ε гарантирует, что положительное предложение будет ближе к привязке как минимум на ε, чем отрицательное предложение к привязке. В противном случае потери становятся больше 0. По умолчанию в этой формуле авторы выбирают евклидово расстояние в качестве векторной нормы, а параметр ε устанавливается равным 1.

Архитектура триплета SBERT отличается от двух предыдущих тем, что модель теперь принимает параллельно три входных предложения (вместо двух).

Код

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

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

Заключение

Мы рассмотрели одну из передовых моделей НЛП для получения вложений предложений. Уменьшая квадратичное количество выполнений вывода BERT до линейного, SBERT достигает значительного роста скорости при сохранении высокой точности.

Чтобы окончательно понять, насколько существенна эта разница, достаточно обратиться к описанному в статье примеру, где исследователи пытались найти наиболее похожую пару среди n = 10000 предложений. На современном графическом процессоре V100 эта процедура заняла около 65 часов с BERT и всего 5 секунд с SBERT! Этот пример демонстрирует, что SBERT является огромным достижением в НЛП.

Ресурсы

Все изображения, если не указано иное, принадлежат автору