首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何并行化topicmodels包

如何并行化topicmodels包
EN

Stack Overflow用户
提问于 2015-01-22 21:26:38
回答 2查看 2.2K关注 0票数 5

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

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

代码语言:javascript
复制
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)?

EN

回答 2

Stack Overflow用户

发布于 2015-01-22 22:44:24

我不熟悉LDA函数,但是假设您将语料库分成16个部分,并将每个部分放在一个名为corpus16list的列表中。

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

代码语言:javascript
复制
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上工作,以及你需要多少内核。

票数 3
EN

Stack Overflow用户

发布于 2020-02-05 02:02:08

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28089946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档