我正在尝试执行以下kaggle assignmnet。我使用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
我发现了类似的问题。但我无法解决问题。我的prog_w2v.py如下所示。
import gensim
import time
start = time.time()
models = gensim.models.Word2Vec.load_word2vec_format('300features_40minwords_10context.txt', binary=True)
end = time.time()
print end-start," seconds"
我正在尝试使用code here生成模型。该程序生成模型大约需要半小时。因此,我无法多次运行它来调试它。
答案 0 :(得分:11)
您没有正确加载文件。您应该使用load()而不是load_word2vec_format()。 当您使用C代码训练模型时使用后者,并以二进制格式保存模型。但是,您不是以二进制格式保存模型,而是使用python进行训练。因此,您只需使用以下代码即可:
models = gensim.models.Word2Vec.load('300features_40minwords_10context.txt')
答案 1 :(得分:4)
如果您使用以下方式保存模型:
model.wv.save(OUTPUT_FILE_PATH + 'word2vec.bin')
然后使用load_word2vec_format
方法加载word2vec会导致问题。为了使它工作,你应该使用:
wiki_model = KeyedVectors.load(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)
答案 2 :(得分:3)
如果使用save()保存模型,则必须使用load()
load_word2vec_format适用于Google生成的模型,不适用于gensim生成的模型
答案 3 :(得分:3)
根据其他答案,知道保存文件的方式很重要,因为还有特定的加载方式。但是,您只需使用标志unicode_errors='ignore'
即可跳过此问题并根据需要加载模型。
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format(file_path, binary=True, unicode_errors='ignore')
默认情况下,此标志设置为“ 严格”:unicode_errors='strict'
。
根据文档,给出以下有关发生此类错误的原因。
unicode_errors :str,可选 默认的“ strict”是适合作为
errors
传递的字符串 unicode()(Python 2.x)或str()(Python 3.x)函数的参数。如果您的来源 文件中可能包含在多字节unicode字符中间被截断的单词标记 (在原始的word2vec.c工具中很常见),“忽略”或“替换”可能会有所帮助。
如果我们确实可以跟踪每个模型的保存方式,那么以上所有答案都是有帮助的。但是,如果我们有一堆模型需要加载并为其创建通用方法,该怎么办?我们可以使用上面的标志来做到这一点。
我本人经历过使用原始word2vec.c file
训练多个模型的实例,但是当我尝试将其加载到gensim
时,某些模型将成功加载,而某些模型会出现unicode错误,我发现上面的标志是有用和方便的。