Это может помочь ответчикам, если вы включите больше информации в сообщение об ошибке, например, несколько строк фреймов вызова, которые будут четко указывать, какая строка вашего кода вызвала ошибку.
Однако, если вы получите ошибку KeyError: u"word 'business' not in vocabulary"
, вы можете верить, что ваш Word2Vec
экземпляр w2v_model
никогда не выучил слово 'business'
.
Это может быть связано с тем, что она не отображалась в данных обучения, представленных моделью, или, возможно, появлялась меньше, чем min_count
раз.
Поскольку вы не показываете тип / содержимое вашей raw_documents
переменной или код для вашего TokenGenerator
класса, не ясно, почему это пошло не так - но это то, что нужно искать. Дважды проверьте, что raw_documents
имеет правильное содержимое, и что отдельные элементы внутри итерируемого объекта docgen
выглядят как правильный тип ввода для Word2Vec
.
Каждый элемент в итерируемом объекте docgen
должен представлять собой список строк-токенов, а не простые строки или что-либо еще. Итерация docgen
должна быть повторной многократно. Например, если вы выполните следующие две строки, вы должны увидеть те же два токена списков строк (выглядящих примерно так: ['hello', 'world']
:
print(iter(docgen).next())
print(iter(docgen).next())
Если вы видите простые строки, docgen
не предоставляет правильные типы элементов для Word2Vec
. Если вы видите только один напечатанный элемент, docgen
, вероятно, является простым однопроходным итератором, а не итеративным объектом.
Вы также можете включить ведение журнала на уровне INFO
и внимательно следить за выходными данными на шаге Word2Vec
, а также уделять дополнительное внимание любым числам / шагам, которые кажутся несоответствующими. (Например, какие-либо шаги указывают на то, что ничего не происходит, или подсчет слов / текстовых примеров кажется неправильным?)