Python >> Tutoriel Python >  >> Python Tag >> Gensim

Assurez-vous que le gensim génère le même modèle Word2Vec pour différentes exécutions sur les mêmes données

Oui, la graine aléatoire par défaut est fixée à 1 , comme décrit par l'auteur dans https://radimrehurek.com/gensim/models/word2vec.html. Les vecteurs de chaque mot sont initialisés à l'aide d'un hachage de la concaténation du mot + str(seed).

La fonction de hachage utilisée, cependant, est la fonction de hachage rudimentaire intégrée de Python et peut produire des résultats différents si deux machines diffèrent en

  • 32 vs 64 bits, référence
  • versions Python, référence
  • différents systèmes d'exploitation/interprètes, référence1, référence2

La liste ci-dessus n'est pas exhaustive. Cela couvre-t-il votre question ?

MODIFIER

Si vous voulez assurer la cohérence, vous pouvez fournir votre propre fonction de hachage comme argument dans word2vec

Un exemple très simple (et mauvais) serait :

def hash(astring):
   return ord(astring[0])

model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4, hashfxn=hash)

print model[sentences[0][0]]

Selon les docs de Gensim, pour exécuter une exécution entièrement reproductible de manière déterministe, vous devez limitez également le modèle à un seul thread de travail, afin d'éliminer la gigue de commande de la planification des threads du système d'exploitation.

Une simple modification de paramètre dans votre code devrait faire l'affaire.

model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=1)

Juste une remarque sur le caractère aléatoire.

Si l'on travaille avec le modèle W2V de gensim et que l'on utilise la version Python>=3.3, gardez à l'esprit que la randomisation du hachage est activée par défaut. Si vous recherchez la cohérence entre deux exécutions, assurez-vous de définir le PYTHONHASHSEED variables d'environnement. Par exemple. lors de l'exécution de votre code comme siPYTHONHASHSEED=123 python3 mycode.py , la prochaine fois que vous générerez un modèle (en utilisant la même graine de hachage), ce sera le même que le modèle généré précédemment (à condition que toutes les autres étapes de contrôle du caractère aléatoire soient suivies, comme mentionné ci-dessus - état aléatoire et travailleur unique). Voir la source W2V de gensim et Python docs pour plus de détails.