J'ai formé un modèle Word2vec en utilisant un corpus de documents avec Gensim. Une fois que le modèle s’entraîne, j’écris le code suivant pour obtenir le vecteur de caractéristiques brutes d’un mot dit "view".
myModel["view"]
Cependant, j'obtiens une erreur KeyError pour le mot, probablement parce qu'elle n'existe pas en tant que clé dans la liste des clés indexées par Word2vec. Comment puis-je vérifier si une clé existe dans l'index avant d'essayer d'obtenir le vecteur de caractéristiques brutes?
convertir le modèle en vecteurs avec
Word_vectors = model.wv
alors nous pouvons utiliser
if 'Word' in Word_vectors.vocab
Word2Vec fournit également un membre 'vocab', auquel vous pouvez accéder directement.
En utilisant une approche pythonistique:
if Word in w2v_model.vocab:
# Do something
EDITDepuis la version 2.0 de gensim, l'API pour Word2Vec a changé. Pour accéder au vocabulaire, vous devez maintenant utiliser ceci:
if Word in w2v_model.wv.vocab:
# Do something
EDIT 2 L'attribut 'wv' est obsolète et sera complètement supprimé de gensim 4.0.0 Revenons maintenant à la réponse originale de OP:
if Word in w2v_model.vocab:
# Do something
Répondre à ma propre question ici.
Word2Vec fournit une méthode nommée contient ('vue') qui renvoie True ou False selon que le mot correspondant a été indexé ou non.
J'utilise généralement un filtre:
for doc in labeled_corpus:
words = filter(lambda x: x in model.vocab, doc.words)
Il s'agit d'une méthode simple pour contourner KeyError sur des mots non vus.
Hé, je sais que je commence à être en retard, mais voici un morceau de code capable de gérer ce problème. Je l’utilise moi-même dans mon code et cela fonctionne comme un charme :)
size = 300 #Word vector size
Word = 'food' #Word token
try:
wordVector = model[Word].reshape((1, size))
except KeyError:
print "not found! ", Word
NOTE: J'utilise la bibliothèque Gensim python pour les modèles Word2vec