Python 错误:';utf8';编解码器可以';t解码位置0中的字节0x80:无效的开始字节

Python 错误:';utf8';编解码器可以';t解码位置0中的字节0x80:无效的开始字节,python,character-encoding,gensim,word2vec,kaggle,Python,Character Encoding,Gensim,Word2vec,Kaggle,我正在努力做到以下几点。我使用gensim包来使用word2vec。我能够创建模型并将其存储到磁盘。但当我试图加载文件回来,我得到下面的错误 -HP-dx2280-MT-GR541AV:~$ python prog_w2v.py Traceback (most recent call last): File "prog_w2v.py", line 7, in <module> models = gensim.models.Word2Vec.load_word2v

我正在努力做到以下几点。我使用gensim包来使用word2vec。我能够创建模型并将其存储到磁盘。但当我试图加载文件回来,我得到下面的错误

    -HP-dx2280-MT-GR541AV:~$ python prog_w2v.py 
Traceback (most recent call last):
  File "prog_w2v.py", line 7, in <module>
    models = gensim.models.Word2Vec.load_word2vec_format('300features_40minwords_10context.txt', binary=True)
  File "/usr/local/lib/python2.7/dist-packages/gensim/models/word2vec.py", line 579, in load_word2vec_format
    header = utils.to_unicode(fin.readline())
  File "/usr/local/lib/python2.7/dist-packages/gensim/utils.py", line 190, in any2unicode
    return unicode(text, encoding, errors=errors)
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 0: invalid start byte

我正在尝试使用生成模型。该程序大约需要半小时来生成模型。因此,我无法多次运行它来调试它

如果使用save()保存模型,则必须使用load()


load_word2vec_格式适用于google生成的模型,而不适用于gensim生成的模型。您没有正确加载文件。您应该使用load()而不是load\u word2vec\u format()。 当您使用C代码训练模型并以二进制格式保存模型时,将使用后者。但是,您不是以二进制格式保存模型,而是使用python对其进行培训。因此,您可以简单地使用以下代码,它应该可以工作:

models = gensim.models.Word2Vec.load('300features_40minwords_10context.txt')

如果使用以下选项保存模型:

model.wv.save(OUTPUT_FILE_PATH + 'word2vec.bin')
 model.wv.save_word2vec_format(OUTPUT_FILE_PATH + 'word2vec.txt', binary=False)
然后使用
load\u word2vec\u format
方法加载word2vec将导致问题。要使其正常工作,您应使用:

wiki_model = KeyedVectors.load(OUTPUT_FILE_PATH + 'word2vec.bin')
使用以下工具保存模型时也会发生同样的情况:

model.wv.save(OUTPUT_FILE_PATH + 'word2vec.bin')
 model.wv.save_word2vec_format(OUTPUT_FILE_PATH + 'word2vec.txt', binary=False)
然后,要使用
KeyedVectors.load
方法加载。在这种情况下,请使用:

wiki_model = KeyedVectors.load_word2vec_format(OUTPUT_FILE_PATH + 'word2vec.bin', binary=False)

根据其他答案,了解保存文件的方式很重要,因为加载文件也有特定的方式。但是,您可以简单地使用标志
unicode\u errors='ignore'
跳过此问题并根据需要加载模型

import gensim  

model = gensim.models.KeyedVectors.load_word2vec_format(file_path, binary=True, unicode_errors='ignore')   
默认情况下,此标志设置为“strict”:
unicode\u errors='strict'

根据文档,以下是发生此类错误的原因

unicode_错误:str,可选 默认值“strict”是适合作为
错误传递的字符串
unicode()函数(Python2.x)或str()函数(Python3.x)的参数。如果你的消息来源
文件可以包括在多字节Unicode字符中间截断的单词标记。
(正如在最初的word2vec.c工具中常见的那样),“忽略”或“替换”可能会有所帮助

如果我们真的能够跟踪每个模型是如何保存的,以上所有答案都是有用的。但是,如果我们有一堆需要加载的模型,并为其创建一个通用方法,该怎么办?我们可以使用上面的标志来执行此操作

我自己也经历过使用原始
word2vec.c文件
训练多个模型的例子,但当我尝试将其加载到
gensim
中时,一些模型将成功加载,一些模型会给出unicode错误,我发现上面的标志非常有用和方便