Поймите, как BERT создает современные вложения.

Введение

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

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

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

Обзор высокого уровня

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

BERT — это преемник Transformer, который унаследовал его составные двунаправленные кодеры. Большинство архитектурных принципов BERT такие же, как и в оригинальном Transformer.

БЕРТ-версии

Существует две основные версии BERT: базовая и большая. Их архитектура абсолютно идентична, за исключением того, что они используют разное количество параметров. В целом, BERT big имеет в 3,09 раза больше параметров для настройки по сравнению с базовым BERT.

Двунаправленные представления

Судя по букве «B» в названии BERT, важно помнить, что BERT — это двунаправленная модель, что означает, что она может лучше фиксировать словесные связи благодаря тому, что информация передается в обоих направлениях ( слева направо и справа налево). Очевидно, что это приводит к увеличению ресурсов обучения по сравнению с однонаправленными моделями, но в то же время приводит к большей точности прогнозирования.

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

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

Примечание. В официальной статье авторы используют термин «предложение» для обозначения текста, передаваемого на вход. Для обозначения одного и того же термина в этой серии статей мы будем использовать термин «последовательность». Это сделано во избежание путаницы, поскольку «предложение» обычно означает одну фразу, разделенную точкой, а также в связи с тем, что во многих других исследовательских работах по НЛП термин «последовательность» используется в аналогичных обстоятельствах.

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

Примечание. В официальном документе используется термин «предложение», который обозначает входную последовательность, передаваемую в BERT, которая на самом деле может состоять из нескольких предложений. Для простоты мы будем следовать обозначениям и использовать один и тот же термин на протяжении всей статьи.

  • [CLS] — передается перед первой последовательностью, указывающей на ее начало. В то же время [CLS] также используется для целей классификации во время обучения (обсуждается в разделах ниже).
  • [SEP] — передается между последовательностями, чтобы указать конец первой последовательности и начало второй.

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

Встраивание входных данных

После токенизации для каждого токена создается встраивание. Чтобы сделать вложения более репрезентативными, BERT создает три типа вложений для каждого токена:

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

Эти вложения суммируются, и результат передается первому кодировщику модели BERT.

Выход

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

Обучение

Обучение BERT состоит из двух этапов:

  1. Предварительная подготовка. BERT обучается на немаркированной паре последовательностей с помощью двух задач прогнозирования: моделирование языка в маске (MLM) и вывод естественного языка (NLI). Для каждой пары последовательностей модель делает прогнозы для этих двух задач и на основе значений потерь выполняет обратное распространение ошибки для обновления весов.
  2. Точная настройка. BERT инициализируется с предварительно обученными весами, которые затем оптимизируются для конкретной задачи на помеченных данных.

Предварительная подготовка

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

Мы собираемся подробно рассмотреть обе проблемы, решаемые BERT во время предварительного обучения.

Моделирование замаскированного языка

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

  1. После токенизации 15% токенов случайным образом выбираются для маскировки. Выбранные токены будут предсказаны в конце итерации.
  2. Выбранные токены заменяются одним из трех способов:
    - 80% токенов заменяются токеном [MASK].
    Пример: Я купил книгу → Я купил [МАСКУ]
    — 10% жетонов заменяются случайным жетоном.
    Пример: Он ест фрукт → Он рисует фрукт
    - 10% жетонов остаются неизменными.
    Пример: Дом рядом со мной → Дом рядом со мной эм>
  3. Все токены передаются в модель BERT, которая выводит встраивание для каждого токена, полученного в качестве входных данных.

4. Выходные вложения, соответствующие токенам, обработанным на шаге 2, независимо используются для прогнозирования замаскированных токенов. Результатом каждого прогноза является распределение вероятностей по всем токенам словаря.

5. Потери перекрестной энтропии рассчитываются путем сравнения распределений вероятностей с истинными замаскированными токенами.

6. Веса модели обновляются с помощью обратного распространения ошибки.

Вывод естественного языка

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

Как и в MLM, построенное распределение вероятностей (в данном случае двоичное) используется для расчета потерь модели и обновления весов модели посредством обратного распространения ошибки.

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

Подробности обучения

Согласно документу, BERT предварительно обучен на BooksCorpus (800 миллионов слов) и английской Википедии (2500 миллионов слов). Для извлечения более длинных непрерывных текстов авторы брали из Википедии только отрывки для чтения, игнорируя таблицы, заголовки и списки.

BERT обучается на миллионе пакетов размером, равным 256 последовательностям, что эквивалентно 40 эпохам на 3,3 миллиарда слов. Каждая последовательность содержит до 128 (90% времени) или 512 (10% времени) жетонов.

