我使用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工作得更快?
当你要在单个文本向量上变换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