【问题标题】:How to parallelize topicmodels R package如何并行化 topicmodels R 包
【发布时间】:2015-03-21 07:32:12
【问题描述】:

我有一系列文档(约 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 中并行化主题模型包中的 LDA 函数(类似于我发布的链接中显示的内容。那里的讨论仅涵盖完全不同的 Windows 实现)?我也想知道是否还有其他选择,特别是在 R 中。
  • 这就是您的问题不清楚的原因——您的计算环境是什么,哪些并行实现在您的环境中不起作用?
  • 在真实操作系统上的并行化比在 Windows 上容易得多。例如,使用foreach 替代方案并阅读一些关于可在 linux 上使用的(几个)并行后端的小插曲。
  • fg nu,我说我使用的是“AWS 服务器(16 核)是 linux”。您对我的环境有更具体的问题吗?泰勒,什么是 MWE? Roland,我发现我可以混合使用 Plyr、foreach 和 DoMC 包来并行运行具有不同集群数量(即 200、250、300 等)的 LDA 函数。是否有任何实现可以并行化 LDA 函数本身以使其更快?

标签: r parallel-processing lda topic-modeling


【解决方案1】:

我不熟悉 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 上运行,并且你需要多少内核。

【讨论】:

  • OP 已经有代码可以独立地并行运行 LDA,他正在寻找 AFAICT 算法本身的并行实现。
  • fg nu 是正确的,但感谢替代脚本。
  • 谢谢,我在 OP 编辑​​原始问题之前编写了这个脚本。我不知道他已经有了并行脚本。
  • 我认为将这个问题的所有可能选项集中在一个地方肯定会很有帮助。当您搜索此内容时,出现的结果并不多。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多