python - 将词向量从 Gensim 加载到 SpaCy Vectors 类
问题描述
正如标题所说,我想将自定义的词向量加载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
orfrom_bytes
方法来加载词向量 - 还有一种
from_glove
方法需要一个 vocab.txt 文件和一个二进制文件(我已经有一个二进制文件
链接到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_disk
但from_bytes
没有成功。任何帮助或建议将不胜感激!
解决方案
不幸的是,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 的模型用于为词汇表外的词合成向量的方法)。
推荐阅读
- sql - BigQuery - 使用字符串和数组加入两个表
- faunadb - 如何将 q.Now() 结果转换为动物群中的字符串
- mongodb - 如何获取名称中带有空格字符的集合的信息?
- php - cURL 无法使用 PHP 连接,但可以通过 IDE 连接
- javascript - 使用打字稿定义 InfiniteScroll 反应组件的类型
- r - 在 R 中选择独特的工作场所 - id 组合
- java - jSS7中的SendParameters奇怪的行为
- r - R 中的优化 - 给每个场合一个组长,每个人都应该至少被选择一次
- python - 根据列名中是否存在后缀对列进行排序
- python - 带有大型视频文件的 jupyter 中的 mattplotlib 动画