我尝试从https://cran.r-project.org/web/packages/text2vec/vignettes/files-multicore.html执行示例但是使用我的文件“text” - 3.7Gb纯文本,使用Perl脚本从维基百科XML转储构建 - http://mattmahoney.net/dc/textdata.html
setwd("c:/rtest")
library(text2vec)
library(doParallel)
N_WORKERS = 2
registerDoParallel(N_WORKERS)
it_files_par = ifiles_parallel(file_paths = "text")
it_token_par = itoken_parallel(it_files_par, preprocessor = tolower, tokenizer = word_tokenizer)
vocab = create_vocabulary(it_token_par)
这会导致错误:
Error in unserialize(socklist[[n]]) : error reading from connection
我有8Gb RAM,创建此文件的word2vec模型没有任何错误。
答案 0 :(得分:0)
首先,在单个文件上使用并行迭代器是没有意义的 - 每个文件在单独的R工作进程中处理。所以这里会比itoken
更糟糕。它还涉及将每个工作者的结果发送到主进程。在这里,我们看到结果太大,无法通过套接字发送。
长话短说 - 只需使用itoken
或将文件拆分成几个较小的文件。