Я обучил модель 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.'