看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对。 --------(思考:对很通用,X是一个问句,Y是答案;X是一个句子,Y是抽取的关系三元组;X是汉语句子,Y是汉语句子的英文翻译。等等),我们的目标是给定输入句子X,期待通过Encoder-Decoder框架来生成目标句子Y。X和Y可以是同一种语言,也可以是两种不同的语言。而X和Y分别由各自的单词序列构成:
Encoder顾名思义就是对输入句子X进行编码,将输入句子通过非线性变换转化为中间语义表示C:
对于解码器Decoder来说,其任务是根据句子X的中间语义表示C和之前已经生成的历史信息y1,y2….yi-1来生成i时刻要生成的单词yi :
每个yi都依次这么产生,那么看起来就是整个系统根据输入句子X生成了目标句子Y。 ------(思考:其实这里的Encoder-Decoder是一个序列到序列的模型seq2seq,这个模型是对顺序有依赖的。)
下图展示encoding 和decoding的模型结构,在时间步为t的时候。此刻attention layer保存着encodering看到的所有信息——即encoding的每一步输出。在decoding阶段,解码器的 t 时刻的隐藏状态被当作query,encoder的每个时间步的hidden states作为key和value进行attention聚合. Attetion model的输出当作成上下文信息context vector,并与解码器输入 Dt 拼接起来一起送到解码器:
下图展示了seq2seq机制的所以层的关系,下面展示了encoder和decoder的layer结构