it-swarm.com.de

Gensim: KeyError: "Wort nicht im Wortschatz"

Ich habe ein geschultes Word2vec-Modell mit Pythons Gensim Library. Ich habe eine tokenisierte Liste wie unten. Die Vokabelngröße ist 34, aber ich gebe nur wenige von 34:

b = ['let',
 'know',
 'buy',
 'someth',
 'featur',
 'mashabl',
 'might',
 'earn',
 'affili',
 'commiss',
 'fifti',
 'year',
 'ago',
 'graduat',
 '21yearold',
 'dustin',
 'hoffman',
 'pull',
 'asid',
 'given',
 'one',
 'piec',
 'unsolicit',
 'advic',
 'percent',
 'buy']

Modell

model = gensim.models.Word2Vec(b,min_count=1,size=32)
print(model) 
### prints: Word2Vec(vocab=34, size=32, alpha=0.025) ####

wenn ich versuche, die Ähnlichkeitswertung durch Ausführen von model['buy'] eines der Wörter in der Liste zu erhalten, erhalte ich die 

KeyError: "Wort" kaufen "nicht im Wortschatz"

Können Sie mir vorschlagen, was ich falsch mache und wie Sie das Modell überprüfen können, um PCA oder T-sne zu trainieren, um ähnliche Wörter zu visualisieren, die ein Thema bilden. Vielen Dank. 

7

Der erste an gensim.models.Word2Vec übergebene Parameter ist eine iterierbare Menge von Sätzen. Sätze selbst sind eine Liste von Wörtern. Aus den Dokumenten:

Initialisieren Sie das Modell mit einer iterierbaren Variable von sentences. Jeder Satz ist ein Liste der Wörter (Unicode-Zeichenfolgen), die für das Training verwendet werden.

Im Moment glaubt es, dass jedes Wort in Ihrer Liste b ein Satz ist, und so macht es Word2Vec für jedes Zeichen in jedem Wort und nicht für jedes Wort in Ihrer b. Im Moment können Sie:

model = gensim.models.Word2Vec(b,min_count=1,size=32)

print(model['a'])
array([  7.42487283e-03,  -5.65282721e-03,   1.28707094e-02, ... ]

Damit es für Wörter funktioniert, wickeln Sie einfach b in eine andere Liste ein, damit es richtig interpretiert wird:

model = gensim.models.Word2Vec([b],min_count=1,size=32)

print(model['buy'])
array([-0.01331611,  0.00496594, -0.00165093, -0.01444992,  0.01393849, ... ]
16
bunji

Von den Dokumenten aus müssen Sie iterierbare Sätze übergeben, sodass Sie die Funktion, die Sie als iterierbar behandeln, an alle Funktionen übergeben, so dass Sie hier nur Wörter übergeben, so dass der Word2vec-Vektor für jeden Charakter im gesamten Korpus zählt.

Um dieses Problem zu vermeiden, übergeben Sie die Liste der Wörter in einer Liste.

Word2vec_model = gensim.models.Word2Vec([b],min_count=1,size=32)
1
Ravi G