我有一个用 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/