2016-07-20 43 views
3

我用Python2訓練了一個doc2vec模型,我想在Python3中使用它。Doc2Vec模型Python 3的兼容性

當我嘗試加載它在Python 3,我得到:

Doc2Vec.load('my_doc2vec.pkl') 

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

這似乎是相關的泡菜兼容性問題,我試圖做來解決:

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

Gensim保存了我重命名的其他文件,以便在撥打電話時可以找到它們

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

load()do es不會因UnicodeDecodeError而失敗,但推理後會提供無意義的結果。

我不能在Python 3中使用Gensim輕鬆地重新訓練它,因爲我使用這個模型從它創建派生數據,所以我將不得不重新運行一條長而複雜的管道。

如何使doc2vec模型與Python 3兼容?

回答

2

回答我自己的問題,這answer爲我工作。

下面是步驟多一點的細節:

  1. 下載gensim源代碼,例如從回購
  2. 在gensim/utils.py
  3. 克隆,編輯方法unpickle添加編碼參數:

    return _pickle.loads(f.read(), encoding='latin1') 
    
  4. 使用Python 3和改性gensim,加載模型:

    de = Doc2Vec.load('my_doc2vec.pkl') 
    
  5. 保存:

    de.save('my_doc2vec_python3.pkl') 
    

這種模式應該在Python 3中可以現在可以裝載未修改gensim。