Trova le parole più simili all'array inizializzato in modo casuale

Aug 21 2020

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

1 gojomo Aug 21 2020 at 23:03

Il metodo KeyedVectorsdell'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.3positive

Nello specifico, questo dovrebbe funzionare:

similars = word2vec.wv.most_similar(positive=[vector,])
1 MatthieuBrucher Aug 21 2020 at 21:18

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)