Есть ли способ загрузить простую обученную модель в gensim? - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу получить список похожих слов. Поскольку 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 Ответ

1 голос
/ 05 ноября 2019

шаг 1 : извлечение слов и их векторов для модели Spacy (см. Соответствующую документацию здесь ).
шаг 2 : создание экземпляракласса gensim.models.keyedvectors.WordEmbeddingsKeyedVectors (см. соответствующую документацию здесь ).
шаг 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)]



...