有没有办法将 spacy 训练模型加载到 gensim 中?
Is there a way to load spacy trained model into gensim?
我想获取相似词列表。由于 Spacy 没有对此的内置支持,我想将 spacy 模型转换为 gensim word2vec 并获取相似词列表。
我试过用下面的方法。但是很费时间。
def most_similar(word):
by_similarity = sorted(word.vocab, key=lambda w: word.similarity(w), reverse=True)
return [w.orth_ for w in by_similarity[:10]]
nlp = spacy.load('en_core_web_md')
nlp.to_disk(filename)
nlp.vocab.vectors.to_disk(filename)
这不会将模型保存到文本文件中。因此,我无法使用以下方法。
from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
glove_file = datapath('test_glove.txt')
tmp_file = get_tmpfile("test_word2vec.txt")
_ = glove2word2vec(glove_file, tmp_file)
步骤 1:为 Spacy 模型提取单词及其向量(参见相关文档here)。
步骤 2 : 创建 class gensim.models.keyedvectors.WordEmbeddingsKeyedVectors 的实例
(参见相关文档 here)。
第 3 步:将单词和向量添加到 WordEmbeddingsKeyedVectors 实例中。
import spacy
from gensim.models.keyedvectors import WordEmbeddingsKeyedVectors
nlp = spacy.load('en_core_web_lg')
wordList =[]
vectorList = []
for key, vector in nlp.vocab.vectors.items():
wordList.append(nlp.vocab.strings[key] )
vectorList.append(vector)
kv = WordEmbeddingsKeyedVectors(nlp.vocab.vectors_length)
kv.add(wordList, vectorList)
print(kv.most_similar('software'))
# [('Software', 0.9999999403953552), ('SOFTWARE', 0.9999999403953552), ('Softwares', 0.738474428653717), ('softwares', 0.738474428653717), ('Freeware', 0.6730758547782898), ('freeware', 0.6730758547782898), ('computer', 0.67071533203125), ('Computer', 0.67071533203125), ('COMPUTER', 0.67071533203125), ('shareware', 0.6497008800506592)]
我想获取相似词列表。由于 Spacy 没有对此的内置支持,我想将 spacy 模型转换为 gensim word2vec 并获取相似词列表。
我试过用下面的方法。但是很费时间。
def most_similar(word):
by_similarity = sorted(word.vocab, key=lambda w: word.similarity(w), reverse=True)
return [w.orth_ for w in by_similarity[:10]]
nlp = spacy.load('en_core_web_md')
nlp.to_disk(filename)
nlp.vocab.vectors.to_disk(filename)
这不会将模型保存到文本文件中。因此,我无法使用以下方法。
from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
glove_file = datapath('test_glove.txt')
tmp_file = get_tmpfile("test_word2vec.txt")
_ = glove2word2vec(glove_file, tmp_file)
步骤 1:为 Spacy 模型提取单词及其向量(参见相关文档here)。
步骤 2 : 创建 class gensim.models.keyedvectors.WordEmbeddingsKeyedVectors 的实例
(参见相关文档 here)。
第 3 步:将单词和向量添加到 WordEmbeddingsKeyedVectors 实例中。
import spacy
from gensim.models.keyedvectors import WordEmbeddingsKeyedVectors
nlp = spacy.load('en_core_web_lg')
wordList =[]
vectorList = []
for key, vector in nlp.vocab.vectors.items():
wordList.append(nlp.vocab.strings[key] )
vectorList.append(vector)
kv = WordEmbeddingsKeyedVectors(nlp.vocab.vectors_length)
kv.add(wordList, vectorList)
print(kv.most_similar('software'))
# [('Software', 0.9999999403953552), ('SOFTWARE', 0.9999999403953552), ('Softwares', 0.738474428653717), ('softwares', 0.738474428653717), ('Freeware', 0.6730758547782898), ('freeware', 0.6730758547782898), ('computer', 0.67071533203125), ('Computer', 0.67071533203125), ('COMPUTER', 0.67071533203125), ('shareware', 0.6497008800506592)]