Ваш начальный блок кода, который делает import gensim.models.keyedvectors as w2v
и word_vectors = w2v.wv
, не имеет особого смысла.
Читайте буквально, то есть присваиваете полный Python кодовый модуль gensim.models.keyedvectors
переменной w2v
. Этот модуль не будет иметь свойства .wv
, поэтому я не ожидаю, что word_vectors = w2v.wv
даже выполнится. Это, конечно, не приведет к тому, что word_vectors
станет реальным набором обученных векторов слов, если только не будет куча других обучающих кодов, которые вы не показываете.
Вы уверены, что код в вашем вопросе отражает то, что вы на самом деле делаете?
Тем не менее, если вам удалось получить word_vectors
для хранения одного из gensim
KeyedVectors
объектов, заполненных векторами слов, которые вы хотите сохранить, у вас есть два варианта:
Для сохранения векторов слов в том же формате, который использовался оригиналом Google word2vec.c
release, вы можете использовать метод .save_word2vec_format(path, ...)
. Затем, чтобы позже перезагрузить эти векторы, вы должны использовать метод reloaded_vectors = KeyedVectors.load_word2vec_format(path, ...)
.
Для сохранения векторов слов в собственном формате gensim
Python. , вы можете использовать метод .save(path)
. Затем, чтобы позже перезагрузить эти векторы, вы должны использовать метод reloaded_vectors = KeyedVectors.load(path)
. Этот подход может сохранить немного больше информации (если она присутствует в процессе обучения), например, количество слов. Для эффективности с более крупными объектами он может хранить большую часть векторов в отдельном файле, который должен храниться вместе с основным файлом path
, если вы перемещаете файлы в другое место, и допускает возможность (но не требование) использования mmap
варианты позже.
Нельзя смешивать и сопоставлять эти форматы: файл, сохраненный с помощью save_word2vec_format()
, может быть прочитан только с помощью load_word2vec_format()
, а файл, сохраненный с помощью save()
, может быть прочитан только на load()
.
Относительно вашего другого TypeError
, недостаточно информации, чтобы предположить, что пошло не так. Вам нужно отредактировать свой ответ, чтобы добавить больше деталей и сделать демонстрационный код самосогласованным.
Например, вы показываете загрузку в переменную с именем vectors
, а затем операцию над переменной с именем model
. Это несоответствие указывает на то, что проблема может заключаться в некотором другом несоответствии в вашем не показанном коде.
Аналогичным образом, если вы столкнетесь с какой-либо ошибкой, вы должны точно указать в кавычках сообщение об ошибке , а полный стек сообщений об ошибке сообщил в Ваш вопрос, чтобы ответчики могли точно видеть, какие строки кода в вашем коде и библиотеках, на которые вы полагаетесь, в точности связаны с вашей ошибкой. (Это обычно помогает точно определить, где ваши ожидания / код отклоняются от требований библиотеки.)