我有一个使用sklearn LDA
的主题模型。我的语料库有〜75K 文档,从语料库生成的矩阵形状为X.shape = (74645, 91542)
当我将此矩阵传递给sklearn LDA
时,在本地和服务器上需要3个小时,而在 11个小时。
所以我的问题是:
任何帮助将不胜感激。
请看一下代码:
生成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
答案 0 :(得分:0)
您可能想重新考虑您的词汇表word_list
,该词汇表似乎比文档数还多。如果可以解决您的问题,请尝试从文档本身构建词汇表。
还要指定min_df
来删除频率非常低的单词。可能是残词化/词干可用于减少词汇量,这也有助于LDA学习更好的主题。
我建议不要对lda建模使用bigrams / trigram,因为它可能导致无法解释的模型。