正如标题所述,我想将自gensim
构建的自定义单词向量加载到SpaCy
Vector类中。
我发现了其他几个问题,人们已经成功地将向量加载到nlp
对象本身,但是我有一个当前项目,我想拥有一个单独的Vectors对象。
具体来说,我正在使用BioWordVec生成我的词向量,该词向量使用gensim.models.Fastext
中的方法对向量进行序列化。
在gensim
端,我是:
model.wv.save_word2vec_format(output/bin/path, binary=True)
model.save(path/to/model)
在SpaCy
端:
from_disk
或from_bytes
方法来加载单词向量from_glove
方法,它需要vocab.txt文件和一个二进制文件(我已经有一个二进制文件仅供参考,这是我的代码来测试加载过程:
import spacy
from spacy.vectors import Vectors
vecs = Vectors()
path = '/home/medmison690/pyprojects/BioWordVec/pubmed_mesh_test.bin'
dir_path = '/home/medmison690/Desktop/tuned_vecs'
vecs.from_disk(dir_path)
print(vecs.shape)
我尝试了from_disk
和from_bytes
的各种组合,但均未成功。任何帮助或建议,将不胜感激!
答案 0 :(得分:0)
不幸的是,Spacy文档未明确说明其各种读取功能使用的格式,也未实现明显基于原始Google word2vec.c
代码编写的格式的导入。
似乎from_disk
希望Spacy拥有自己的多文件格式。 from_bytes
可能期望向量的原始版本。对于从gensim
的{{1}}模型中保存的数据,这两者都没有用。
FastText
实际上可能是兼容格式。您可以尝试使用from_glove
方法及其可选的save_word2vec_format()
参数(以单词指定fvocab
文件),vocab.txt
和根据Spacy约定的文件名。例如,如果您有300个维向量:
binary=True
然后,查看该目录是否适用于Spacy的ft_model.wv.save_word2vec_format('vectors.300.f.bin', fvocab='vocab.txt', binary=True)
。 (不确定)。
或者,您可以使用from_glove
实用工具类(例如其gensim
)将向量加载到内存中,然后将每个向量手动逐个添加到pre-已分配的Spacy KeyedVectors
对象。
请注意,通过将FastText向量保存到纯向量,仅向量Vectors
,您将失去模型学习到的关于子词的任何信息(这是具有FastText能力的模型用来合成向量的原因,词汇)。