余弦()与R中稀疏矩阵的相似性 - 如何加速? (NLP

时间:2016-03-28 08:18:42

标签: r performance nlp

我正在使用R cosine()函数{“lsa”package}来确定存储在稀疏矩阵中的2个向量之间的相似性。每个矩阵有240,000行,3100列。 1000行的计算时间约为2分钟,这意味着完整数据集的处理时间为8小时。我正在寻找加快处理时间的方法,因为我必须多次运行它。

这是我的代码:

t1 <- Sys.time()
for (i in 1:NROWS) {
  title_cosine_sim[i] <- cosine(dtm_search[i,],dtm_title[i,])
  desc_cosine_sim[i] <- cosine(dtm_search[i,], dtm_desc[i, ])
  if (i%%1000 == 0 ) {
    cat("processed ", i, "rows out of 240,760...", system.time(), "\n")
  }
}
print( difftime( Sys.time(), t1, units = 'sec'))
cat("finish")

我尝试使用并行处理,但它没有加快这个过程:

c1 <- makeCluster(4)
registerDoParallel(c1)

    #calculate title similarity vector
    t1 <- Sys.time()
    title_cosine_sim <- foreach(z = 1:NUMROWS, .combine = 'rbind', .packages =  c('lsa', 'Matrix')) %dopar% {
        cosine( dtm_search[z,],  dtm_title[z,] )
    }

    # calculate description similarity vector
    t1 <- Sys.time() 
    desc_cosine_sim <- foreach(z = 1:NUMROWS, .combine = 'rbind', .packages =  c('lsa', 'Matrix')) %dopar% {
        cosine( dtm_search[z,],dtm_title[z,] )
    }


stopCluster(c1)
print( difftime( Sys.time(), t1, units = 'sec'))
cat("finish PARALLEL processing")

上述每个循环在1000行中花费大约65秒。所以这里没有多少节省......

欢迎使用并行计算或其他方式改进代码的任何想法。 谢谢!

P.S。戴尔4核,16G内存,Windows 10.

0 个答案:

没有答案