Seq2Seq模型介绍以及Pytorch版本代码详解
一、Seq2Seq模型的概述
Seq2Seq是一种循环神经网络的变种,是一种端到端的模型,包括 Encoder编码器和 Decoder解码器部分,在nlp任务中是一种重要的模型,在翻译,文本自动摘要生成和机器人自动问答以及一些回归预测任务上有着广泛的运用。
Seq2Seq其实就是
Encoder-Decoder
结构的网络,它的输入是一个序列,输出也是一个序列。在Encoder编码中,将序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成我们想要的序列输出出来
Encoder和Decoder一般都是RNN,通常为LSTM或者GRU
二、Seq2Seq模型的结构
2.1 模型结构
针对目前
RNN网络
来说常见的任务来分,主要是有三种情况;
(1).
多对多, N vs N
, 包括N个输入和N个输出,输入和输出序列中长度是相等的,适用于词性标注任务和语言模型训练任务
(2).
一对多, 1 vs N,
包括1个输入和N个输出,一般的是输入X传给第一个神经元,或者是同样传递给所有的神经元,适用于,图像生成文字,小说、影视类型 生成相应的小说
(3).
多对一, N vs 1,
有 N 个输入
x
1,
x
2, …,
x
N,和一个
输出
y,适用于,序列分类任务,一段语言,一段文字,情感分析等
**常见的三种RNN结构,对于输入和输出都是有一定长度限制,但是在实际情况中,长度是不固定的,比如,机器翻译中,翻译前后的句子的长度是不一样的,对话系统中,问句和答案的长度也是不一致的,进而 一种新的 RNN结构 Seq2Seq的模型诞生了。包括两个部分,
Encoder**
用于编码序列的信息,将任意长度的序列信息编码到一个向量
c
里。而
Decoder
是解码器,解码器得到上下文信息向量
c
之后可以将信息解码,并输出为序列。Seq2Seq 模型结构有很多种,下面是几种比较常见的:
(1).
(2).
(3).
三种seq2seq的模型结构中的 Encoder 编码层都是一样的,主要的是 Decoder 不一样
2.2 编码器Encoder 和解码器 Decoder
1. 编码器Encoder