seq2seq是根据一个输入序列x,来生成另一个输出序列y。seq2seq有很多的应用,例如机器翻译,文档摘取,问答系统以及语音识别等等。在翻译中,输入序列是待翻译的文本,输出序列是翻译后的文本;在问答系统中,输入序列是提出的问题,而输出序列是答案;在语音识别中输入序列是一段语音,输出序列是翻译后的文字。
RNN Encoder-Decoder模型
为了解决seq2seq问题,Cho等人提出了encoder-decoder模型,即编码-解码模型。编码就是将输入序列转化成一个固定长度的向量;解码就是将之前生成的固定向量再转化成输出序列。Cho等人在编码与解码时使用的都是RNN。编码时将输入序列输入到RNN中,生成各个时间的隐藏状态。
ht=f(ht−1,xt)
RNN中当前时间的隐藏状态是由上一时间的状态和当前时间输入决定的。获得了各个时间的隐藏状态后,将隐藏状态的信息汇总,生成最后的语义向量C。
C=q(h1,h2,h3,…,hTx)
一种简单的方法是将最后的隐藏层作为语义向量C
C=q(h1,h2,h3,…,hTx)=hTx
解码可以看做编码的逆过程。RNN用编码生成的语义向量C和之前已经生成的输出序列y1,y2,…yt−1来预测下一个输出的单词 yt