gpt4 book ai didi

java - Mallet CRF 分类器出现 OutOfMemoryError

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:40 25 4
gpt4 key购买 nike

分类器经常因 OutOfMemoryError 失败。请提出建议。

我们有 UIMA 管道,它调用 5 个模型 jar(基于 mallet CRF),每个大约 30MB。 -Xms 设置为 2G,-Xmx 设置为 4G。

有关于设置堆空间的指南/基准吗?请指出是否有任何多线程环境指南。

我确实尝试应用补丁https://code.google.com/p/cleartk/issues/detail?id=408 ,这并没有解决问题。

堆转储显示堆大小的 42% 是 char[],15% 是 String。

java.lang.OutOfMemoryError: Java heap space
at cc.mallet.types.IndexedSparseVector.setIndex2Location(IndexedSparseVector.java:109)
at cc.mallet.types.IndexedSparseVector.dotProduct(IndexedSparseVector.java:157)
at cc.mallet.fst.CRF$TransitionIterator.<init>(CRF.java:1856)
at cc.mallet.fst.CRF$TransitionIterator.<init>(CRF.java:1835)
at cc.mallet.fst.CRF$State.transitionIterator(CRF.java:1776)
at cc.mallet.fst.MaxLatticeDefault.<init>(MaxLatticeDefault.java:252)
at cc.mallet.fst.MaxLatticeDefault.<init>(MaxLatticeDefault.java:197)
at cc.mallet.fst.MaxLatticeDefault$Factory.newMaxLattice(MaxLatticeDefault.java:494)
at cc.mallet.fst.MaxLatticeFactory.newMaxLattice(MaxLatticeFactory.java:11)
at cc.mallet.fst.Transducer.transduce(Transducer.java:124)
at org.cleartk.ml.mallet.MalletCrfStringOutcomeClassifier.classify(MalletCrfStringOutcomeClassifier.java:90)

模型是基于MalletCrfStringOutcomeDataWriter创建的。

AnalysisEngineFactory.createEngineDescription(DataChunkAnnotator.class,
CleartkSequenceAnnotator.PARAM_IS_TRAINING, true, DirectoryDataWriterFactory.PARAM_OUTPUT_DIRECTORY,
options.getModelsDirectory(), DefaultSequenceDataWriterFactory.PARAM_DATA_WRITER_CLASS_NAME, MalletCrfStringOutcomeDataWriter.class)

注释器代码如下所示。

if (this.isTraining()) {
List<DataAnnotation> namedEntityMentions = JCasUtil.selectCovered(jCas, DataAannotation.class, sentence);
List<String> outcomes = this.chunking.createOutcomes(jCas, tokens, namedEntityMentions);
this.dataWriter.write(Instances.toInstances(outcomes, featureLists));
} else {
List<String> outcomes = this.classifier.classify(featureLists);
this.chunking.createChunks(jCas, tokens, outcomes);
}

谢谢

最佳答案

您可以尝试:

  1. 增加Xmx
  2. 深入分析堆:所有字符串均由char[]支持- 所以知道 42% 和 15% 这样的数字没有帮助 - 你应该调查程序的哪一部分分配这些字符串。
  3. 因为看起来错误是在行中触发的:
    List<String> outcomes = this.classifier.classify(featureLists);
    您可以从那里开始:尝试找出 featureLists 中的内容。 ,它的大小是多少等等,看看方法classify有什么作用这样做,如果你能“帮助”它在内存方面变得更有效率。例如,减少String的使用并将其替换为 StringBuilderappend (只是一个例子)。

关于java - Mallet CRF 分类器出现 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com