Полное руководство по BiDAF - Часть 3 из 4

Механизм внимания в Seq2Seq и BiDAF - иллюстрированное руководство

Последовательность-последовательность (seq2seq) и Двунаправленный поток внимания (BiDAF) являются влиятельными моделями НЛП. В этих моделях используется метод, называемый «внимание», который включает сравнение двух последовательностей. В этой статье я объясняю, как механизм внимания работает в этих двух моделях.

Эта статья является третьей в серии из четырех статей, целью которых является проиллюстрировать работу Двунаправленного потока внимания (BiDAF), популярной модели машинного обучения для вопросов и ответов (Q&A).

Напомним, что BiDAF - это закрытая, экстрактивная модель вопросов и ответов. Это означает, что для ответа на запрос BiDAF необходимо ознакомиться с сопроводительным текстом, который содержит информацию, необходимую для ответа на запрос. Этот сопроводительный текст называется Контекст. BiDAF извлекает подстроку контекста, которая наилучшим образом отвечает на запрос - это то, что мы называем ответом на запрос. Я намеренно пишу слова «Запрос», «Контекст» и «Ответ» с заглавной буквы, чтобы показать, что я использую их в своих специализированных технических целях.

В первой статье этой серии я представил общий обзор BiDAF. Во второй статье я рассказал о том, как BiDAF использует 3 слоя встраивания для получения векторных представлений контекста и запроса. Конечными выходами этих шагов внедрения являются две матрицы - H (которые представляют слова в контексте) и U (которые представляют слова в запросе). H и U - это входные данные уровней внимания, функция которых состоит в объединении их информационного содержания.

Эти уровни внимания являются основным компонентом BiDAF, который отличает его от более ранних моделей и позволяет ему получить высокие баллы в таблице лидеров SQuAD. Работа со слоями внимания будет в центре внимания этой статьи. Давайте нырнем!

Концептуальное введение в механизм внимания

Прежде чем углубляться в детали механизма внимания, используемого в BiDAF, нам следует сначала понять, что такое внимание. Внимание было впервые представлено в 2016 году как часть модели последовательность-последовательность (seq2seq). Как следует из названия, seq2seq - это модель нейронной сети, цель которой - преобразовать одну последовательность в другую. Примером применения seq2seq является перевод предложения на французском языке на предложение на английском языке, например, приведенное ниже:

Модель seq2seq состоит из двух рекуррентных нейронных сетей (RNN):

  • Первая RNN, называемая «кодировщиком», отвечает за понимание входной последовательности (в нашем примере французское предложение) и преобразование ее информационного содержания в промежуточный вектор фиксированного размера.
  • Вторая RNN, называемая «декодером», затем использует этот промежуточный вектор для генерации выходной последовательности (в нашем примере это английский перевод французского предложения).

До включения механизма внимания модели seq2seq могли работать только с короткими последовательностями. Это ограничение возникает из-за того, что «ванильные» модели seq2seq могут помещать только ограниченный объем информации в промежуточный вектор и некоторый информационный контент. потеря в процессе.

Эта ситуация сродни попытке перевести книгу на французский язык, сначала прочитав всю книгу, запомнив ее содержание и затем переведя ее на английский язык только по памяти. Как вы понимаете, такая попытка обречена на провал - наш бедный переводчик забудет большую часть книги к тому времени, когда начнет писать английский перевод!

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

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

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

Реализация внимания в модели от последовательности к последовательности

На практике мы можем включить механизм внимания в модель seq2seq, выполнив следующие три шага, которые показаны на диаграмме ниже:

1. Сравнение последовательностей и расчет оценок внимания

На каждом временном шаге в процессе декодирования мы будем сравнивать скрытое состояние декодера со всеми скрытыми состояниями кодировщика. Это сравнение может быть выполнено с использованием любой функции, которая принимает два вектора и выводит скаляр, отражающий их сходство. Самая простая из таких функций - это простое скалярное произведение. Скалярный результат функции подобия называется «оценкой внимания»; эти оценки внимания обозначены синими кружками 🔘 на диаграмме выше.

