python - 加载在 Python 2 和 Python 3 中计算的 gensim Word2Vec

标签 python python-3.x encoding gensim word2vec

我有一个用 Python 2 计算的 gensim Word2Vec 模型,如下所示:

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

model = Word2Vec(LineSentence('enwiki.txt'), size=100, 
                 window=5, min_count=5, workers=15)
model.save('w2v.model')

但是,我需要在 Python 3 中使用它。如果我尝试加载它,

import gensim
from gensim.models import Word2Vec
model = Word2Vec.load('w2v.model')

它会导致错误:

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

我认为问题在于Python2和Python3之间的编码差异。而且 gensim 似乎正在使用 pickle 来保存/加载模型。

有没有办法设置编码/pickle 选项以便模型正确加载?或者也许使用一些外部工具来转换模型文件?

在 Python 3 中重新计算它不是一个选择:它需要太多时间。

最佳答案

正如 memoselyk 所指出的,这确实看起来像是某个地方的错误,并且可以按照 this 的评论中描述的方式修复。回答。

因此,您必须将 encoding='latin1' 添加到对 gensim.utils.unpickle 中的 _pickle.loads 的调用中,加载Python 3 中的模型,然后保存它,现在您可以恢复此修复并使用 Python 3 在未修改的 gensim 中加载此新模型。

关于python - 加载在 Python 2 和 Python 3 中计算的 gensim Word2Vec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596082/

相关文章:

python - 如何在单元测试中修补 boto3 lambda 调用

python - 如何获得在Python 3.x中记录的音频的频率和幅度?

python CNN。如何获取数据的隐藏fc层编码?python

php - 如何在 PostgreSQL 中存储和检索 PHP serialize()?

sql - MySql中utf8_general_ci和utf8_unicode_ci有什么区别?

python - 在 Python3 中对 Twisted 代码运行测试

Python 从响应 JSON 中读取特定数据

python - 在 Python 中遍历一棵不寻常的树

python-3.x - 如何通过 odoo 中的新模块使用新的菜单项和操作来自定义现有模块?

java - 强制以 UTF-8 写入 Velocity 文件