TensorFlow embedding_attention_seq2seq方法默认是否实现双向RNN编码器?

时间:2016-10-14 13:53:53

标签: python tensorflow

我已将embedding_attention_seq2seq模块用于机器翻译任务,如以下指定的教程中所述:

https://www.tensorflow.org/versions/master/tutorials/seq2seq/index.html

在教程中指定模型的seq2seq_model.py中,我注意到如果use_lstm在这些行中设置为false,则默认使用GRUCell:

# Create the internal multi-layer cell for our RNN.
single_cell = tf.nn.rnn_cell.GRUCell(size)
if use_lstm:
  single_cell = tf.nn.rnn_cell.BasicLSTMCell(size)
cell = single_cell
if num_layers > 1:
  cell = tf.nn.rnn_cell.MultiRNNCell([single_cell] * num_layers)

现在,如果编码器是双向的,并且上下文化同时考虑了隐藏层参数,那么教程指定作为模型实现的文章here中描述的注意机制具有更多的语义意义。 seq2seq_model文件没有提到任何双向组件。

所以我的问题是,embedding_attention_seq2seq默认是否实现了双向RNN编码器?

如果没有,它是否只是简单地采用普通LSTM编码器的每个时间步的隐藏层输出,从而将上下文仅限于句子中之前发生的单词?

1 个答案:

答案 0 :(得分:3)

  

所以我的问题是,embedding_attention_seq2seq默认是否实现了双向RNN编码器?

不,它没有实现双向RNN编码器。编码器的输出(用于建立注意状态)是在columns: [ { field: "field1", title: "Field 1", locked: true, width:200 }, { field: "field2", title: "Field 2", width: 1000 } ] 的前几行内构建的:

embedding_attention_seq2seq

第一行用嵌入包裹单元格。第二个向前# Encoder. encoder_cell = rnn_cell.EmbeddingWrapper( cell, embedding_classes=num_encoder_symbols, embedding_size=embedding_size) encoder_outputs, encoder_state = rnn.rnn( encoder_cell, encoder_inputs, dtype=dtype) 向前encoder_cell encoder_inputs的第210-228行。

  

如果没有,它是否只是简单地采用普通LSTM编码器的每个时间步的隐藏层输出,从而将上下文仅限于句子中之前发生的单词?

那是对的。