Doc2Vec: tuTypeError: '<' не поддерживается между экземплярами 'str' и 'int' - PullRequest
0 голосов
/ 02 мая 2019

Я создал модель doc2vec для определения наиболее похожих документов: Вот код для обучения:

#train doc2vec model
docs = g.doc2vec.TaggedLineDocument(train_corpus)

model = g.Doc2Vec(docs, dm=0, dbow_words=1, size=200, window=8, min_count=19, iter=2)

Для неуважения я пытаюсь это:

#load model
m = g.Doc2Vec.load(model)
pprint(m.docvecs.most_similar(positive=["Machine learning"], topn=20))

Но я получил эту ошибку:

TypeError                                 Traceback (most recent call last)
<ipython-input-142-ca36e85d7a79> in <module>
----> 1 pprint(m.docvecs.most_similar(positive=["Machine learning"], topn=20))

~\Anaconda3\lib\site-packages\gensim\models\keyedvectors.py in most_similar(self, positive, negative, topn, clip_start, clip_end, indexer)
   1687             if isinstance(doc, ndarray):
   1688                 mean.append(weight * doc)
-> 1689             elif doc in self.doctags or doc < self.count:
   1690                 mean.append(weight * self.vectors_docs_norm[self._int_index(doc, self.doctags, self.max_rawint)])
   1691                 all_docs.add(self._int_index(doc, self.doctags, self.max_rawint))

TypeError: '<' not supported between instances of 'str' and 'int'

Есть идеи, пожалуйста?

1 Ответ

0 голосов
/ 02 мая 2019

Это известная ошибка в ожидании исправления , что если вы предоставите tag для doc2vec_model.docvecs.most_similar(), который не известен модели, она покажет эту запутанную ошибку.

Итак, "Machine learning" - это не tag, который был предоставлен во время обучения. Фактически, класс TaggedLineDocument просто присваивает каждому документу один тег на основе номера строки в файле корпуса. Если вам нужны более сложные / описательные теги, вам придется подготовить корпус самостоятельно, чтобы представить отдельные объекты (в форме TaggedDocument) с помощью свойства списка слов words и списка тегов tags собственность.

...