2016-07-20 3 views
3

I formé un modèle doc2vec avec python2 et je voudrais l'utiliser dans python3.modèle Doc2Vec Python 3 Compatibilité

Lorsque je tente de le charger en Python 3, je reçois:

Doc2Vec.load('my_doc2vec.pkl') 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 0: ordinal not in range(128) 

Il semble être lié à un problème de compatibilité de conserves au vinaigre, que j'ai essayé de résoudre en faisant:

with open('my_doc2vec.pkl', 'rb') as inf: 
    data = pickle.load(inf) 
data.save('my_doc2vec_python3.pkl') 

Gensim a sauvé d'autres fichiers que je renommé bien afin qu'ils puissent être trouvés lors de l'appel

de = Doc2Vec.load('my_doc2vec_python3.pkl') 

La charge() faire es ne pas échouer avec UnicodeDecodeError, mais après l'inférence fournit des résultats sans signification.

Je ne peux pas facilement le recréer en utilisant Gensim en Python 3 car j'ai utilisé ce modèle pour créer des données dérivées à partir de celui-ci, donc je devrais relancer un pipeline long et complexe.

Comment rendre le modèle doc2vec compatible avec Python 3?

Répondre

2

Répondant à ma propre question, ce answer a fonctionné pour moi.

Voici les étapes un peu plus de détails:

  1. télécharger gensim code source, par exemple clone de repo
  2. dans gensim/utils.py, modifier la méthode unpickle pour ajouter le paramètre d'encodage:

    return _pickle.loads(f.read(), encoding='latin1') 
    
  3. utilisant Python 3 et le gensim modifié, charger le modèle:

    de = Doc2Vec.load('my_doc2vec.pkl') 
    
  4. sauvegarder:

    de.save('my_doc2vec_python3.pkl') 
    

Ce modèle devrait être chargeable maintenant en Python 3 avec gensim non modifiée.