Последовательные Модели Глубоких Нейронных Сетей На Pytorch (Часть 3)



3. Нейронный машинный перевод путем совместного обучения выравниванию и переводу В этом третьем посте о моделях последовательность-последовательность с использованием PyTorch и torchText мы реализуем модель из Нейронный машинный перевод: совместное обучение выравниванию и переводу .

Эта модель демонстрирует лучшую точность из трёх моделей (~27 по сравнению с ~34 у предыдущей модели).

Как и раньше, если визуальный формат поста вас не удовлетворит, то ниже приведены ссылки на английскую и русскую версии блокнота jupyter: Оригинальная версия ( Открыть блокнот Jupyter в Colab ) Русская версия ( Открыть блокнот Jupyter в Colab )



Введение

Напомним общую модель кодека-декодера:

Последовательные модели глубоких нейронных сетей на PyTorch (часть 3)

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



Последовательные модели глубоких нейронных сетей на PyTorch (часть 3)

и со скрытым состоянием

Последовательные модели глубоких нейронных сетей на PyTorch (часть 3)

.



Последовательные модели глубоких нейронных сетей на PyTorch (часть 3)

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

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

Чтобы использовать механизм внимания, мы сначала вычисляем вектор внимания.

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



Последовательные модели глубоких нейронных сетей на PyTorch (часть 3)

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

Далее мы объясним, как все это сделать.



Подготовка данных

И снова подготовка аналогична предыдущей.

Сначала импортируем все необходимые модули.

  
   

import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchtext.legacy.datasets import Multi30k from torchtext.legacy.data import Field, BucketIterator import spacy import numpy as np import random import math import time

Установите случайные значения для воспроизводимости.



SEED = 1234 random.seed(SEED) np.random.seed(SEED) torch.manual_seed(SEED) torch.cuda.manual_seed(SEED) torch.backends.cudnn.deterministic = True

Теги: #Машинное обучение #python #nlp #seq2seq #seq2seq

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.