序列到序列学习在机器翻译中的应用
1. 编写Seq2Seq机器翻译程序
在构建简单的Seq2Seq机器翻译模型时,我们需要创建两个RNN模型,分别用于编码和解码。为了避免变量名冲突,我们引入了TensorFlow的variable_scope。以下是实现这两个RNN的代码:
with tf.variable_scope("enc"): F = tf.Variable(tf.random_normal((vfSz,embedSz),stddev=.1)) embs = tf.nn.embedding_lookup(F, encIn) embs = tf.nn.dropout(embs, keepPrb) cell = tf.contrib.rnn.GRUCell(rnnSz) initState = cell.zero_state(bSz, tf.float32) encOut, encState = tf.nn.dynamic_rnn(cell, embs, initial_state=initState) with tf.variable_scope("dec"): E = tf.Variable(tf.random_normal((veSz,embedSz),stddev=.1)) embs = tf.nn.embedding_lookup(E, decIn) embs = tf.nn.dropout(embs, keepPrb) cell