Seq2Seq模型

在自然语言处理的很多应用中,输入和输出都可以是不固定长度的序列。以机器翻译为例,例如:

法语输入:Jane  visite  l’Afrique  en  septembre.(长度5)

英语输出:Jane  is  visiting  Africa  in  September.(长度6)

Seq2Seq就是处理这种输入和输出不固定长度问题的模型,全称Sequence to Sequence 模型,应用于机器翻译,语音识别,自动对话等应用。

模型本质上用到了两个循环神经网络(可以是传统RNN,LSTM和GRU等),分别叫做编码器和解码器。编码器用来分析输入序列,解码器用来生成新的输出序列。

两个循环神经网络结构是共同训练的。

 

Seq2Seq模型_第1张图片

上图左边是编码器,右边是解码器。

编码器:

编码器的作用是把一个不定长的输入序列变换成一个定长的上下文变量c,并在该背景变量中编码输入序列信息。常用的编码器是循环神经网络。

x_i为词嵌入向量。循环神经网路将上个时刻的隐状态h_{t-1}和当前时刻的词嵌入向量x_{t}作为输入转换为当前时刻的隐状态h_{t}

h_{t}=f(h_{t-1},x_{t})

然后,编码器通过将各个时间步的隐藏状态变换为上下文变量

c=q(h_{1},...h_{T})

当选择q(h_{1},...h_{T})=h_T时,上下文变量是输入序列最终时刻的隐藏状态h_t

以上描述的编码器是一个单向的循环神经网络,我们也可以使用双向循环神经网络构造编码器。

解码器:

编码器输出的上下文变量c编码了整个输入序列的信息。解码器使用另一个循环神经网络作为解码器。 在输出序列的时刻t′,解码器将上一时刻的输出y_{t'-1},上一时间步的隐藏状态s_{t'-1}和上下文变量c作为输入,变换为当前时刻的隐藏状态s_{t'}:

s_{t'}=g(y_{t'-1},c,s_{{t}'-1})

输出在接个softmax层输出y:

y_{t'} =Softmax(W_{so}s_t')

 

交叉熵损失函数:

最后最小化交叉熵损失函数来训练模型:

-\frac{1}{T{}'}\sum_{t'=1}^{T'}log(y_{t'}),其中T'为输出序列的长度

 

你可能感兴趣的:(nlp,深度学习)