(注意本文的attention和decoder模块与参考文献略有不同)
Seq2Seq模型架构:利用Encoder-Decoder架构,结合attention,对文本摘要生成任务进行建模和训练。Encoder和Decoder中,分别使用GRU结构来抽取文本特征。
Encoder采用传统GRU结构,输入的文本id数据经过embedding处理后,进入双层GRU网络中。GRU输出的数据有2两个,一个是编码结果output,维度为[batch_size, seq_len, hidden_size],表示为每个输入数据的hidden_state; 第二个输出hidden的维度为[num_layers, batch_size, hidden_size],表示为最终时间步的每层GRU网络的hidden_state,这里取最后一层输出。
Decoder的作用,是将每个时间步的decoder输入,经过与encoder output和previous hidden state相互作用后,生成当前时间步的decoder输出。它的流程大致分为4个步骤:
1. 每个时间步的dec_input,经过Embedding处理,得到维度为[batch_size,1,embedd_size]的输入向量embedded。
2. 上一个时间步的hidden_state与enc_output进行attention操作,得到有注意力的语义张量context_vect ,此时context_vect 综合了上一个时间步的信息以及Encoder的上下文信息。
3. 将context_vect与embedded拼接后,作为输入送入GRU网络中,得到输出张量output
4. 将这个output送入一个全连接层,将张量映射到词表上。得到当前时间步的最终输出。