2. Преобразование оценок внимания в распределение внимания

Затем мы берем softmax всех этих оценок внимания. Функция softmax нормализует эти оценки внимания в распределение вероятностей (набор чисел, которые в сумме составляют единицу). Это распределение вероятности называется «распределением внимания»; он сигнализирует о частях входной последовательности, которые наиболее важны для текущего процесса декодирования.

Синие полосы на диаграмме выше показывают распределение внимания. Мы видим, что полоса, соответствующая второму 🇫🇷 французскому слову «меня», является самой высокой; это потому, что это слово переводится как «I» на 🇬🇧 английском языке, что является первым словом в нашей выходной последовательности.

3. Умножение распределения внимания со скрытыми состояниями кодировщика для получения вывода внимания

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

Хотя три вышеуказанных шага внимания были сначала применены к seq2seq, их можно распространить и на другие приложения. Как мы увидим позже, BiDAF использует те же три шага в реализации внимания, хотя и с некоторыми незначительными изменениями.

Сделав этот краткий обзор механизма внимания и его реализации в seq2seq, мы теперь готовы увидеть, как эта концепция применяется в BiDAF. C’est parti!

Шаг 6. Формирование матрицы сходства

Напомню, где мы остановились в последней статье - нашим последним шагом (шаг 5) был шаг контекстного встраивания, на котором были созданы две выходные матрицы: H для контекста и U для запроса. Наша общая цель для этапов внимания (шаги с 6 по 9) состоит в том, чтобы объединить информацию из H и U, чтобы создать несколько матричных представлений контекста, которые также содержат информацию из Запрос.

Наш шестой шаг - первый шаг, связанный с вниманием - это формирование так называемой матрицы сходства S . S - это высокая тощая матрица размером T -by- J (количество слов в контексте по количеству слов в запросе).

Генерация матрицы сходства S соответствует первому этапу в механизме внимания seq2seq, описанном выше. Это влечет за собой применение функции сравнения к каждому столбцу в H и каждому столбцу в U. Значение в строке t и столбец j матрицы S представляет собой подобие t -ое слово контекста и j -ое слово запроса.

Давайте посмотрим на пример матрицы подобия S. Предположим, у нас есть эта пара "запрос / контекст":

  • Контекст: «Сингапур - небольшая страна, расположенная в Юго-Восточной Азии». (T = 9)
  • Запрос: «Где находится Сингапур?» (J = 4)

Матрица подобия S, созданная из указанной выше пары запрос / контекст, показана ниже:

Мы можем сделать несколько наблюдений из матрицы S выше:

  • Как и ожидалось, матрица имеет размер 9 на 4, 9 - это длина контекста (T) , а 4 - длина запроса ( J).
  • Ячейка в строке 1, столбце 3 содержит относительно высокое значение, о чем свидетельствует ее ярко-желтый цвет. Это означает, что слово запроса и слово контекста, связанные с этой координатой, очень похожи друг на друга. Эти слова оказываются одним и тем же словом - «Сингапур» - следовательно, имеет смысл, что их векторные представления очень похожи.
  • Тот факт, что слово контекста и слово запроса идентичны, не обязательно означает, что их векторные представления очень похожи! Посмотрите на ячейку в строке 2, столбце 2 - эта ячейка кодирует сходство слова контекста «есть» и идентичного слова запроса «есть». Однако его стоимость не так высока, как номинал «Сингапур» выше. Это потому, что эти векторные представления также включают информацию из окружающих фраз. Этот контекстный вклад особенно важен для небольших связок, таких как «есть».
  • С другой стороны, мы видим, что значение сходства двух разных слов с близким семантическим и грамматическим значением, таких как «расположенный» и «расположенный», относительно велико. Это благодаря нашему слову и слои встраивания символов, которые могут генерировать векторные представления, довольно точно отражающие значение слова.

