首页 > 解决方案 > 将词向量从 Gensim 加载到 SpaCy Vectors 类

问题描述

正如标题所说,我想将自定义的词向量加载gensimSpaCyVector 类中。

我发现了其他几个问题,人们已经成功地将向量加载到nlp对象本身,但是我有一个当前项目,我希望有一个单独的 Vectors 对象。

具体来说,我正在使用 BioWordVec 生成我的词向量,该词向量使用来自gensim.models.Fastext.

最后gensim我是:

SpaCy侧面:

链接到Vectors 文档

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

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没有成功。任何帮助或建议将不胜感激!

标签: pythongensimspacy

解决方案


不幸的是,Spacy 文档没有明确说明其各种阅读功能使用什么格式,也没有实现明显基于原始 Googleword2vec.c代码编写的格式的导入。

似乎from_disk期望 Spacy 自己的多文件格式的东西。from_bytes可能需要向量的原始版本。gensim对于从的FastText模型保存的数据,两者都没有用。

from_glove实际上可能是兼容的格式。您可以尝试使用该save_word2vec_format()方法及其可选fvocab参数(指定vocab.txt带有单词的文件)binary=True、 和根据 Spacy 约定的文件名。例如,如果您有 300 个维度的向量:

ft_model.wv.save_word2vec_format('vectors.300.f.bin', fvocab='vocab.txt', binary=True)

然后,查看该目录是否适用于 Spacy 的from_glove. (我不确定它会不会。)

或者,您可以使用gensim实用程序类(例如它的KeyedVectors)将向量加载到内存中,然后手动将每个向量一个接一个地添加到预先分配的 SpacyVectors对象中。

请注意,通过将 FastText 向量保存为纯向量word2vec_format,您将丢失模型学到的关于子词的任何内容(这是支持 FastText 的模型用于为词汇表外的词合成向量的方法)。


推荐阅读