将Gensim中的单词向量加载到SpaCy Vectors类

时间:2019-12-01 20:43:42

标签: python gensim spacy

正如标题所述,我想将自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_diskfrom_bytes方法来加载单词向量
  • 还有一个from_glove方法,它需要vocab.txt文件和一个二进制文件(我已经有一个二进制文件

链接到Vectors Documentation

仅供参考,这是我的代码来测试加载过程:

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_diskfrom_bytes的各种组合,但均未成功。任何帮助或建议,将不胜感激!

1 个答案:

答案 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能力的模型用来合成向量的原因,词汇)。