Trova le parole più simili all'array inizializzato in modo casuale
Utilizzando il pacchetto Gensim, ho addestrato un modello word2vec sul corpus con cui sto lavorando come segue:
word2vec = Word2Vec(all_words, min_count = 3, size = 512, sg = 1)
Usando Numpy, ho inizializzato un array casuale con le stesse dimensioni:
vector = (rand(512)-0.5) *20
Ora, vorrei trovare le parole di word2vec che sono più simili al vettore casuale che ho inizializzato.
Per le parole in word2vec, puoi eseguire:
word2vec.most_similar('word')
E l'output è un elenco con le parole più simili e la relativa distanza.
Vorrei ottenere un output simile per il mio array inizializzato.
Tuttavia, quando corro:
word2vec.most_similar(vector)
Ottengo il seguente errore:
Traceback (most recent call last):
File "<ipython-input-297-3815cf183d05>", line 1, in <module>
word2vec.most_similar(vector)
File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\utils.py", line 1461, in new_func1
return func(*args, **kwargs)
File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\models\base_any2vec.py", line 1383, in most_similar
return self.wv.most_similar(positive, negative, topn, restrict_vocab, indexer)
File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\models\keyedvectors.py", line 549, in most_similar
for word, weight in positive + negative:
TypeError: cannot unpack non-iterable numpy.float64 object
Cosa posso fare per superare questo errore e trovare le parole più simili ai miei array?
Ho controllato questa e questa pagina. Tuttavia, non mi è chiaro come risolvere il mio problema con questi suggerimenti.
Risposte
Il metodo KeyedVectors
dell'interfaccia di Gensim può prendere vettori grezzi come obiettivo, ma affinché il suo rilevamento del tipo di argomento corrente (almeno attraverso ) non confonda un singolo vettore per un elenco di chiavi, è necessario fornirlo esplicitamente come uno membro di un elenco di elementi per il parametro denominato ..most_similar()
gensim-3.8.3
positive
Nello specifico, questo dovrebbe funzionare:
similars = word2vec.wv.most_similar(positive=[vector,])
Stai cercando di vedere se un numero in virgola mobile è simile a una stringa e questo non funziona ( cannot unpack non-iterable numpy.float64 object
).
Quello che devi fare è generare correttamente stringhe casuali , non numeri in virgola mobile casuali. Fatto ciò, il tuo codice funzionerà. Vedi anche la documentazione che afferma list of str
(https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.most_similar)