转载:https://zhuanlan.zhihu.com/p/57155059
Seq2Seq模型简介
目前Seq2Seq模型在机器翻译,语音识别,文本摘要,问答系统等领域取得了巨大的成功。如图1所示,Seq2Seq其实就是Encoder-Decoder结构的网络,它的输入是一个序列,输出也是一个序列。在Encoder中,将序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成我们想要的序列输出出来。
如图2所示,Encoder和Decoder一般都是RNN,通常为LSTM或者GRU,图中每一个方格都为一个RNN单元。
在Encoder中,“欢迎/来/北京”这些词转换成词向量,也就是Embedding,我们用 Vi来表示,与上一时刻的隐状态 h i-1 按照时间顺序进行输入,每一个时刻输出一个隐状态 hi ,我们可以用函数 f 表达RNN隐藏层的变换:hi= f(vi,hi-1)。假设有t个词,最终通过Encoder自定义函数 q 将各时刻的隐状态变换为向量 c : c=q(h0,...,ht) ,这个 c 就相当于从“欢迎/来/北京”这几个单词中提炼出来的大概意思一样,包含了这句话的含义。
Decoder的每一时刻的输入为Eecoder输出的 c 和Decoder前一时刻解码的输出 Si-1,还有前一时刻预测的词的向量 Ei-1 (如果是预测第一个词的话,此时输入的词向量为“_GO”的词向量,标志着解码的开始),我们可以用函数 g
表达解码器隐藏层变换: Si=g(c,Si-1,Ei-1)。直到解码解出“_EOS”,标志着解码的结束。
一定要看!!! 帮你透彻理解seq2seq