【问题标题】:Why is the sklearn LDA transform VERY SLOW?为什么 sklearn LDA 转换非常慢?
【发布时间】:2021-05-11 06:51:05
【问题描述】:

我正在使用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 工作得更快?

【问题讨论】:

    标签: performance scikit-learn lda topic-modeling


    【解决方案1】:

    当您要在单个文本向量上转换 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2013-06-29
      • 2020-06-11
      • 1970-01-01
      • 2017-08-01
      • 2017-09-22
      相关资源
      最近更新 更多