2016-06-14 53 views
7

Utilizzando la libreria gensim.models.Word2Vec, è possibile fornire un modello e una "parola" per cui si desidera trovare l'elenco delle parole più simili :Ottieni le parole più simili, dato il vettore della parola (non la parola stessa)

model = gensim.models.Word2Vec.load_word2vec_format(model_file, binary=True) 
model.most_similar(positive=[WORD], topn=N) 

mi chiedo se c'è la possibilità di dare al sistema come input il modello e un "vettore", e chiedere al sistema di tornare alle parole migliori simili (che i loro vettori è molto vicino al dato vettore). Qualcosa di simile a:

model.most_similar(positive=[VECTOR], topn=N) 

ho bisogno di questa funzionalità di un ambiente bilingue, in cui ho 2 modelli (inglese e tedesco), così come alcune parole in inglese per il quale ho bisogno di trovare i loro più simili candidati tedeschi. Quello che voglio fare è quello di ottenere il vettore di ogni parola inglese dal modello inglese:

model_EN = gensim.models.Word2Vec.load_word2vec_format(model_file_EN, binary=True) 
vector_w_en=model_EN[WORD_EN] 

e quindi interrogare il modello tedesco con questi vettori.

model_DE = gensim.models.Word2Vec.load_word2vec_format(model_file_DE, binary=True) 
model_DE.most_similar(positive=[vector_w_en], topn=N) 

L'ho implementato in C utilizzando la funzione di distanza originale nel pacchetto word2vec. Ma ora ho bisogno che sia in python per poterlo integrare con gli altri miei script.

Sapete se esiste già un metodo nella libreria gensim.models.Word2Vec o in altre librerie simili che esegue questa operazione? Devo implementarlo da solo?

+0

Vuol 'most_similar (..)' Riportare il punteggio anche a voi? Sto immaginando una funzione personalizzata che scrivi, che chiama 'most_similar' per ogni parola nel vettore, aggiunge i risultati da ALL alla stessa lista e poi ordina su punteggio e ritorni. – nbryans

+0

Grazie nobili. Se non esiste un metodo esistente che lo faccia, devo implementarlo come segue: per ogni parola nel vocabolario prendi il vettore corrispondente dal modello. Calcola la somiglianza del coseno del vettore di input e quella restituita. E quindi restituire la parte superiore più simile. Ma, pensavo che un tale metodo potesse esistere; che sembra non. – amin

risposta

6

Il metodo similar_by_vector restituisce i-N top parole più simili di vettore:

similar_by_vector(vector, topn=10, restrict_vocab=None)