[英]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.