【问题标题】:How do "de-embed" words in TensorFlow如何在 TensorFlow 中“去嵌入”单词
【发布时间】:2016-10-17 19:22:37
【问题描述】:

我正在尝试按照 TensorFlow 网站上的 Language Modeling 教程进行操作。我看到它运行并且成本下降并且效果很好,但是我看不到任何方法可以从模型中实际获得预测。我尝试按照this answer 处的说明进行操作,但从 session.run 返回的张量是浮点值,例如 0.017842259,并且字典将单词映射到整数,因此不起作用。

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

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

【问题讨论】:

    标签: python tensorflow word2vec


    【解决方案1】:

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

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

    【讨论】:

    • 不是 100% 确定你的意思。 session.run 的结果是一个 3 元素列表,其元素如下: cost:我假设的 float32 是模型的平均成本,eval_op:用于评估模型的函数,以及 final_state:LSTMStateTuples 列表
    • 其中哪一项包含概率?
    • 还要提一提,这些 LSTMStateTuples 包含负值,所以我假设它们不是概率(但我也不确定某些东西会如何产生负损失)
    • 它不一定是网络的输出之一。在您链接的示例中,有一个概率张量。您可以访问该张量 multiple ways 的值
    • 从您的编辑中,它谈到了简单的 MNIST 示例,我觉得首先了解 tensorflow 的基本机制会对您有很大帮助。 Tensorflow 有非常好的文档。
    【解决方案2】:

    所以在浏览了一堆其他类似的帖子后,我发现了这一点。首先,文档中解释的代码与 GitHub 存储库上的代码不一样。当前代码的工作原理是使用内部数据初始化模型,而不是在模型运行时将数据传递给模型。

    所以基本上为了完成我想要做的事情,我将我的代码还原为提交9274f5a(对 reader.py 也做同样的事情)。然后我按照this post 中的步骤在我的run_epoch 函数中获取probabilities 张量。此外,我跟随this answervocabulary 传递给我的main 函数。从那里,我使用 vocabulary = {v: k for k, v in vocabulary.items()} 反转 dict 并将其传递给 run_epoch

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多