我正在使用基于TensorFlow word2vec tutorial的代码。
我想编写一个文本文件,其中包含数据集的每个元素与其对应的单词标签之间的相似值矩阵。
我认为' sim'存储这些相似度值:
sim = similarity.eval()
as:
# Compute the cosine similarity between minibatch examples and all embeddings.
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)
sim基本上是unique_data_length x unique_data_length对象,它显示所有相似度值。大。
我想获得每个相似度值的标签。
e.g。如果我得到:
sim[i][j]
然后我是什么,什么是j。我可以这样做:reverse_dictionary [i]来获得真正的价值吗?它是否真的以这种方式存储?
在教程中,他们获得验证集中的关闭X字:
sim = similarity.eval()
for i in xrange(valid_size):
valid_word = reverse_dictionary[valid_examples[i]]
top_k = 8 # number of nearest neighbors
nearest = (-sim[i, :]).argsort()[1:top_k + 1]
log_str = "Nearest to %s:" % valid_word
for k in xrange(top_k):
close_word = reverse_dictionary[nearest[k]]
log_str = "%s %s," % (log_str, close_word)
print(log_str)
这里让我感到困惑的是:
nearest = (-sim[i, :]).argsort()[1:top_k + 1]
为什么输出编码值而不是相似值?
答案 0 :(得分:0)
据我所知,sim位置i(和j)代表i't元素,可以通过reverse_dictionary [i]来识别。