[英]Load word vectors from Gensim to SpaCy Vectors class
正如标题所说,我想加载从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
的各种组合,但都没有成功。 任何帮助或建议将不胜感激!
不幸的是,Spacy 文档没有明确说明其各种阅读功能使用的格式,也没有实施明显基于原始 Google word2vec.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
)将向量加载到内存中,然后手动将每个向量逐个添加到预分配的 Spacy Vectors
对象中。
请注意,通过将 FastText 向量保存为普通的、仅包含向量的word2vec_format
,您将丢失模型学到的关于子词的所有内容(这是支持 FastText 的模型用来为词汇表外的词合成向量的东西)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.