Ошибка Gensim с .most_similar(), перезапуск ядра jupyter

#python-3.x #machine-learning #nlp #gensim #word2vec

#python-3.x #машинное обучение #nlp #gensim #word2vec

Вопрос:

Я не могу заставить работать функцию .most_similar(). Я пробовал обе версии Gensim 3.8.3 и теперь нахожусь на бета-версии 4.0. Я работаю сразу с учебником по модели Word2Vec для каждой версии документации.

Код выдает ошибку и перезапускает мое ядро:

 print(wv.most_similar(positive=['car', 'minivan'], topn=5))
 

Приведенный выше код дословно приведен как в документации 3.8.3, так и в 4.0. Следующие руководства дословно.

Как указано в других ответах на переполнение стека, я пробовал model.wv.most_similar()

Я не думаю, что .most_similar() обесценился.

Кроме того, функция .doesnt_match() не работает.

РЕДАКТИРОВАТЬ в отношении gojomo:

Прямо сейчас я нахожусь на Genism 3.8.3. Я использую модель перчаток и модели Word2Vec, на самом деле только что попробовал, и это сработало с моделью перчаток, возможно, у модели Word2Vec проблемы с памятью, как gojomo предложил мой код ниже:

Я использую ноутбук linx, процессор I-7 core 1065, память 7,4 ГБ, 64-разрядная ubuntu

 %matplotlib inline

import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

import gensim.downloader as api
wv = api.load('word2vec-google-news-300')

for i, word in enumerate(wv.vocab):
    if i == 10:
        break
    print(word)

pairs = [
    ('programming', 'linux'),   
    ('programming', 'bicycle'), 
    ('programming', 'apple'),  
    ('programming', 'cereal'),    
    ('programming', 'capitalism'),
    ('programming', 'computers'), 
    ('programming', 'python'),  
    ('programming', 'algebra'),  
    ('programming', 'logic'),    
    ('programming', 'math'),
]
for w1, w2 in pairs:
    print('%rt%rt%.2f' % (w1, w2, wv.similarity(w1, w2)))

print(wv.most_similar(positive=['math'], topn=5))
 

Ответ №1:

Если ядро Jupyter умирает без четкого сообщения об ошибке, у вас, вероятно, заканчивается память.

На консоли, где вы запустили сервер Jupyter, может быть записана дополнительная информация. Если вы расширите свой вопрос, включив в него любую информацию, а также сведения о загруженной вами модели (размер на диске) и системе, на которой вы работаете (особенно, доступной оперативной памяти), возможно, можно будет внести другие предложения.

Также:

В то gensim-3.8.3 время как требуется большое новое увеличение объема оперативной памяти при первом .most_similar() вызове, gensim-4.0.0beta для предварительной версии требуется только гораздо меньшее приращение в это время — так что гораздо более вероятно, что если загрузка модели завершится успешно, вы также сможете получить .most_similar() результаты. Поэтому также было бы полезно знать:

  • Как вы установили gensim-4.0.0beta и подтвердили ли вы, что это версия, фактически используемая средой ядра вашего ноутбука?
  • Вы уверены, что предыдущие шаги (такие как загрузка) были выполнены успешно, и что это только amp; именно most_similar() то, что вызывает сбой? (Находится ли оно в отдельной ячейке, и перед попыткой most_similar() вы можете успешно запросить другие аспекты модели, такие как ее длина или содержит ли она определенные слова?)

Комментарии:

1. Спасибо за ваш ответ, я поддержал его и добавил больше своего кода. На самом деле работает над предварительно подготовленной моделью перчатки, но не Word2Vec

2. 7,4 ГБ немного маловато для работы с полным GoogleNews набором векторов, который составляет почти 4 ГБ на диске, и gensim-3.8 он расширится, по крайней мере, до 6 ГБ, когда вы начнете выполнять most_simlar() подобные операции. (Если вы действительно установите и используете gensim-4.0.0beta , он будет использовать на несколько гигабайт меньше данных.)

3. Кроме того, я бы посоветовал загружать необработанные данные в виде файла где-нибудь, где вы можете их видеть и работать с ними, а не использовать несколько непрозрачную api.load() функциональность. Когда у вас есть GoogleNews файл самостоятельно, вы можете увидеть его размер, и у вас будет возможность использовать model = KeyedVectors.load_word2vec_format(filename, limit=1000000) только для загрузки 1-го 1 миллиона векторов (или любого другого меньшего подмножества, которое вы предпочитаете) для экономии памяти.

4. Спасибо @gojomo, я ценю ваше понимание