首页 > 解决方案 > 用于训练和推理的 TensorFlow 嵌入

问题描述

我正在尝试使用 tensorflow 编写一个简单的神经机器翻译。但是对于 tensorflow 上的嵌入的理解,我有点卡住了:

 dec_embeddings = tf.Variable(tf.random_uniform([target_vocab_size, decoding_embedding_size]))
 dec_embed_input = tf.nn.embedding_lookup(dec_embeddings, dec_input)

在哪种情况下我应该使用一个到另一个?

标签: tensorflownlpword-embeddingmachine-translation

解决方案


我想你来自这个seq2seq 教程。即使这个问题开始变老,我也会尝试为像我这样路过的人回答:

  • 第一个问题,我看了后面的源码tf.contrib.layers.embed_sequence,其实是 tf.nn.embedding_lookup的。所以它只是包装它,并tf.Variable(tf.random_uniform([target_vocab_size, decoding_embedding_size]))为您创建嵌入矩阵 ( )。尽管这很方便且不那么冗长,但使用embed_sequencethere 似乎并不是一种直接访问嵌入的方法。因此,如果您愿意,您必须使用相同的名称空间查询用作嵌入矩阵的内部变量。我不得不承认,上面教程中的代码令人困惑。我什至怀疑他在编码器和解码器中使用了不同的嵌入。
  • 对于第二个问题:
  • 我想这相当于使用序列长度或嵌入。
  • TrainingHelper不需要,因为embedding_lookup它只将输入转发到解码器,GreedyEmbeddingHelper确实将文件作为第一个输入,embedding_lookup文档中所述。

推荐阅读