Doc2Vec模型兼容Python 3

时间:2016-07-20 14:31:00

标签: python python-3.x pickle gensim doc2vec

我使用Python2训练了一个doc2vec模型,我想在Python3中使用它。

当我尝试在Python 3中加载它时,我得到:

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

这似乎与腌制兼容性问题有关,我试图通过这样做来解决:

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

Gensim保存了我重命名的其他文件,因此在调用

时可以找到它们
form {
  display: block;
  margin: 0 auto;
  width: 1024px;
  height:768px;
}

使用UnicodeDecodeError,load()不会失败,但推理后会提供毫无意义的结果。

我无法使用Gensim在Python 3中轻松地重新训练它,因为我使用此模型从中创建派生数据,因此我将不得不重新运行一个冗长而复杂的管道。

如何让doc2vec模型与Python 3兼容?

1 个答案:

答案 0 :(得分:2)

回答我自己的问题,answer为我工作。

以下是更多细节的步骤:

  1. 下载gensim源代码,例如从repo克隆
  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')
    
  6. 此模型现在应该可以在Python 3中加载未经修改的gensim。