Возникли проблемы при загрузке пользовательских обучающих векторов, созданных в Gensim, в Spacy - PullRequest
0 голосов
/ 26 марта 2020

Я обучил модель:

from gensim.models import Word2Vec    

model = Word2Vec(master_sent_list,
                     min_count=5,   
                     size=300,      
                     workers=5,    
                     window=5,      
                     iter=30)  

Сохранено согласно этой записи:

model.wv.save_word2vec_format("../moj_word2vec.txt")
!gzip ../moj_word2vec.txt
!python -m spacy init-model en ../moj_word2vec.model --vectors-loc ../moj_word2vec.txt.gz

Все выглядит отлично:

✔ Successfully created model
22470it [00:02, 8397.55it/s]j_word2vec.txt.gz
✔ Loaded vectors from ../moj_word2vec.txt.gz
✔ Sucessfully compiled vocab
22835 entries, 22470 vectors

Затем я загружаю модель под другим именем :

nlp = spacy.load('../moj_word2vec.model/')

Однако что-то идет не так, потому что я не могу использовать общие команды для nlp; что я могу на model.

Например, эти работы:

model.wv.most_similar('police')
model.vector_size

Но это не так:

nlp.wv.most_similar('police')
AttributeError: 'English' object has no attribute 'wv'

nlp.most_similar('police')
AttributeError: 'English' object has no attribute 'most_similar'

nlp.vector_size
AttributeError: 'English' object has no attribute 'vector_size'

Так что, похоже, что-то сломалось в загрузке, или, возможно, экономии, кто-то может помочь, пожалуйста?

1 Ответ

2 голосов
/ 27 марта 2020

Ничего не сломано - у вас просто неверные ожидания.

Модели из spacy, загруженные в переменную nlp, не будут поддерживать методы из gensim классов моделей.

Это другая библиотека, код, классы и API - которые сами по себе не используют код gensim изнутри - даже если он может импортировать простой набор векторов из простого word2vec_format.

(Сравните, например, результаты type(model) или type(model.wv) на вашей рабочей gensim модели, затем type(nlp) объекта spacy, который создается позже: совершенно разные типы, с разными методы / свойства.)

Вам придется использовать некоторую комбинацию:

  • проверка документов spacy на эквивалентные операции

  • , если вам нужны операции gensim, загрузите векторы в класс модели gensim. Например:

from gensim.models.keyedvectors import KeyedVectors
wv = KeyedVectors.load_word2vec_format(filename)
# then do gensim ops on the `wv` object

(Вы также можете сохранить всю модель gensim Word2Vec, используя метод .save(), который сохранит ее в одном или нескольких файлах, используя Python маринование. Затем его можно перезагрузить в модель gensim Word2Vec, используя Word2Vec.load() - хотя, если вам нужно только посмотреть на отдельные слова-вектор по слову-ключу, вам не нужен полный модель.)

...