Как включить многоядерную обработку с помощью sklearn LDA? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть модель тем, использующая sklearn LDA.В моем корпусе есть ~ 75K документов и матрица, генерируемая из корпуса: X.shape = (74645, 91542)

Когда я передаю эту матрицу в sklearn LDA, это занимает 3 часа на моем локальном компьютере и на сервере, который он использует 11 часов .

Итак, мой вопрос:

Есть ли способ использовать многоядерную обработку в LL sklearn?или есть способ значительно сократить время обработки?

Любая помощь будет высоко оценена.

Пожалуйста, взгляните на код:

строка, которая генерирует lda_output, принимаетчасов работы

vectorizer = CountVectorizer(stop_words='english', ngram_range= (1,2), vocabulary = word_list)
X = vectorizer.fit_transform(documents)

lda_model = LatentDirichletAllocation(n_components=50,            # Number of topics
                                      learning_decay=0.7,
                                      max_iter=10,               # 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
                                      n_jobs = -1,               # Use all available CPUs
                                     )

#--Because before this line system was running out of memory

%env JOBLIB_TEMP_FOLDER=/tmp

start_time = datetime.datetime.now()

lda_output = lda_model.fit_transform(X)

end_time = datetime.datetime.now()

run_time_lda = end_time - start_time

#output:
#datetime.timedelta(0, 38157, 730304) ~ 11hrs

1 Ответ

0 голосов
/ 03 февраля 2019

вы, возможно, захотите переосмыслить свой словарный запас word_list, который кажется больше, чем количество ваших документов.Попробуйте построить словарь из самих документов, если он может работать в вашей проблеме.

Также укажите min_df, чтобы удалить слова с очень низкой частотой.Может быть, лемматизация / stemming может быть полезна для уменьшения размера словарного запаса, и это также поможет lda изучать лучшие темы.

Я бы порекомендовал не использовать биграммы / триграммы для lda-моделирования, потому что это может привести к непонятной модели.

...