如何使用 sklearn LDA 启用多核处理



我有一个使用 sklearn LDA 的主题模型。我的语料库有~75K文档,从语料库生成的矩阵形状是X.shape = (74645, 91542)

当我将此矩阵传递给sklearn LDA时,我的本地需要 3 小时,而在服务器上它使用 11 小时

所以我的问题是:

有没有办法在sklearn LDA中使用多核处理?或者有没有办法显着减少我的处理时间?

任何帮助将不胜感激。

请看一下代码:

生成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

您可能需要重新考虑词汇word_list,这似乎比您的文档计数还要大。 尝试从文档本身构建词汇表,如果它可以解决您的问题。

还要指定删除极低频率单词的min_df。可能是词形还原/词干提取可用于减少词汇量,这也有助于 lda 学习更好的主题。

我建议不要使用 bigrams/trigrams 进行 lda 建模,因为这可能会导致无法解释的模型。

相关内容

  • 没有找到相关文章

最新更新