#python #nlp #gensim #word2vec #doc2vec
Вопрос:
Я использую Word2Vec и использую обученную вики-модель, которая выдает наиболее похожие слова. Я запускал это раньше, и это сработало, но теперь это выдает мне эту ошибку даже после повторного запуска всей программы. Я попытался взлететь return_path=True
, но все равно получаю ту же ошибку
print(api.load('glove-wiki-gigaword-50', return_path=True))
model.most_similar("glass")
#ОШИБКА:
/Users/me/gensim-data/glove-wiki-gigaword-50/glove-wiki-gigaword-50.gz
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-153-3bf32168d154> in <module>
1 print(api.load('glove-wiki-gigaword-50', return_path=True))
----> 2 model.most_similar("glass")
AttributeError: 'Word2Vec' object has no attribute 'most_similar'
#МОДЕЛЬ
это модель, которую я использовал
print(
'%s (%d records): %s' % (
model_name,
model_data.get('num_records', -1),
model_data['description'][:40] '...',
)
)
Редактировать: вот моя загрузка и вывод gensim
!python -m pip install -U gensim
выход:
Требование уже выполнено: gensim в ./opt/anaconda3/lib/python3.8/пакеты сайтов (4.0.1)
Требование уже выполнено: numpy>=1.11.3 в ./opt/anaconda3/lib/python3.8/пакеты сайтов (от gensim) (1.20.1)
Требование уже выполнено: smart-open>=1.8.1 дюйма. /opt/anaconda3/библиотека/python3.8/пакеты сайтов (от gensim) (5.1.0)
Требование уже выполнено: scipy>=0,18,1 дюйма ./opt/anaconda3/библиотека/python3.8/пакеты сайтов (из gensim) (1.6.2)
Комментарии:
1. Разве ты не имеешь в виду просто
model.similar
?2. @ewong это дает мне это:
AttributeError: 'Word2Vec' object has no attribute 'similar'
3. Есть ли еще строки в вашем коде, или это все? Где определяется модель?
4. @ewong есть такое
for model_name, model_data in sorted(info['models'].items()): print( '%s (%d records): %s' % ( model_name, model_data.get('num_records', -1), model_data['description'][:40] '...', ) )
Ответ №1:
Вы, вероятно , ищете <MODEL>.wv.most_similar
, поэтому, пожалуйста, попробуйте:
model.wv.most_similar("glass")
Комментарии:
1. Привет! Я пробовал это, но это дает мне
AttributeError: 'Word2Vec' object has no attribute 'vw'
. я обновил свой пост моделью, которую использовал2. Верно. Интересный. Не могли бы вы также опубликовать версию
gensim
библиотеки, которую вы используете (поскольку в пути произошли изменения)?3. Я использовал
import gensim.models.word2vec as w2v
иimport gensim.downloader as api
4. Это не то, о чем я просил. Не могли бы вы, пожалуйста, запустить
pip show gensim
и опубликовать результаты?5. Привет, я только что добавил их в свой пост в конце @sophros
Ответ №2:
Ваш показанный код…
print(api.load('glove-wiki-gigaword-50', return_path=True))
model.most_similar("glass")
…ничего не назначает model
. (Было ли это назначено ранее?)
И использование return_path=True
там означает api.load()
, что будет возвращен только строковый путь к файлу данных. Это было бы интересно только в том случае, если бы вы собирались использовать эту строку, чтобы затем самостоятельно загрузить данные в модель.
Этот api.load()
вызов без return_path=True
вероятности возвращает экземпляр KeyedVectors
, представляющий собой набор векторов. Это отличается от полной Word2Vec
модели, но все равно будет поддерживать .most_similar()
метод. Однако, если вы просто print()
используете этот возвращенный путь или возвращенную модель, его не будет в model
переменной для вашей последующей .most_similar()
операции.
Так что вы можете захотеть:
kv_model = api.load('glove-wiki-gigaword-50')
similars = kv_model.most_similar('glass')
print(similars)
(Лично мне не нравится непрозрачная магия и запуск нового загруженного кода, это api.load()
так. Я думаю, что это лучшая привычка-загружать файлы необработанных данных самостоятельно, из известного источника, чтобы вы знали, какие файлы поступили, в какие каталоги, на вашей собственной машине. Затем используйте метод загрузки для конкретного набора данных, чтобы загрузить эти данные, чтобы узнать, какие библиотечные методы работают с какими типами файлов.)
Если ваша model
переменная на самом деле включает полную Word2Vec
модель из какого-то неизвестного другого кода, то она также будет содержать набор векторов в своем .wv
свойстве (для операторов w ord-v) :
similars = model.wv.most_similar('glass')
print(similars)
Комментарии:
1. Это выводит похожие слова на основе обучения моих данных. Тем не менее, я хотел бы получить слова, которые обучены
'glove-wiki-gigaword-50'
2. Вы пробовали присваивать результаты вашего
api.load()
вызова переменной вместо того, чтобы печатать ее? (Вы можете назначить его,model
если хотите отказаться отWord2Vec
модели, которая уже существует. Или вы можете назначить его в новую переменную , напримерkv_model
, чтобы отразить, что это просто aKeyedVectors
.)3. Я попробовал, и это дало мне
AttributeError: 'str' object has no attribute 'most_similar'
4. Какой код вы пробовали, который выдал эту ошибку? (Это звучит так, как будто вы назначили строку в переменную, а не результаты
api.load()
.)5. Вот что я сделал:
kv_model= (api.load('glove-wiki-gigaword-50', return_path=True)) (kv_model.most_similar("glass"))