gensim Doc2Vec слово не в словаре - PullRequest
2 голосов
/ 27 апреля 2019

Я тренирую doc2vec gensim model с txt-файлом 'full_texts.txt', который содержит ~ 1600 документов. После того, как я обучу модель, я хочу использовать методы подобия над словами и предложениями.

Однако, поскольку я впервые использую gensim, я не могу найти решение. Если я хочу найти сходство по словам, я стараюсь, как указано ниже, но получаю ошибку , что word doesnt exist in the vocabulary, а другой вопрос: как проверить сходство для целых документов? Я прочитал много вопросов по этому поводу, например, one и посмотрел документацию , но все еще не уверен, что я делаю неправильно.

from gensim.models import Doc2Vec
from gensim.models.doc2vec import TaggedLineDocument
from gensim.models.doc2vec import TaggedDocument

tagdocs = TaggedLineDocument('full_texts.txt')
d2v_mod = Doc2Vec(min_count=3,vector_size = 200, workers = 2, window = 5, epochs = 30,dm=0,dbow_words=1,seed=42)
d2v_mod.build_vocab(tagdocs)
d2v_mod.train(tagdocs,total_examples=d2v_mod.corpus_count,epochs=20)

d2v_mod.wv.similar_by_word('overdraft',topn=10)
KeyError: "word 'overdraft' not in vocabulary"

1 Ответ

3 голосов
/ 27 апреля 2019

Вы уверены, что 'overdraft' появляется по крайней мере min_count=3 раз в вашем корпусе?(Например, что возвращает grep -c " overdraft " full_texts.txt?)

(Обратите также внимание, что 1600 документов - это очень маленький корпус для целей Doc2Vec; в опубликованных работах обычно используется не менее десятков тысяч документов,и часто миллионы.)

В общем, если вы заинтересованы в том, чтобы базовая функциональность работала, хорошие идеи заключаются в следующем:

  • следуйте заслуживающим доверия примерам - каталог gensim docs/notebooks включаетнесколько ноутбуков Jupyter / IPython, демонстрирующих функциональность doc2vec, в том числе минимальное введение doc2vec-lee.ipynb, а также для просмотра в режиме онлайн (но лучше всего работать локально, чтобы вы могли освоить особенности для изучения)

  • включить ведение журнала на уровне INFO и внимательно следить за выходными данными, чтобы убедиться, что различные сообщаемые шаги прогресса, включая количество слов / документов и длительности обучения, указывают, что все работает разумно

  • проверить полученную модель на ожидаемое поведение.Например, есть ли ожидаемое слово в изученном словаре?'overdrafts' in d2v_mod.wv.Сколько тегов документов было изучено?len(d2v_mod.docvecs).и т. д.

...