Теперь позвольте мне рассказать вам о том, как мы вычисляем значения в S. Функция сравнения, используемая для выполнения этого вычисления, называется α . α больше сложнее, чем скалярное произведение, используемое в seq2seq; вот уравнение для α:

Поскольку функция α включает умножение вектора-строки и вектора-столбца одинакового размера, она всегда возвращает скаляр.

На диаграмме ниже показаны все матричные операции, выполняемые на этом этапе.

Шаг 7. Контекст для запроса Внимание (C2Q)

Матрица подобия S служит входными данными для следующих двух шагов: внимание от контекста к запросу (C2Q) и внимание от запроса к контексту (Q2C).

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

Выполнение C2Q аналогично выполнению второго и третьего шагов seq2seq Внимание. Сначала мы используем скалярные значения в S для расчета распределения внимания. Для этого используется softmax по строкам, равный S. В результате получилась другая матрица. Эта матрица не названа явно в документе BiDAF, но назовем ее матрицей A.

Матрица A, размерность которой такая же, как и S, указывает, какие слова запроса наиболее релевантны каждому слову контекста. Давайте посмотрим на пример A:

Наблюдая за тепловой картой выше, мы можем сделать вывод, что:

  • Семантическое сходство сильно способствует релевантности. Мы видим, что для слов контекста [«Сингапур», «находится», «расположен»] наиболее релевантными словами запроса являются [«Сингапур», «находится», «расположен»]. Это также слова, с которыми они имеют сильное семантическое сходство.
  • Контекстные слова «понимают» информацию, запрашиваемую словами запроса. Мы видим, что слово запроса «Где» является наиболее релевантным словом запроса для слов контекста [«а», «маленький», «страна», «в», «Юго-восток», «Азия»] - слова связанные с географическим положением.

Затем мы берем каждую строку A, чтобы получить распределение внимания At:, которое имеет размер 1 на J. At: отражает относительную важность каждого слова запроса для t-го слова контекста.

Затем мы вычисляем взвешенную сумму матрицы запроса U по каждому элементу в распределении внимания At:. Результатом этого шага является матрица вывода внимания, называемая Ũ, которая представляет собой матрицу 2d на T.

Ũ, как и H, представляет собой матричное представление контекста. Однако Ũ содержит информацию, отличную от H! В то время как H инкапсулирует семантическое, синтаксическое и контекстное значение каждого слова контекста, Ũ инкапсулирует информацию о релевантности каждого слова запроса каждому слову контекста.

Весь процесс создания Ũ из матрицы сходства S и матрицы запроса U показан ниже:

Шаг 8. Внимание-запрос к контексту (Q2C)

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

Сначала мы берем максимум по строке матрицы сходства S, чтобы получить вектор-столбец. Этот вектор-столбец явно не назван в документе, но назовем его z.

Давайте сделаем шаг назад и подумаем, что символизирует z. Помните, что наша матрица сходства S регистрирует сходство между каждым словом контекста и каждым словом запроса. Давайте еще раз посмотрим на созданный нами выше пример S.

Теперь давайте сосредоточим наше внимание на четвертой строке этой матрицы, которая соответствует контекстному слову «small». Видно, что в этом ряду нет ярких клеток! Это означает, что в запросе нет слова, аналогичного по значению контекстному слову «маленький». Когда мы возьмем максимум в этой строке, полученное максимальное значение будет близко к нулю.

Сравните это со словами «Сингапур» и «расположенный», в строках которых мы действительно находим хотя бы одну яркую ячейку, указывающую на существование слова (слов) запроса, аналогичного этим словам. Когда мы берем максимум из этих двух строк, соответствующее значение в векторе z для этих строк также будет относительно высоким.

Вот z, полученный для нашего примера:

