0

私は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)

実行機能で正確に何が起こっているのか、どのように解決できるのかを知りたいです。ありがとう。

4

1 に答える 1

6

GATEで大きな(または多数の)ドキュメントを処理するには、大量のメモリが必要になる可能性があります。GATEは、注釈を格納するために大量のスペースを必要とします。一方、地名集、統計モデルベースのタガーなど、さまざまな処理リソースにも大量のメモリが必要です。

Gate開発者GUIの秘訣は、ドキュメントのコーパスをデータストアに保存してから、コーパスのみをロードしてパイプラインを実行することです。GATEは、一度に1つのドキュメントをロードして処理し、保存して閉じてから次のドキュメントを開くのに十分な機能を備えています。(最初に空のコーパスをデータストアに保存してから、フォルダーから「入力」することができます。これにより、メモリを無駄にすることなく、ドキュメントが1つずつ読み込まれます。)

これはまさに、次のコードを開く前に、コードで実行し、ドキュメントを開き、処理し、保存して閉じる必要があることです。大きなドキュメントが1つしかない場合は、それを分割する必要があります(注釈のパフォーマンスを損なわない方法で)。

「AdvancedGATEEmbedded」モジ​​ュールのコード例を次に示します。

// 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);
}
于 2013-03-04T10:46:37.947 に答える