如何"去嵌入" TensorFlow中的单词

时间:2016-10-17 19:22:38

标签: python tensorflow word2vec

我正在尝试在TensorFlow网站上关注Language Modeling的教程。我看到它运行,成本下降,它工作得很好,但我没有看到任何方法实际从模型中获得预测。我尝试按照this answer的说明操作,但是从session.run返回的张量是浮点值,如0.017842259,字典将字映射到整数,这样就不起作用了。

如何从张量流模型中获得预测的单词?

编辑:我在搜索后找到了这个explanation,我只是不确定在这个例子的上下文中x和y是什么。他们似乎没有像在解释中那样使用与此示例相同的约定。

2 个答案:

答案 0 :(得分:1)

您提到的张量是loss,它定义了网络的培训方式。对于预测,您需要访问包含下一个单词概率的张量probabilities。如果这是分类问题,您只需argmax即可获得最高概率。但是,为了给较低概率的单词生成一个机会,经常使用某种样本。

编辑:我假设您使用的代码是this。在这种情况下,如果您查看第148行(logits),可以通过简单地将softmax函数应用于其中来转换为概率 - 如tensorflow网站中的伪代码所示。希望这会有所帮助。

答案 1 :(得分:0)

因此,经过一系列其他类似的帖子,我发现了这一点。首先,文档中解释的代码与GitHub存储库中的代码不同。当前代码的工作原理是使用内部数据初始化模型,而不是将数据传递给模型。

所以基本上要完成我想要做的事情,我将我的代码恢复为提交9274f5a(对于reader.py也是如此)。然后,我按照this post中的步骤操作,以获得probabilities函数中的run_epoch张量。另外,我按照this answervocabulary传递给我的main函数。从那里开始,我使用vocabulary = {v: k for k, v in vocabulary.items()}将dict反转并将其传递给run_epoch

最后,我们可以通过运行run_epochcurrent_word = vocabulary[np.argmax(prob, 1)]中获取预测的字词,其中prob是从session.run()返回的张量

编辑:恢复代码不应该是一个永久的解决方案,我绝对建议使用上面的@Prophecies答案来获得probabilities张量。但是,如果你想获得单词映射,你需要像我在这里那样传递词汇。