Как исправить «ValueError: предоставленные данные имеют 1 измерение при обучении с размером элемента 17721», прогнозируя с помощью модели LDA sklearn - PullRequest
0 голосов
/ 09 июля 2019

Я обучил модель LDA на большом наборе данных (который состоял из 16 тысяч различных статей) и сохранил модель с рассолом, чтобы использовать ее позже. Когда я пытался использовать его для других данных (выбрал 1 статью и хотел посмотреть, какая тема будет назначена), я получаю сообщение об ошибке «ValueError: предоставленные данные имеют 1 измерение, в то время как модель обучена с размером элемента 17721».

Это мой код для тренировочной модели и ее сохранения.

prepared_data = []
prepared_string = ""
for article_text in all_article_text:
   paragraph = article_text.get('text')
   paragraph is not None and len(paragraph) > 20:
   split_words = paragraph.split()
   table = str.maketrans('','', string.punctuation)
   stripped = [w.translate(table) for w in split_words]
   lower_words = [word.lower() for word in stripped]
   words_with_stops_words = [word for word in lower_words if word.isalpha()]
   words = [w1 for w1 in words_with_stops_words if not w1 in stop_words]
   stemmed_words = [PorterStemmer().stem(word) for word in words]
   for i in stemmed_words:
         if len(i) > 2:
         prepared_data.append(i)
         prepared_string += i + " "

    # all_documents.append(prepared_data)
   if len(prepared_string) > 20:
        all_documents.append(prepared_string)

vectorizer = CountVectorizer(analyzer='word',
                             min_df=1
                             )

data_vectorized = vectorizer.fit_transform(all_documents)

model = LatentDirichletAllocation(n_topics=10,               # Number of topics
                                      max_iter=3000,               # Max learning iterations 
                                      learning_method='online',
                                      random_state=100,          # Random state
                                      batch_size=128,            # n docs in each learning iter
                                      evaluate_every = -1,       # compute perplexity every n iters, default: Don't
                                      learning_decay= .5
                                  )

model.fit(data_vectorized)

lda_output = model.transform(data_vectorized)

filename = 'LDA_model3000_iter.sav'
pickle.dump(model, open(filename, 'wb'))

## Loading model
file_name = 'LDA_model3000_iter.sav'
loaded_model = pickle.load(open(file_name,'rb'))

vectorizer = CountVectorizer(analyzer='word',
                             min_df=1,
                             vocabulary=all_documents
                             )

vectorizer._validate_vocabulary()

new_vect = vectorizer.transform(all_documents)

loaded_model.transform(new_vect)

Но я получаю 'ValueError: предоставленные данные имеют 1 измерение, в то время как модель обучена с размером элемента 17721.'

...