J'ai un modèle Word2vec formé utilisant la bibliothèque Gensim de Python. J'ai une liste symbolisée comme ci-dessous. La taille du vocabulaire est 34 mais je ne donne que quelques exemples sur 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']
Modèle
model = gensim.models.Word2Vec(b,min_count=1,size=32)
print(model)
### prints: Word2Vec(vocab=34, size=32, alpha=0.025) ####
si j’essaie d’obtenir le score de similarité en faisant model['buy']
l’un des mots de la liste, j’obtiens le
KeyError: "Le mot" acheter "ne figure pas dans le vocabulaire"
Pouvez-vous me suggérer ce que je ne fais pas correctement et quels sont les moyens de vérifier le modèle qui peut être utilisé ultérieurement pour former PCA ou t-sne afin de visualiser des mots similaires formant un sujet? Je vous remercie.
Le premier paramètre passé à gensim.models.Word2Vec
est un itérable de phrases. Les phrases elles-mêmes sont une liste de mots. De la docs:
Initialisez le modèle à partir d'une variable iterable de
sentences
. Chaque phrase est un liste de mots (chaînes unicode) qui seront utilisés pour la formation.
Pour le moment, il pense que chaque mot de votre liste b
est une phrase et il utilise donc Word2Vec
pour chaque caractère de chaque mot, par opposition à chaque mot de votre b
. En ce moment tu peux faire:
model = gensim.models.Word2Vec(b,min_count=1,size=32)
print(model['a'])
array([ 7.42487283e-03, -5.65282721e-03, 1.28707094e-02, ... ]
Pour que cela fonctionne pour les mots, placez simplement b
dans une autre liste afin qu'il soit interprété correctement:
model = gensim.models.Word2Vec([b],min_count=1,size=32)
print(model['buy'])
array([-0.01331611, 0.00496594, -0.00165093, -0.01444992, 0.01393849, ... ]
À partir de la documentation, vous devez passer des phrases itérables afin que tout ce que vous transmettez à la fonction traite l’entrée comme un élément éditable. Vous ne passez donc ici que des mots; le vecteur Word2vec est donc pris en compte pour chaque caractère dans le corpus entier.
Donc, pour éviter ce problème, passez la liste des mots dans une liste.
Word2vec_model = gensim.models.Word2Vec([b],min_count=1,size=32)