web-dev-qa-db-de.com

So prüfen Sie, ob in einem von Word2vec trainierten Modell ein Schlüssel vorhanden ist oder nicht

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?

21
London guy

konvertieren Sie das Modell in Vektoren mit 

Word_vectors = model.wv

dann können wir verwenden 

if 'Word' in Word_vectors.vocab
11
rakaT

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
27
Matt Fortier

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.

1
London guy

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.

0
Prakhar Agarwal

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

0
Noman Dilawar