我正在尝试使用coreNLP
包。我运行了以下命令,遇到 GC开销限制超出错误。
library(rJava)
downloadCoreNLP()
initCoreNLP()
错误是这样的:
从edu / stanford / nlp / models / ner / english.conll.4class.distsim.crf.ser.gz加载分类器... rJava ::。jnew(“edu.stanford.nlp.pipeline.StanfordCoreNLP”中的错误“,basename(path)): java.lang.OutOfMemoryError:超出了GC开销限制 换行时出错:无法打开连接
我对Java知之甚少,有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
我发现了一个更通用的解决方案:增加rJava的堆空间,如here所述:
原因:依赖于rJava的库的默认堆大小为512MB。超过这个最大尺寸相对容易。
解决方案:在rJava的选项支持中增加JVM堆大小:
options(java.parameters = "-Xmx4096m")
请注意,此步骤必须在加载任何软件包之前执行。
然后我跑了:
initCoreNLP(mem = "4g")
...并且整个CoreNLP已成功加载并运行。
答案 1 :(得分:0)
尝试以下方法,但徒劳无功 -
options(java.parameters =“ - Xmx1000m”) - 增加堆大小
gc() - 这将导致垃圾收集自动发生
重新启动机器后,最终自行解决了!
答案 2 :(得分:0)
@indi我遇到了同样的问题(见R's coreNLP::initCoreNLP() throws java.lang.OutOfMemoryError),但能够提出一个比重新启动更可重复的解决方案。
init命令的完整语法是
initCoreNLP(libLoc, parameterFile, mem = "4g", annotators)
增加mem
并没有帮助我,但我意识到你和我都被ner
注释器(命名实体识别)中的一个分类器卡住了。由于我所需要的只是词性标注,我用以下内容替换了init命令:
initCoreNLP(mem = "8g", annotators = c("tokenize", "ssplit", "pos"))
这导致init命令在闪存中执行且没有内存问题。顺便说一下,我将mem
增加到8g只是因为我有那么多RAM。我敢肯定我可以把它留在默认的4g上,它会很好。
我不知道你是否需要ner
注释器。如果没有,则显式列出annotators
参数。以下是可能值的列表:http://stanfordnlp.github.io/CoreNLP/annotators.html。只需选择你完成工作所需的那些。如果你确实需要ner
,那么再次找出你需要的最小注释器集并指定它们。
所以你(希望其他人)去吧!