Ich habe ein Word2vec-Modell mit einem Dokumentenkorpus mit Gensim trainiert. Sobald das Modell trainiert ist, schreibe ich den folgenden Code, um den reinen Merkmalsvektor eines Wortes mit "view" zu erhalten.
myModel["view"]
Ich erhalte jedoch einen KeyError für das Word, der wahrscheinlich darauf zurückzuführen ist, dass dieser Schlüssel nicht in der Liste der von Word2vec indizierten Schlüssel vorhanden ist. Wie kann ich überprüfen, ob ein Schlüssel im Index vorhanden ist, bevor Sie versuchen, den Rohmerkmalvektor zu erhalten?
konvertieren Sie das Modell in Vektoren mit
Word_vectors = model.wv
dann können wir verwenden
if 'Word' in Word_vectors.vocab
Word2Vec bietet auch ein Vocab-Mitglied, auf das Sie direkt zugreifen können.
Mit einem pythonistischen Ansatz:
if Word in w2v_model.vocab:
# Do something
EDITSeit gensim 2.0 hat sich die API für Word2Vec geändert. Um auf das Vokabular zuzugreifen, sollten Sie jetzt Folgendes verwenden:
if Word in w2v_model.wv.vocab:
# Do something
EDIT 2 Das Attribut 'wv' ist veraltet und wird in gensim 4.0.0 entfernt. Nun geht es zurück zur ursprünglichen Antwort von OP:
if Word in w2v_model.vocab:
# Do something
Meine eigene Frage hier beantworten.
Word2Vec stellt eine Methode mit dem Namen contains ('view') bereit, die True oder False zurückgibt, je nachdem, ob das entsprechende Word indiziert wurde oder nicht.
Ich benutze generell einen Filter:
for doc in labeled_corpus:
words = filter(lambda x: x in model.vocab, doc.words)
Dies ist eine einfache Methode, um den KeyError bei unsichtbaren Wörtern zu umgehen.
Hey, ich weiß, dass dieser Beitrag zu spät kommt, aber hier ist ein Stück Code, mit dem dieses Problem gut gelöst werden kann. Ich selbst benutze es in meinem Code und es funktioniert wie ein Zauber :)
size = 300 #Word vector size
Word = 'food' #Word token
try:
wordVector = model[Word].reshape((1, size))
except KeyError:
print "not found! ", Word
HINWEIS: Ich verwende die Python Gensim Library für Word2vec-Modelle