Doc2Vec
ожидает итерируемую коллекцию текстов, каждый из которых (по форме похож на) пример класса TaggedDocument
со свойствами words
и tags
.
words
может быть вашим токенизированным текстом (в виде списка), но tags
должен быть списком тегов документов, которые должны получать изученные векторы с помощью алгоритма Doc2Vec
. Чаще всего это уникальные идентификаторы, по одному на документ. (Вы можете просто использовать простые индексы int, если это работает как способ ссылаться на ваши документы в другом месте, или строковые идентификаторы.) Обратите внимание, что tags
должен быть списком тегов, даже если вы предоставляете только один для каждого документа.
Вы просто предоставляете список списков слов, тем самым вызывая ошибку.
Попробуйте вместо этого только одну строку для инициализации texts
:
texts = [TaggedDocument(
words=[word for word in document.lower().split()],
tags=[i]
) for i, document in enumerate(X.values)]
Кроме того, вам не нужно вызывать train()
, если вы указали texts
при создании Doc2Vec
. (Предоставив корпус при инициализации, Doc2Vec
автоматически выполнит как первоначальное сканирование словарного запаса, так и указанное вами количество обучающих проходов.)
Для вдохновения вам следует взглянуть на рабочие примеры, такие как doc2vec-lee.ipynb
работающий блокнот Jupyter, входящий в состав gensim
. Это будет ваш установочный каталог, если вы сможете его найти, но вы также можете просмотреть (статическую, не запускаемую) версию в репозитории исходного кода gensim
по адресу:
https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb
person
gojomo
schedule
03.04.2018