Ich verwende Code basierend auf der TensorFlow word2vec tutorial.Eine Matrix der Ähnlichkeitswerte zwischen allen Elementen in word2vec erhalten
Ich möchte eine Textdatei schreiben, die eine Matrix von Ähnlichkeitswerten zwischen jedem der Elemente des Datensatzes UND ihre entsprechenden Wort-Etiketten enthält.
Ich denke, speichert diesen Ähnlichkeitswert 'sim':
sim = similarity.eval()
als:
# 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 ist im Grunde ein unique_data_length x unique_data_length Objekt, das alle der Ähnlichkeitswerte anzeigt. Groß.
Ich möchte auch die Etiketten für jeden Ähnlichkeitswert erhalten.
z.B. wenn ich:
sim[i][j]
Dann, was ich und was ist j. Kann ich einfach tun: reverse_dictionary [i], um seinen wirklichen Wert zu bekommen? Ist es wirklich in dieser Reihenfolge gespeichert?
Im Tutorial, bekommen sie die schließt X Wörter in einem Validierungssatz:
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)
Die Linie, die mich hier wirklich verwirrt ist:
nearest = (-sim[i, :]).argsort()[1:top_k + 1]
Warum geht das Ausgangs die codierten Werte anstelle der Ähnlichkeitswerte?