Графическое внимание

NLP

Эта статья переведена сДжиангала Wrangler.GitHub.IO/визуализация…

Модель «последовательность к последовательности» (seq2seq) — это модель глубокого обучения, успешно справляющаяся со многими задачами, такими как: машинный перевод, суммирование текста, изображения и подписи к изображениям. Google Translate начал использовать эту модель в конце 2016 года. Есть 2 основополагающие статьи (Sutskever et al., 2014, Cho et al., 2014) объясняет эти модели.

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

Модель «последовательность к последовательности» (seq2seq) принимает в качестве входных данных последовательность входных данных (слов, букв, признаков изображения) и выводит другую последовательность. Обученная модель показана на следующем рисунке:


В нейронном машинном переводе последовательность — это последовательность слов. Точно так же вывод также представляет собой последовательность слов.

Узнайте больше о деталях

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


Этот механизм также применим к машинному переводу.

В задачах машинного перевода контекст представляет собой вектор (в основном массив чисел). Кодировщики и декодеры, как правило, представляют собой RNN (обязательно ознакомьтесь с Luis Serrano [Отличное введение в RNN] (https://www.youtube.com/watch?v=UNmqTiOnRfg)).

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

По замыслу RNN принимают 2 входа на каждом временном шаге:

  • Элемент во входной последовательности (в примере с декодером вход — это слово в предложении)
  • скрытое состояние

Однако каждое слово должно быть представлено в виде вектора. Чтобы преобразовать слово в вектор, мы используем класс методов, называемых «встраиванием слов». Такие методы преобразуют слова в векторное пространство, представление, способное фиксировать большой объем семантической информации о словах (например,king - man + woman = queen).


Прежде чем мы сможем обрабатывать слова, нам нужно преобразовать их в векторы. Это преобразование выполняется с использованием алгоритма встраивания слов. Мы можем использовать предварительно обученные вложения или обучать наши собственные вложения в нашем наборе данных. Обычно размер вектора встраивания составляет 200 или 300. Для простоты мы показываем здесь длину вектора как 4. Теперь, когда мы рассмотрели основы векторов/тензоров, давайте рассмотрим механику RNN и визуализируем эти модели RNN:

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

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

Давайте посмотрим на скрытое состояние энкодера. Обратите внимание, что последнее скрытое состояние на самом деле является контекстом, который мы передаем декодеру.


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

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


Внимание объяснение

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

существуетBahdanau et al., 2014иLuong et al., 2015В двух статьях предлагается решение. Эти две статьи предлагают и улучшают метод под названием «Внимание», который значительно улучшает качество машинного перевода. Внимание позволяет модели сосредоточиться на соответствующих частях входной последовательности по мере необходимости.


На временном шаге 7 механизм внимания позволяет декодеру сосредоточиться на слове «étudiant» (что означает «учащийся», находящийся в разработке), прежде чем производить перевод на английский язык. Эта способность усиливать соответствующие сигналы входной последовательности позволяет моделям внимания давать лучшие результаты, чем модели без внимания.

Перейдем к пониманию модели внимания на высоком уровне. Модель внимания отличается от классической модели «последовательность за последовательностью» (seq2seq) двумя способами:

Во-первых, кодер будет передавать больше данных декодеру. Кодер передает декодеру скрытое состояние (состояние скрытого слоя) всех временных шагов, а не только последнее скрытое состояние (состояние скрытого слоя).


Во-вторых, декодер модели внимания выполняет дополнительный процесс перед тем, как произвести вывод. Чтобы сосредоточить внимание на части входных данных, связанных с этим временным шагом. Декодер выполняет следующую обработку:
  1. Просмотрите скрытое состояние всех полученных энкодеров. Среди них каждое скрытое состояние (состояние скрытого слоя) в кодировщике соответствует слову во входном предложении.
  2. Дайте каждому скрытому состоянию оценку (мы пока игнорируем вычисление этой оценки).
  3. Умножьте каждое скрытое состояние (состояние скрытого слоя) на соответствующую оценку после softmax, так что скрытое состояние (состояние скрытого слоя), соответствующее высокой оценке, будет увеличено, а скрытое состояние (состояние скрытого слоя), соответствующее низкой оценке, будет быть Уменьшить.

Этот шаг взвешенного усреднения выполняется на каждом временном шаге декодера.

Теперь давайте посмотрим на весь процесс модели внимания, объединив все в следующую диаграмму:

  1. Вход декодера RNN модели внимания включает в себя: вектор вложения , и инициализированное скрытое состояние декодера (состояние скрытого слоя).
  2. RNN обрабатывает 2 вышеуказанных входа, создавая выходные данные и новое скрытое состояние (скрытый вектор состояния слоя h4), где выходные данные игнорируются.
  3. Внимание! Шаг: Мы используем скрытое состояние кодировщика (состояние скрытого слоя) и вектор h4 для вычисления вектора контекста (C4) для этого временного шага.
  4. Мы объединяем h4 и C4, чтобы получить вектор.
  5. Мы передаем этот вектор в нейронную сеть с прямой связью (которая обучается на всей модели).
  6. Выход вывода нейронной сети с прямой связью представляет собой вывод слова на этом временном шаге.
  7. Повторите этот шаг на следующем временном шаге.

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

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

Вы можете увидеть распределение внимания, когда модель выводит «Европейскую экономическую зону». Во французском языке порядок этих слов обратный по отношению к английскому («европейская экономическая зона»). Порядок остальных слов аналогичен. Если вы считаете, что готовы изучить кодовые реализации механизмов внимания, обязательно ознакомьтесь с [Руководством по нейронному машинному переводу (seq2seq)] на основе TensorFlow (https://github.com/tensorflow/nmt).

Надеюсь, эта статья будет вам полезна, визуализации в статье взяты из нанокурса Udacity NLP](Woohoo. U big city.com/course/ Эта картинка… Attention Is All You NeedТрансформер.

Я также создал несколько классов как UdacityМашинное обучениечасть. Курсы, которые я создал, включают обучение без присмотра и jupyternotebook для рекомендации фильмов с использованием совместной фильтрации.

ты можешь пройти@JayAlammmarСвяжитесь со мной и с нетерпением ждем ваших отзывов.


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