СОДЕРЖАНИЕ

  1. Введение в механизм внимания.
  2. Постановка задачи.
  3. Подготовка данных
  4. Seq2Seq моделирование, кодировщик-декодер, уровень внимания.
  5. Результат
  6. Будущая работа
  7. использованная литература

1. Введение в механизм внимания

Вот подробное описание механизма внимания в моем предыдущем блоге, оно охватывает все детали того, как работает внимание.

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

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

ЗАЯВЛЕНИЕ О ПРОБЛЕМЕ

Как все знают в WhatsApp, когда вы пишете кому-то сообщение, вы получаете предсказание следующего слова.

Поскольку он обеспечивает предсказание только двух или трех слов в основном.

2. Автозаполнение Google

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

3. GMAIL SMART COMPOSE

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

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

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

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

ПОДГОТОВКА ДАННЫХ

Я использовал набор данных электронной почты Enron, доступный в kaggle. Набор данных электронной почты Enron содержит около 500 000 электронных писем, отправленных сотрудниками корпорации Enron. Он был получен Федеральной комиссией по регулированию энергетики в ходе расследования краха Enron.

Или вы можете использовать свой собственный набор данных электронной почты с помощью API, доступного в python.

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

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

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

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

Использование нейронных сетей в языковом моделировании часто называют моделированием нейронного языка, или сокращенно NLM.

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

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

Вы можете думать о словесной языковой модели следующим образом:

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

Вместо слова за словом я использовал символьную модель.

Понимание языкового моделирования выходит за рамки этого блога, мы используем языковое моделирование для генерации seq.

\ n и \ t - это просто префикс и постфикс для начала и конца предложения. Я прикрепил это, потому что, прогнозируя предложение для заданного ввода, наша модель знает, когда начать, а когда закончить. Если бы вы начали набирать «Как ж», было бы предсказано «как ваш день». Таким образом, нам может потребоваться LM с гораздо большей степенью детализации, чем на уровне слов. Для задач машинного обучения и глубокого обучения данные входные данные могут быть в любой форме, поэтому их следует преобразовывать в числовые данные. Для этой задачи наш ввод - это предложение, поэтому мы должны токенизировать ввод и создать словарь, который содержит отображение индекса для определенного слова.

Вышеупомянутая функция разбивает предложение символ за символом и дополняет последовательность.

наш ввод будет выглядеть так.

Seq2Seq моделирование, кодировщик-декодер, уровень внимания.

Как следует из названия, seq2seq принимает в качестве входных данных последовательность слов (предложение или предложения) и генерирует выходную последовательность слов. Это достигается за счет использования рекуррентной нейронной сети (RNN). Хотя ванильная версия RNN используется редко, используются ее более продвинутые версии, то есть LSTM или GRU. Это потому, что RNN страдает от проблемы исчезающего градиента. Он развивает контекст слова, принимая 2 входа в каждый момент времени. Один от пользователя, а другой от его предыдущего вывода, отсюда и название повторяющееся (вывод идет как ввод).

Ниже приводится множество вариантов модели seq2seq.

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

В основном он состоит из двух компонентов: кодировщика и декодера, поэтому иногда его называют сетью кодировщика-декодера.

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

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

ДАВАЙ НАЧНЕМ:

вы можете найти весь необходимый код в ссылке github, которая находится в конце

АРХИТЕКТУРА: -

КОДЕР

ШАГ 1, ЧАСТЬ КОДЕРА

Кодировщик - это простые слои LSTM, которые принимают один ввод на каждом временном шаге.
Возвращаемое состояние будет истинным, то есть скрытые состояния из предыдущего временного шага
будут вводить состояние LSTM на текущем временном шаге.

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

ВНИМАНИЕ:

ШАГ 2. ВНИМАНИЕ

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

В механизме внимания

  1. скрытая форма == (Batch_Size, скрытые единицы)
  2. y_hidden_states = (Размер партии x 1 x скрытых единиц)
  3. мы делаем это, чтобы выполнить сложение для подсчета баллов
  4. и добавляем оба выхода плотного слоя
  5. Теперь эта сумма выходов из плотных слоев складывается с выходами выходных данных кодировщика, а также с tanh и одним единичным плотным слоем.
  6. форма оценки == (размер_пакета, длина_последовательности, 1)
  7. мы получаем 1 на последней оси, потому что мы применяем оценку к себе.
  8. форма тензора до применения self.V составляет (batch_size, max_length, units)
  9. мы применяем softmax к оценке, поэтому для получения значения от 0 до 1 и суммы value = 1 причина применения оси = 1 заключается в том, что по умолчанию softmax применяется только к последней оси, но мы должны применять к состояниям Tx (Tx - это гиперпараметр)
  10. контекст vector_shape = (размер_пакета, скрытые_единицы)

ДЕКОДЕР:

шаг 3, часть ДЕКОДЕР

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

Обучение:-

Определите оптимизатор, функцию потерь и функцию точности.

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

Выход:

Визуализация графиков:

Тестирование:

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

eg:

Input seq - это то, что принимает моя модель, pred seq - это когда входная seq проходит через модель, что является прогнозируемым выходом, который мы получаем. BLEU SCORE - это когда прогнозируемый вывод содержит те же слова, что и в исходном предложении, что вывод является одним, например.

original = [[‘this’, ‘is’, ‘small’, ‘test’]]

предсказанный = [‘this’, ‘is’, ‘a’, ‘test’]

BLEU SCORE: 0,75 (потому что в моем первоначальном предложении нет буквы «а».

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

Визуализация протестированного предложения:

БУДУЩАЯ РАБОТА :-

Попробуйте сделать веб-приложение с помощью фляги.

Используйте трансформатор

Ссылка:-

  1. Https://www.coursera.org/lecture/nlp-sequence-models/attention-model-lSwVa (Объяснение внимания Эндрю Нг)
  2. Https://arxiv.org/abs/1409.3215
  3. Https://keras.io/examples/lstm_seq2seq/
  4. Https://arxiv.org/abs/1406.1078
  5. Https://machinetalk.org/2019/03/29/neural-machine-translation-with-attention-mechanism/
  6. Https://www.appliedaicourse.com/course/11/Applied-Machine-learning-course

КОД:-

Вы можете получить мой полный код в репозитории github здесь

ЛИНКЕДИН