【问题标题】:Doc2Vec model Python 3 compatibilityDoc2Vec 模型 Python 3 兼容性
【发布时间】:2016-07-20 14:31:00
【问题描述】:

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

当我尝试在 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() 不会因 UnicodeDecodeError 而失败,但在推断之后提供了毫无意义的结果。

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

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

【问题讨论】:

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


    【解决方案1】:

    回答我自己的问题,这个answer 对我有用。

    这里有一些更详细的步骤:

    1. 下载 gensim 源代码,例如从 repo 克隆
    2. 在gensim/utils.py中,编辑方法unpickle添加编码参数:

       return _pickle.loads(f.read(), encoding='latin1')
      
    3. 使用 Python 3 和修改后的 gensim,加载模型:

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

      de.save('my_doc2vec_python3.pkl')
      

    这个模型现在应该可以在 Python 3 中使用未修改的 gensim 加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多