0

我正在尝试将大小为 1.2GB 的带注释的 NLP 模型转换为数据帧。我在 R 中使用 Udpipe 包进行自然语言处理,代码如下:

# Additional Topic Models
# annotate and tokenize corpus
model <- udpipe_download_model(language = "english")
udmodel_english <- udpipe_load_model(model$file_model)
s <- udpipe_annotate(udmodel_english, cleaned_text_NLP)
options(java.parameters = "-Xmx32720m")
memory.limit(3210241024*1024)
x <- data.frame(s)

请注意,我有 32GB RAM 并将所有可用内存分配给 R 以运行代码。我还尝试删除存储在 R 环境空间中与运行上述代码无关的大型对象。R 似乎无法为任务分配足够的内存,结果是以下错误消息:

Error in strsplit(x$conllu, "\n") : 
  could not allocate memory (4095 Mb) in C function 'R_AllocStringBuffer' 

我的问题有两个:

  1. 上面的错误信息是什么意思?
  2. 有哪些解决方法可以解决此问题?
4

1 回答 1

1

可能您有很多文档要注释。最好按块注释,如https://cran.r-project.org/web/packages/udpipe/vignettes/udpipe-parallel.html

以下代码将在 2 个内核上并行注释 50 个文档块,并且基本上执行您的 data.frame 命令。您将不再遇到问题,因为该函数对 50 个文档的每个块而不是在完整数据集上进行了 strsplit,显然注释文本的大小太大而无法适应 R 中字符串缓冲区的限制。但下面的代码将解决你的问题。

x <- udpipe(cleaned_text_NLP, udmodel_english, parallel.cores = 2L, parallel.chunksize = 50)
于 2020-12-03T12:02:30.523 回答