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

2024-02-20

我已将 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(使用前将#替换为@)

TensorFlow embedding_attention_seq2seq 方法默认实现双向 RNN 编码器吗? 的相关文章

随机推荐