Согласно оригинальной статье, параметры обучения следующие:

  • Оптимизатор: Адам (скорость обучения l = 1e-4, снижение веса L₂ = 0,01, β₁ = 0,9, β₂ = 0,999, ε = 1e-6).
  • Прогрев скорости обучения выполняется в течение первых 10 000 шагов, а затем линейно снижается.
  • Слой Dropout (α = 0,1) используется на всех слоях.
  • Функция активации: GELU.
  • Потери при обучении представляют собой сумму средних значений MLM и средней вероятности предсказания следующего предложения.

Тонкая настройка

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

Формат данных

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

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

Давайте посмотрим на распространенные проблемы и способы их решения путем тонкой настройки BERT.

Классификация пар предложений

Цель классификации пар предложений — понять взаимосвязь между данной парой последовательностей. Наиболее распространенными типами задач являются:

  • Вывод на естественном языке: определение того, следует ли вторая последовательность за первой.
  • Анализ сходства: определение степени сходства между последовательностями.

Для точной настройки обе последовательности передаются в BERT. Как правило, выходные данные токена [CLS] затем используются для задачи классификации. По мнению исследователей, токен [CLS] должен содержать основную информацию о связях предложений.

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

Задание на вопросы

Цель ответа на вопрос — найти ответ в текстовом абзаце, соответствующем конкретному вопросу. Чаще всего ответ дается в виде двух чисел: начальной и конечной позиций фишек прохода.

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

Для нахождения позиции начального токена ответа в абзаце вычисляется скалярное произведение между каждым выходным вложением и специальным обучаемым вектором Tₛₜₐᵣₜ. В большинстве случаев, когда модель и вектор Tₛₜₐᵣₜ обучаются соответствующим образом, скалярное произведение должно быть пропорционально вероятности того, что соответствующий токен на самом деле является токеном начального ответа. Чтобы нормализовать скалярные произведения, они затем передаются в функцию softmax и могут рассматриваться как вероятности. Встраивание токена, соответствующее наибольшей вероятности, прогнозируется как стартовый токен ответа. На основе истинного распределения вероятностей рассчитывается значение потерь и выполняется обратное распространение ошибки. Аналогичный процесс выполняется с вектором Tₑₙ𝒹 для предсказания конечного токена.

Классификация по одному предложению

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

  • Анализ тональности: понимание того, имеет ли предложение положительный или отрицательный настрой.
  • Классификация тем: отнесение предложения к одной из нескольких категорий на основе его содержания.

Рабочий процесс прогнозирования такой же, как и для классификации пар предложений: выходное внедрение для токена [CLS] используется в качестве входных данных для модели классификации.

Теги из одного предложения

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

Для этой цели вложения вычисляются для токенов входного предложения, как обычно. Затем каждое вложение (кроме [CLS] и [SEP]) независимо передается модели, которая сопоставляет каждое из них с данным классом NER (или нет, если это так). не могу).

Извлечение признаков

Взять последний слой BERT и использовать его в качестве встраивания — не единственный способ извлечь признаки из входного текста. Фактически, исследователи завершили несколько экспериментов по агрегированию вложений различными способами для решения задачи NER в наборе данных CoNLL-2003. Для проведения эксперимента они использовали извлеченные внедрения в качестве входных данных для случайно инициализированного двухслойного 768-мерного BiLSTM перед применением слоя классификации.

Способы извлечения вложений (из базы BERT) показаны на рисунке ниже. Как показано, наиболее эффективным способом было объединить четыре последних скрытых слоя BERT.

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

Объединение BERT с другими функциями

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

  • Объединение текста с нетекстовыми элементами. Например, если мы работаем с описаниями профилей людей в виде текста и есть другие отдельные характеристики, такие как имя или возраст, то новое текстовое описание можно получить в виде: «Меня зовут ‹имя›. ‹описание профиля›. Мне ‹возраст>
  • Объединение вложений с функциями. Как обсуждалось выше, можно создавать внедрения BERT, а затем объединять их с другими функциями. Единственное, что меняется в конфигурации, это то, что модель классификации для последующей задачи теперь должна принимать входные векторы более высокой размерности.

Заключение

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

В последнее время появились и другие BERT-подобные модели (SBERT, RoBERTa и др.). Существует даже специальная область исследований под названием «BERTology», которая углубленно анализирует возможности BERT для получения новых высокопроизводительных моделей. Эти факты подтверждают тот факт, что BERT обозначил революцию в машинном обучении и позволил значительно продвинуться в НЛП.

Ресурсы

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