Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在大数据集上使用GATE时获取OOM_Java_Nlp_Gate - Fatal编程技术网

Java 在大数据集上使用GATE时获取OOM

Java 在大数据集上使用GATE时获取OOM,java,nlp,gate,Java,Nlp,Gate,我是NLP的新手,正在使用GATE。如果我为大数据集(包含7K+记录)运行代码,则会出现OOM异常。下面是发生异常的代码 /** * Run ANNIE * * @param controller * @throws GateException */ public void execute(SerialAnalyserController controller) throws GateException { TestLogger.info("Runni

我是NLP的新手,正在使用GATE。如果我为大数据集(包含7K+记录)运行代码,则会出现OOM异常。下面是发生异常的代码

    /**
 * Run ANNIE
 * 
 * @param controller
 * @throws GateException
 */
public void execute(SerialAnalyserController controller)
        throws GateException {
    TestLogger.info("Running ANNIE...");
    controller.execute();     /**** GateProcessor.java:217 ***/

    // controller.cleanup();
    TestLogger.info("...ANNIE complete");
}
以下是日志:

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.addEntry(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashMap.putAll(Unknown Source)
at gate.annotation.AnnotationSetImpl.<init>(AnnotationSetImpl.java:111)
at gate.jape.SinglePhaseTransducer.attemptAdvance(SinglePhaseTransducer.java:448)
at gate.jape.SinglePhaseTransducer.transduce(SinglePhaseTransducer.java:287)
at gate.jape.MultiPhaseTransducer.transduce(MultiPhaseTransducer.java:168)
at gate.jape.Batch.transduce(Batch.java:352)
at gate.creole.Transducer.execute(Transducer.java:116)
at gate.creole.SerialController.runComponent(SerialController.java:177)
at gate.creole.SerialController.executeImpl(SerialController.java:136)
at gate.creole.SerialAnalyserController.executeImpl(SerialAnalyserController.java:67)
at gate.creole.AbstractController.execute(AbstractController.java:42)
at in.co.test.GateProcessor.execute(GateProcessor.java:217)
线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.util.HashMap.addEntry(未知源) 位于java.util.HashMap.put(未知源) 位于java.util.HashMap.putAll(未知源) 在gate.annotation.AnnotationSetImpl。(AnnotationSetImpl.java:111) at gate.jape.SinglePhaseTransducer.attemptAdvance(SinglePhaseTransducer.java:448) 在gate.jape.SinglePhaseTransducer.transducer(SinglePhaseTransducer.java:287) at gate.jape.MultiPhaseTransducer.transducer(MultiPhaseTransducer.java:168) 在gate.jape.Batch.transduce(Batch.java:352) at gate.creole.transformer.execute(transformer.java:116) 在gate.creole.SerialController.runComponent(SerialController.java:177) 位于gate.creole.SerialController.executeImpl(SerialController.java:136) 在gate.creole.serialAnalyzerController.executeImpl(serialAnalyzerController.java:67) 执行(AbstractController.java:42) 位于in.co.test.GateProcessor.execute(GateProcessor.java:217) 我想知道执行函数到底发生了什么,以及如何解决它。谢谢。

在GATE中处理大型(或多个)文档可能需要大量内存,GATE需要大量空间来存储注释。另一方面,各种处理资源也需要大量内存:地名录、基于统计模型的标记器等

Gate developer GUI中的一个技巧是将文档语料库存储在数据存储中,然后仅加载语料库并运行管道。GATE足够智能,可以一次加载一个文档,处理它,然后保存并关闭它,然后再打开下一个文档。(您可以先将空语料库存储在数据存储中,然后从文件夹中“填充”它,这将再次逐个加载文档,而不会浪费内存。)

这正是您应该在代码中执行的操作,打开文档、处理、保存并关闭,然后再打开下一个文档。如果您有一个大文档,您应该拆分它(以一种不会破坏注释性能的方式)

以下是来自的代码示例:

在GATE中处理大型(或多个)文档可能需要大量内存,GATE需要大量空间来存储注释。另一方面,各种处理资源也需要大量内存:地名录、基于统计模型的标记器等

Gate developer GUI中的一个技巧是将文档语料库存储在数据存储中,然后仅加载语料库并运行管道。GATE足够智能,可以一次加载一个文档,处理它,然后保存并关闭它,然后再打开下一个文档。(您可以先将空语料库存储在数据存储中,然后从文件夹中“填充”它,这将再次逐个加载文档,而不会浪费内存。)

这正是您应该在代码中执行的操作,打开文档、处理、保存并关闭,然后再打开下一个文档。如果您有一个大文档,您应该拆分它(以一种不会破坏注释性能的方式)

以下是来自的代码示例:


你到底是怎么开始的?确切的命令是什么?我认为您会很好地处理Google“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间”。这很可能是Java的一般问题,而不是门的问题。@dmn:我不明白您启动门的确切意思是什么?我不是以独立的方式使用它,而是在我的代码中嵌入了GATE-JAR,并使用了一些功能。我在谷歌上搜索过,一般来说,大多数人更喜欢-Xmx来增加堆的大小。但是还有别的办法吗?是的,没错。使用-Xmx增加堆大小时会发生什么?我的7K记录的大小约为2.2MB。在使用-Xmx增加堆大小后,它运行的文件大小高达~1.87 MB,然后再次崩溃。而且,在这个过程中,它变得非常慢。我已将堆大小增加到512MB。您是如何启动GATE的?确切的命令是什么?我认为您会很好地处理Google“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间”。这很可能是Java的一般问题,而不是门的问题。@dmn:我不明白您启动门的确切意思是什么?我不是以独立的方式使用它,而是在我的代码中嵌入了GATE-JAR,并使用了一些功能。我在谷歌上搜索过,一般来说,大多数人更喜欢-Xmx来增加堆的大小。但是还有别的办法吗?是的,没错。使用-Xmx增加堆大小时会发生什么?我的7K记录的大小约为2.2MB。在使用-Xmx增加堆大小后,它运行的文件大小高达~1.87 MB,然后再次崩溃。而且,在这个过程中,它变得非常慢。我已将堆大小增加到512MB。
// for each piece of text:

Document doc = (Document)Factory.createResource("gate.corpora.DocumentImpl",
              Utils.featureMap("stringContent", text, "mimeType", mime));
Corpus corpus = Factory.newCorpus("webapp corpus");
try {
  corpus.add(doc);
  application.execute();
  ...
finally {
  corpus.clear();
  Factory.deleteResource(doc);
}