预备工作
# !pip install http://download.pytorch.org/whl/cu80/torch-0.3.0.post4-cp36-cp36m-linux_x86_64.whl numpy matplotlib spacy torchtext seaborn
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import math, copy, time
from torch.autograd import Variable
import matplotlib.pyplot as plt
import seaborn
seaborn.set_context(context="talk")
%matplotlib inline
背景
大部分序列到序列(seq2seq)模型都使用编码器-解码器结构 (引用)。编码器把一个输入序列( x 1 , . . . x n ) (x_{1},...x_{n})(x
1
,...x
n
)映射到一个连续的表示z = ( z 1 , . . . z n ) z=(z_{1},...z_{n})z=(z
1
,...z
n
)中。解码器对z中的每个元素,生成输出序列( y 1 , . . . y m ) (y_{1},...y_{m})(y
1
,...y
m
)。解码器一个时间步生成一个输出。在每一步中,模型都是自回归的(引用),在生成下一个结果时,会将先前生成的结果加入输入序列来一起预测。现在我们先构建一个EncoderD