如果你没有学习过LSTM的知识,那么你可以参考下笔者的前面的一篇文章:深度学习之RNN(循环神经网络)
一 什么是Seq2Seq?
所谓Seq2Seq(Sequence to Sequence), 就是一种能够根据给定的序列,通过特定的方法生成另一个序列的方法。它被提出于2014年,最早由两篇文章独立地阐述了它主要思想,分别是Google Brain团队的《Sequence to Sequence Learning with Neural Networks》和Yoshua Bengio团队的《Learning Phrase Representation using RNN Encoder-Decoder for Statistical Machine Translation》。这两篇文章不谋而合地提出了相似的解决思路,Seq2Seq由此产生。
举个简单的例子,当我们使用机器翻译时:输入(Hello) --->输出(你好)。再比如在人机对话中,我们问机器:“你是谁?”,机器会返回答案“我是某某某”。
机器翻译、人机对话、聊天机器人等等,这些都是应用在当今社会都或多或少的运用到了我们这里所说的Seq2Seq。
图1 邮件对话
如图1所示为一个简单的邮件对话的场景。
图中的 Encoder 和 Decoder 都只展示了一层的普通 LSTMCell(为防止读者误解,这里需要说明的是Seq2Seq使用的cell不仅限于LSTM)。从上面的结构中,我们可以看到,整个模型结构还是非常简单的。 EncoderCell 最后一个时刻的状态就是中间语义向量 C,它将作为 DecoderCell 的初始状态。然后在 DecoderCell 中,每个时刻的输出将会作为下一个时刻的输入。以此类推,直到 DecoderCell 某个时刻预测输出特殊符号 <END> 结束。
这里我们将Encoder阶段叫做编码阶段。对应的Decoder阶段