簡體   English   中英

從 Gensim 加載詞向量到 SpaCy Vectors 類

[英]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_diskfrom_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_diskfrom_bytes的各種組合,但都沒有成功。 任何幫助或建議將不勝感激!

不幸的是,Spacy 文檔沒有明確說明其各種閱讀功能使用的格式,也沒有實施明顯基於原始 Google word2vec.c代碼編寫的格式的導入。

似乎from_disk期望 Spacy 自己的多文件格式的東西。 from_bytes可能需要向量的原始版本。 對於從gensimFastText模型保存的數據,兩者都沒有用。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM