我已将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编码器每个时间步的隐藏层输出,从而将上下文限制为仅出现在句子之前的句子中的单词?
最佳答案
所以我的问题是,embedding_attention_seq2seq是否默认实现了双向RNN编码器?
不,它没有实现双向RNN编码器。编码器的输出(用于建立注意力状态)构建在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
上(tf/python/ops/rnn.py
的第210-228行)。如果不是,是否仅采用普通LSTM编码器每个时间步的隐藏层输出,从而将上下文限制为仅出现在句子之前的句子中的单词?
没错
关于python - TensorFlow embedding_attention_seq2seq方法默认情况下是否实现双向RNN编码器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40044937/