我已经使用我自己的语料库,使用https://github.com/stanfordnlp/GloVe/blob/master/demo.sh提供的代码生成了GloVe向量。因此,我同时具有.bin文件和.txt文件向量。我正在尝试将这些文件导入gensim,以便可以像word2vec矢量一样使用它们。
我曾尝试使用二进制格式和文本文件格式来更改加载,但最终导致出现酸洗错误:
models = gensim.models.Word2Vec.load(file)
我尝试忽略unicode错误,该错误无效。我仍然收到unicode错误。
model = gensim.models.KeyedVectors.load_word2vec_format(file, binary=True, unicode_errors='ignore')
这就是我现在的代码:
from gensim.models import KeyedVectors
import gensim
from gensim.models import word2vec
file = 'vectors.bin'
model = KeyedVectors.load_word2vec_format(file, binary=True, unicode_errors='ignore')
model.wv.most_similar(positive=['woman', 'king'], negative=['man'])
这是我不断收到的错误消息:
Traceback (most recent call last):
File "glove_to_word2vec.py", line 6, in <module>
model = KeyedVectors.load_word2vec_format(file, binary=True) # C binary format
File "/home/users/epair/.local/lib/python3.6/site- packages/gensim/models/keyedvectors.py", line 1498, in load_word2vec_format
limit=limit, datatype=datatype)
File "/home/users/epair/.local/lib/python3.6/site-packages/gensim/models/utils_any2vec.py", line 343, in _load_word2vec_format
header = utils.to_unicode(fin.readline(), encoding=encoding)
File "/home/users/epair/.local/lib/python3.6/site-packages/gensim/utils.py", line 359, in any2unicode
return unicode(text, encoding, errors=errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe6 in position 0: invalid continuation byte
没想到普通的.load()
会起作用–仅适用于gensim
自己的模型,并以匹配的.save()
方法保存。
但是,.load_word2vec_format()
应该使用正确格式的文件。
您确定文件格式兼容吗? (是否将其加载到原始的Google word2vec.c
兄弟姐妹工具中,例如distance
或word-analogy
可执行文件?)
您还提到了.txt
格式–您是否尝试过使用binary=False
加载该文件?
查看utils_any2vec.py
的第343行(在您可能使用的gensim
版本中,似乎正在读取文件的第一行,该行上应该只有2个以空格分隔的数字) :字数和维数。 (也就是说,甚至不涉及与您的实际单词标记有关的编码问题。)
[如果您用head -1 vectors.txt
查看文件,那是您看到的全部吗? (否则,您的GLoVe
代码未编写正确的兼容格式。)