web-dev-qa-db-fra.com

Comment vérifier si une clé existe dans un modèle formé avec Word2vec ou non

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?

21
London guy

convertir le modèle en vecteurs avec 

Word_vectors = model.wv

alors nous pouvons utiliser 

if 'Word' in Word_vectors.vocab
11
rakaT

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

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.

1
London guy

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.

0
Prakhar Agarwal

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

0
Noman Dilawar