首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有负相似度的TensorFlow食谱跳过语法模型

具有负相似度的TensorFlow食谱跳过语法模型
EN

Stack Overflow用户
提问于 2018-02-10 11:51:10
回答 1查看 197关注 0票数 2

我现在正在浏览谷歌的TensorFlow cookbook

这是skip-gram模型的TensorFlow实现。

在第272行,作者决定将相似度矩阵(-sim[j, :])负相乘。我有点困惑,为什么我们需要在跳过模型中负相乘相似度矩阵。有什么想法吗?

代码语言:javascript
复制
for j in range(len(valid_words)):
        valid_word = word_dictionary_rev[valid_examples[j]]
        top_k = 5 # number of nearest neighbors
        **nearest = (-sim[j, :]).argsort()[1:top_k+1]**
        log_str = "Nearest to {}:".format(valid_word)
        for k in range(top_k):
            close_word = word_dictionary_rev[nearest[k]]
            score = sim[j,nearest[k]]
            log_str = "%s %s," % (log_str, close_word)
        print(log_str)
EN

回答 1

Stack Overflow用户

发布于 2018-02-10 17:03:12

让我们一步一步地来看这个例子:

首先,这里有一个similarity张量。它被定义为嵌入向量之间成对余弦相似度的矩阵:词之间的余弦相似度norm = tf.sqrt(tf.reduce_sum(tf.square( embeddings ),1,keep_dims=True)) normalized_embeddings =embeddings/ norm valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings,valid_dataset) similarity= tf.matmul(valid_embeddings,normalized_embeddings,transpose_b=True)矩阵是为所有验证词和所有字典词计算的,并包含[-1,1]之间的数字。在此示例中,单词大小为10000,并且验证集由5个单词组成,因此数值矩阵的形状是(5, 10000).

  • This矩阵被评估为similarity数组sim

sim =sess.run(相似度,feed_dict=feed_dict)

因此,sim.shape = (5, 10000)也是如此。

  • 下一步,这一行:

最近的= (-simj,:).argsort()1:top_k+1

..。计算与当前单词j最接近的单词索引top_k。看一看numpy.argsort方法。求反只是对in descending order进行排序的一种愚蠢的方式。如果没有减号,结果将是字典中top_k最远的单词,这并不表示word2vec已经学到了任何东西。

还要注意,范围是[1:top_k+1],而不是[:top_k],因为第0个字是当前验证字本身。印刷最接近“爱”的词是没有意义的.“爱”

这一行的结果是一个类似[ 73 1684 850 1912 326]的数组,它对应于单词sex, fine, youd, trying, execution.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48717029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档