如何并行化主题模型R包

问题描述 投票:4回答:2

我有一系列文档(约50,000个),已经转换为语料库,并且已经使用R中的topicmodels包构建了LDA对象。不幸的是,要测试150多个主题,需要花费几个小时。

到目前为止,我发现我可以使用:同时测试多个不同大小的群集:

library(topicmodels)
library(plyr)
library(foreach)
library(doMC)
registerDoMC(5) # use 5 cores

dtm # my documenttermmatrix

seq <- seq(200,500, by=50)

models <- llply(seq, function(d){LDA(dtm, d)}, .parallel=T)

没有办法并行化LDA功能,以使其运行更快(而不是一次运行多个LDA)?

r parallel-processing lda topic-modeling
2个回答
3
投票

我不熟悉LDA功能,但是可以说您将语料库分为16个部分,并将每个部分放在一个名为corpus16list的列表中。

要并行运行它,通常会执行以下操作:

library( doParallel )
cl <- makeCluster( 16 ) # for 16 processors
registerDoParallel( cl )


# now start the chains
nchains <- 16
my_k <- 6 ## or a vector with 16 elements
results_list <- foreach(i=1:nchains , 
                    .packages = c( 'topicmodels') %dopar% {
         result <- LDA(corpus16list[[i]], k=my_k ,  control = my_control)}, .progress = "text"))


         return(result) }

结果为results_list,这是一个包含来自16个链的16个输出的列表。您可以根据需要加入它们,也可以在foreach中使用.combine函数(这不在此问题的范围之内。)>

您可以使用i发送controlk或您需要的任何其他值。

此代码应在Windows和Linux上运行,并且需要多少个内核。


0
投票

我认为您不能并行化LDA模型本身,因为它正在优化最大可能性,因此它需要知道先前的可能性才能进行优化。

© www.soinside.com 2019 - 2024. All rights reserved.