我已将 embedding_attention_seq2seq 模块用于机器翻译任务,如以下指定的教程中所述:
https://www.tensorflow.org/versions/master/tutorials/seq2seq/index.html https://www.tensorflow.org/versions/master/tutorials/seq2seq/index.html
In the seq2seq_model.py
在教程中指定模型,我注意到他们默认使用 GRUCell 如果use_lstm
被设定为false
在这些行中:
# 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 https://arxiv.org/pdf/1409.0473v7.pdf/如果编码器是双向的并且上下文化考虑到隐藏层参数,那么本教程指定的所实现的模型将具有更多的语义意义。 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
(第 210-228 行tf/python/ops/rnn.py
).
如果不是,它是否只是简单地获取普通 LSTM 编码器每个时间步长的隐藏层输出,从而将上下文限制为仅句子中之前出现过的单词?
这是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)