【问题标题】:initCoreNLP() method call from the Stanford's R coreNLP package throws error来自斯坦福的 R coreNLP 包的 initCoreNLP() 方法调用引发错误
【发布时间】:2015-10-08 12:28:44
【问题描述】:

我正在尝试使用coreNLP 包。我运行以下命令并遇到 GC 开销限制超出 错误。

library(rJava)

downloadCoreNLP()

initCoreNLP()

错误是这样的:

从 edu/stanford/nlp/models/ner/english.conll.4class.distim.crf.ser.gz 加载分类器 ... rJava::.jnew("edu.stanford.nlp.pipeline.StanfordCoreNLP) 中的错误“,基本名称(路径)): java.lang.OutOfMemoryError:超出 GC 开销限制 总结时出错:无法打开连接

我不太了解 Java,有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: r stanford-nlp


    【解决方案1】:

    我找到了一个更通用的解决方案:增加 rJava 的堆空间,如 here 所述:

    原因:依赖 rJava 的库的默认堆大小为 512MB。超过这个最大尺寸相对容易。

    解决方案:在 rJava 的选项支持中增加 JVM 堆大小:

    options(java.parameters = "-Xmx4096m")
    

    请注意,必须在加载任何包之前执行此步骤


    然后我跑了:

    initCoreNLP(mem = "4g")
    

    ...整个 CoreNLP 成功加载并运行。

    【讨论】:

    • 没有意识到必须在加载任何包之前执行设置 java.parameters 步骤!它终于奏效了!黄金帮助。
    【解决方案2】:

    @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,那么再次找出您需要的最小注释器集并指定它们。

    所以你(希望其他人)去吧!

    【讨论】:

      【解决方案3】:

      尝试了以下方法,但徒劳无功 -

      options(java.parameters = "-Xmx1000m") - 增加堆大小
      gc() - 这将导致垃圾收集自动发生

      重启机器后终于自行解决了!

      【讨论】:

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