我尝试了几种加载谷歌新闻 word2vec 向量的方法(https://code.google.com/archive/p/word2vec/):
en_nlp = spacy.load('en',vector=False)
en_nlp.vocab.load_vectors_from_bin_loc('GoogleNews-vectors-negative300.bin')
以上给出:
MemoryError: Error assigning 18446744072820359357 bytes
我也尝试过使用 .gz 压缩向量;或者通过使用 gensim 加载并保存它们为新格式:
from gensim.models.word2vec import Word2Vec
model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
model.save_word2vec_format('googlenews2.txt')
然后,该文件在每一行包含单词及其单词向量。我试图加载它们:
en_nlp.vocab.load_vectors('googlenews2.txt')
但它返回“0”。
这样做的正确方法是什么?
更新:
我可以将自己创建的文件加载到 spacy 中。我在每一行使用带有“string 0.0 0.0 ....”的 test.txt 文件。然后用 .bzip2 压缩这个 txt 到 test.txt.bz2。然后我创建一个 spacy 兼容的二进制文件:
spacy.vocab.write_binary_vectors('test.txt.bz2', 'test.bin')
我可以加载到 spacy 中:
nlp.vocab.load_vectors_from_bin_loc('test.bin')
这行得通!但是,当我对 googlenews2.txt 执行相同的过程时,我收到以下错误:
lib/python3.6/site-packages/spacy/cfile.pyx in spacy.cfile.CFile.read_into (spacy/cfile.cpp:1279)()
OSError: