Ошибка python: объект 'numpy.ndarray' не имеет атрибута 'words' при обучении doc2vec

когда я обучал свою модель doc2vec, я проходил через набор данных несколько раз и каждый раз перетасовывал обзоры обучения, чтобы повысить точность. Затем python предоставил мне объект AttributeError: 'numpy.ndarray' не имеет атрибута 'words'. Далее следует мой код на Python:

def labelizeReviews(reviews, label_type):
  labelized = []
  for index, review in enumerate(reviews):
      label = ' %s_%s ' % (label_type, index)
      labelized.append(LabeledSentence(review, [label]))
  return labelized

x_train = labelizeReviews(x_train, 'TRAIN')  # input x_train is a list of word lists, each word list is a list of tokens of all words in one document
x_train=np.array(x_train)
model_dm = gensim.models.Doc2Vec(alpha=0.025, min_alpha=0.0001, iter=10, min_count=5, window=10, size=size, sample=1e-3,
                                 negative=5, workers=3)
for epoch in range(10):
    perm = np.random.permutation(x_train.shape[0])
    model_dm.train(x_train[perm], total_examples=model_dbow.corpus_count, epochs=model_dbow.iter)

а затем следующее мое сообщение об ошибке:

Exception in thread Thread-4:
Traceback (most recent call last):
  File "C:\Users\123\Anaconda2\lib\threading.py", line 801, in __bootstrap_inner
    self.run()
  File "C:\Users\123\Anaconda2\lib\threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\Users\123\Anaconda2\lib\site-packages\gensim-2.1.0-py2.7-win-amd64.egg\gensim\models\word2vec.py", line 857, in job_producer
    sentence_length = self._raw_word_count([sentence])
  File "C:\Users\123\Anaconda2\lib\site-packages\gensim-2.1.0-py2.7-win-amd64.egg\gensim\models\doc2vec.py", line 729, in _raw_word_count
    return sum(len(sentence.words) for sentence in job)
  File "C:\Users\123\Anaconda2\lib\site-packages\gensim-2.1.0-py2.7-win-amd64.egg\gensim\models\doc2vec.py", line 729, in <genexpr>
    return sum(len(sentence.words) for sentence in job)
AttributeError: 'numpy.ndarray' object has no attribute 'words'

кто-нибудь знает, как решить эту проблему? Большое спасибо!!!


person Vera    schedule 15.10.2017    source источник
comment
Вы не передаете своей функции нужный объект. Вы читали документацию?   -  person cs95    schedule 15.10.2017
comment
Я новичок в doc2vec, не могли бы вы сказать мне, как именно мне изменить входные параметры функции обучения?   -  person Vera    schedule 15.10.2017


Ответы (1)


Выберите хорошую демонстрацию / учебное пособие для использования в качестве руководства - сначала запустите его, чтобы убедиться в правильности работы, а затем отрегулируйте его, чтобы вместо этого использовать ваши данные или параметры.

Например, есть Doc2Vec вводный блокнот Jupyter, включенный в gensim, doc2vec-lee.ipynb. Вы можете найти его в установленном каталоге gensim, в подкаталоге docs/notebooks или просмотреть в Интернете по адресу:

https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb

Теперь эта демонстрация относится к нереально крошечному набору данных игрушек - всего 300 коротких документов в несколько сотен слов. Doc2Vec обычно не дает хороших результатов для такого крошечного набора данных. Но в этой демонстрации используются нетипично маленькие size (50 измерений) и нетипично большие iter (55), чтобы получить некоторую полезность.

(При более типичных обучающих наборах от десятков тысяч до миллионов документов вы могли бы использовать больше типичных size из 100 или более измерений и более типичных iter всего 10-20.).

Но если вы построите такой хороший рабочий пример, вы не совершите определенных ошибок. Например:

  • Вы будете использовать текущий рекомендованный пример класса TaggedDocument, а не его более старый вариант LabeledSentence.

  • Вы не превратите свой корпус в numpy ndarray - совершенно ненужный шаг, который также является непосредственной причиной ошибки, которую вы видите.

  • Вы не будете вызывать train() несколько раз в своем собственном цикле, который подвержен ошибкам и почти всегда неправильный поступок, если только вы не опытный пользователь, уделяющий пристальное внимание управлению всеми параметрами. (Вы выполняете 10 циклов, и в каждом цикле выполняете 10 проходов по данным, и для каждого цикла класс будет управлять скоростью обучения alpha от 0,025 до 0,0001 - это означает, что он будет прыгать вверх и вниз во время обучения, что почти конечно, не то, что вам нужно.)

  • Вы не будете делать все документы одинаковыми, единственный тег 'TRAIN`` – which meansDoc2Vec` не может сделать ничего полезного. Алгоритму требуется множество документов с разными тегами, чтобы узнать контрастирующие векторы для разных документов / тегов.

person gojomo    schedule 15.10.2017