В Q2C значения в z обслуживают значения нашего внимания. Мы применяем softmax к z, чтобы получить распределение внимания под названием b. Затем мы используем b, чтобы получить взвешенную сумму контекстной матрицы H. В результате получается вектор-столбец 2d: 1, который называется ĥ.

Последним шагом Q2C является копирование и вставка ĥ T раз и объединение этих копий в матрицу 2d на T, называемую Ĥ. Ĥ - это еще одно представление контекста, которое инкапсулирует информацию о наиболее важных словах в контексте по отношению к запросу.

Весь процесс создания Ĥ из матрицы сходства S и контекстной матрицы H показан ниже:

Шаг 9. «Megamerge»

Матрицы, полученные на этапах 5, 7 и 8, затем объединяются в гигантскую матрицу G. Чтобы освежить вашу память, эти три матрицы выглядят следующим образом:

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

Эти три матрицы имеют одинаковую размерность - 2d на T.

Это «мегамерджинг», к сожалению, не так просто, как наложение этих трех матриц по вертикали! Здесь мы используем еще одну настраиваемую функцию под названием β. Вот уравнение для β:

Мы определяем нашу многомерную матрицу G как G: t = β (H: t, Ũ: t, Ĥ: t), где G: t - это t-й вектор-столбец G, который соответствует t-му контекстному слову. G имеет размер 8d на T.

Весь процесс создания G из H, Ũ и Ĥ описан ниже:

Гигантская матрица G содержит всю информацию в H, Ũ и Ĥ. То есть вы можете думать о каждом векторе столбца в G как о векторном представлении слова контекста, которое «знает» о существовании запроса и включает соответствующую информацию. из него.

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

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

Глоссарий

  • Контекст: сопроводительный текст к запросу, содержащий ответ на этот запрос.
  • Запрос: вопрос, на который модель должна дать ответ.
  • Ответ: подстрока контекста, содержащая информацию, которая может ответить на запрос. Эта подстрока должна быть извлечена моделью.
  • T: количество слов в контексте
  • J: количество слов в запросе.
  • U: исходная матрица контекста, которая инкапсулирует семантическое, синтаксическое и контекстное значение слов запроса. U имеет размер 2d на J.
  • H: исходная матрица контекста, которая инкапсулирует семантическое, синтаксическое и контекстное значение слов контекста. H имеет размер 2d на T.
  • S: матрица сходства, в которой регистрируется сходство между каждым словом контекста и каждым словом запроса. S имеет размер T на J (количество слов в контексте по количеству слов в запросе).
  • α: функция сравнения, используемая для получения значений сходства в S.
  • A: матрица, которая получается из построчного softmax A и указывает, какие слова запроса наиболее релевантны каждому слову контекста. A имеет размер T на J.
  • z: вектор-столбец, полученный путем взятия максимума по строке матрицы сходства S. z имеет размер T на 1.
  • b: вектор распределения внимания, полученный в результате применения softmax к z. b имеет размер T на 1.
  • ĥ: результат внимания, полученный умножением b на матрицу контекста H. ĥ имеет размер 2d на 1.
  • Ũ: матрица контекста, которая инкапсулирует релевантность каждого слова запроса каждому слову контекста. Ũ имеет размер 2d на T.
  • Ĥ: матрица контекста, которая инкапсулирует информацию о наиболее важных словах в контексте по отношению к запросу. Ĥ имеет размер 2d на T.
  • G: большая матрица 8d на T, содержащая всю информацию в форматах H, Ũ и Ĥ. G - вход для слоя моделирования.
  • β: пользовательская функция конкатенации, используемая для создания G

использованная литература

[1] Двунаправленный поток внимания для машинного понимания (Минджун Со и др., 2017)

[2] Нейронный машинный перевод путем совместного обучения выравниванию и переводу (Bahdanau et. Al, 2015)

Если у вас есть какие-либо вопросы / комментарии по поводу статьи или вы хотите связаться со мной, вы можете сделать это через LinkedIn или по электронной почте на meraldo.antonio AT gmail DOT com.