3. Нейронный машинный перевод путем совместного обучения выравниванию и переводу В этом третьем посте о моделях последовательность-последовательность с использованием PyTorch и torchText мы реализуем модель из Нейронный машинный перевод: совместное обучение выравниванию и переводу .
Эта модель демонстрирует лучшую точность из трёх моделей (~27 по сравнению с ~34 у предыдущей модели).
Как и раньше, если визуальный формат поста вас не удовлетворит, то ниже приведены ссылки на английскую и русскую версии блокнота jupyter: Оригинальная версия ( Открыть блокнот Jupyter в Colab ) Русская версия ( Открыть блокнот Jupyter в Colab )
Введение
Напомним общую модель кодека-декодера:В предыдущей модели наша архитектура была спроектирована так, чтобы уменьшить «сжатие информации» за счет явной передачи вектора контекста в декодер на линейный уровень на каждом временном шаге вместе с передачей входного слова через уровень внедрения.
и со скрытым состоянием
.
Несмотря на то, что мы немного уменьшили сжатие информации, наш вектор контекста по-прежнему должен содержать всю информацию об исходном предложении.
Модель, реализованная в этом разделе, позволяет избежать такого сжатия, позволяя декодеру просматривать все исходное предложение через его скрытые состояния на каждом этапе декодирования! Как это стало возможным? Благодаря вашему вниманию .
Чтобы использовать механизм внимания, мы сначала вычисляем вектор внимания.
Каждый элемент вектора внимания находится в диапазоне от 0 до 1, а сумма элементов вектора равна 1. Затем мы вычисляем взвешенную сумму скрытых состояний исходного предложения, чтобы получить взвешенный исходный вектор.
Мы вычисляем новый взвешенный исходный вектор на каждом временном шаге во время декодирования, используя его в качестве входных данных для декодера 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
-
Сми: Twitter Пойдет На Масштабные Сокращения
19 Oct, 24 -
Очередные Скидки От Amazon На Сервисы Aws
19 Oct, 24 -
Процессы Linux В Человеческом Bash
19 Oct, 24 -
Не Можешь Увидеть Карму?!
19 Oct, 24 -
Самодельная Волшебная Доска За 1600 Рублей*
19 Oct, 24