Seq2Seq Model(序列到序列模型)

Seq2Seq 是一种循环神经网络的变种,包括编码器 (Encoder) 和解码器 (Decoder) 两部分。Seq2Seq 是自然语言处理中的一种重要模型,可以用于机器翻译、对话系统、自动文摘。

1 Seq2Seq模型结构

我们提到在Seq2Seq的模型中包括了Encoder和Decoder两个部分。在下文中,我们的Encoder和Decoder均使用LSTM模型来进行编码和解码的工作。

Seq2Seq Model(序列到序列模型)_第1张图片

 上图所展示的是Seq2Seq的模型结构图。

我们可以看到,我们的Source通过Embedding层后,进入了循环层(这里们是LSTM)。进过多次Encoder的循环层以后,将其输出输入Eecoder中。最后再由Decoder进行一个输出。

1.1 Seq2Seq的模型过程

在上面我们大概讲解了Seq2Seq大致的模型流程图。在1.1部分,我们主要讲一下Seq2Seq模型的运作过程。

以翻译为例。一开始,我们需要将需要翻译的句子放入Encoder中(这里就是Source),随后Sources经历了多层的循环网络以后,会输出最后一层的state(h,c)。而这输出的最后一层的state(h,c)便是Decoder的输入,成为了Decoder的初始的一个状态。

Seq2Seq Model(序列到序列模型)_第2张图片

 上图所展示的是Decoder的运行图。

我们可以看到,在Decoder输出的是翻译后的句子。

在训练的过程中,Decoder输出一个是Encoder的输出,一个则是正确的翻译后句子。首先我们会输入一个输入的符号“\t”,将其放到Decoder的LSTM中,得到输出p,随后我们对p以及正确的单词y做CrossEntropy得到loss。有了loss以后便可以进行反向的传播,更新参数。

Seq2Seq Model(序列到序列模型)_第3张图片

上图所展示的是Decoder训练的运行图。

同上面的运算类似,第二次我们输入“\tm”,从而得到了对于下一个字符的预测p。再对p和y做CrossEntropy得到loss,有了loss以后便可以进行反向的传播,更新参数。

 而在真正预测的时候,Seq2Seq的模型运行过程会有些许的变化,具体表现在Decoder的输入,并不是训练时的正确句子,还是上一次Decoder输出的结果作为这一次Decoder的输入,并会将Decoder的输出进行记录。

Seq2Seq Model(序列到序列模型)_第4张图片

Seq2Seq Model(序列到序列模型)_第5张图片

 上图所展示的是Decoder预测的运行图。

从上图我们可以看到,先输入“\t”,得到新的输出状态(h_1,c_1),再得到“m”,随后我们将“m”进行记录。然后将“m”输入Decoder中得到新的输出状态(h_2,c_2),得到“a”,并记录“a”。重复这个过程直到结束为止。

 1.2 Seq2Seq模型的改进

1.在Encoder中将循环网络做成双向循环网络。

2.使用关于词的tokenization

3.多任务学习:训练时可以将翻译句子改成英语句子,做英语翻德语的同时也做英语翻英语的任务,从而使Encoder做的更好,同样也可以做其他的任务。(注意这里是增加Decoder,Encoder不改变)

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