Numpy 具有负相似性的TensorFlow cookbook-skip-gram模型

Numpy 具有负相似性的TensorFlow cookbook-skip-gram模型,numpy,tensorflow,machine-learning,nlp,word2vec,Numpy,Tensorflow,Machine Learning,Nlp,Word2vec,我目前正在浏览谷歌的: 这是skip gram模型的TensorFlow实现 在第272行,作者决定将相似性矩阵相乘(-sim[j,:])。我有点困惑,为什么我们需要在skip-gram模型中负相乘相似矩阵。有什么想法吗 for j in range(len(valid_words)): valid_word = word_dictionary_rev[valid_examples[j]] top_k = 5 # number of nearest neighbo

我目前正在浏览谷歌的:

这是skip gram模型的TensorFlow实现

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

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)

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

  • 首先,有一个
    相似性
    张量。它被定义为嵌入向量之间的成对余弦相似性矩阵:

    词与词之间的余弦相似性 norm=tf.sqrt(tf.reduce_sum(tf.square(嵌入),1,keep_dims=True)) 标准化嵌入=嵌入/规范 有效的嵌入=tf.nn.embedding\u查找(标准化的嵌入,有效的数据集) 相似性=tf.matmul(有效嵌入、规范化嵌入、转置b=True) 计算所有验证词和所有字典词的矩阵,并包含介于
    [-1,1]
    之间的数字。在本例中,vocab大小为10000,验证集由5个单词组成,因此
    相似性
    矩阵的形状为
    (51000)

  • 将此矩阵计算为numpy数组
    sim

    sim=sess.run(相似性,feed\u dict=feed\u dict)
    
    因此,
    sim.shape=(51000)

  • 接下来,这一行:

    nearest=(-sim[j,:]).argsort()[1:top_k+1]
    
    。。。计算与当前单词
    j
    最近的单词索引。看看这个方法。否定只是一种简单的排序方式。如果没有减号,结果将是距离词典最远的单词,这并不表示word2vec学到了任何东西

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

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