2017-05-03 1 views
0

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?

Antwort

0

Nach bestem Wissen stellt die Sim-Position i (und j) das i't-Element dar, das durch reverse_dictionary [i] identifiziert werden kann.

Verwandte Themen