首页 > 解决方案 > 为什么 sklearn LDA 转换非常慢?

问题描述

我正在使用sickit-learn Latent Dirichlet Allocation 进行主题建模。lda_object 适合文本语料库。现在,我们将其拟合到一个文本中以了解它的主题权重。

def append_lda_features(df, lda_vectorizer, tfidf+vector):

    from time import time
    st = time()

    lda_vector = lda_vectorizer.transform(tfidf_vector)

    print(time() - st)

    lda_vector = pd.DataFrame(lda_vector)
    lda_vector.columns = ['lda_word_'+str(i)
                           for i in range(lda_vectorizer.n_components)]
    return pd.concat([df, lda_vector], axis=1)

这是大约几秒钟的打印值0.67,非常高。考虑到我的 lda 只包含 15 个组件,而 vectorizer 有 100000 个标记:

LatentDirichletAllocation(n_components=15, n_jobs=30, verbose=1)

我应该怎么做才能使 LDA 工作得更快?

标签: performancescikit-learnldatopic-modeling

解决方案


当您要lda在单个文本向量上转换 时,最好不要设置n_jobs = 1.

这样一来,它就不需要那么多时间,因为它不需要首先并行化工作。这显然需要明显的开销。

def append_lda_features(df, lda_vectorizer, tfidf+vector):

    from time import time
    st = time()

    lda_vectorizer.n_jobs = 1
    lda_vector = lda_vectorizer.transform(tfidf_vector)

    print(time() - st)

    lda_vector = pd.DataFrame(lda_vector)
    lda_vector.columns = ['lda_word_'+str(i)
                           for i in range(lda_vectorizer.n_components)]
    return pd.concat([df, lda_vector], axis=1)

这个给了我0.01几秒钟,而不是0.6


推荐阅读