2015-09-24 23 views
8

Ho appena iniziato a utilizzare Word2vec e mi chiedevo come possiamo trovare la parola più vicina a un vettore. Ho questo vettore che è il vettore di media per un insieme di vettori:Come trovare la parola più vicina a un vettore utilizzando word2vec

array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32) 

Esiste un modo dritto in avanti per trovare la parola più simile nei miei dati di allenamento a questo vettore?

Oppure l'unica soluzione è calcolare la somiglianza del coseno tra questo vettore ei vettori di ciascuna parola nei miei dati di allenamento, quindi selezionare quello più vicino?

Grazie.

risposta

17

Per gensim attuazione word2vec c'è most_similar() funzione che permette di trovare le parole semanticamente vicino a una parola data:

>>> model.most_similar(positive=['woman', 'king'], negative=['man']) 
[('queen', 0.50882536), ...] 

o alla sua rappresentazione vettore:

>>> your_word_vector = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32) 
>>> model.most_similar(positive=[your_word_vector], topn=1)) 

dove topn definisce il desiderato numero di risultati restituiti.

Tuttavia, la mia sensazione è che la funzione non esattamente la stessa che avete proposto, cioè calcola similarità del coseno per il vettore dato e l'altro vettore nel dizionario (che è abbastanza inefficiente ...)

4

Don' t dimenticare di aggiungere array vuoto con parole negative in most_similar funzione:

import numpy as np 
model_word_vector = np.array(my_vector, dtype='f') 
topn = 20; 
most_similar_words = model.most_similar([ model_word_vector ], [], topn)