【发布时间】:2014-07-09 22:59:31
【问题描述】:
我使用 MALLET 进行主题建模。
http://mallet.cs.umass.edu/topics.php
首先,我尝试按照说明导入训练文档集。
bin/mallet import-dir --input /data/topic-input --output topic-input.mallet --keep-sequence --remove-stopwords
我总是得到OutOfMemoryError,尽管我根据下一页更改"bin/mallet.bat"。
Mallet topic modelling
我设置了set MALLET_MEMORY=32G。
我的数据集大小是 30GB。
计算机内存足够。
我收到以下错误。
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Arrays.java:3658)
at java.lang.String.<init>(String.java:201)
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:909)
at java.lang.StringBuffer.subSequence(StringBuffer.java:473)
at cc.mallet.extract.StringSpan.constructTokenText(StringSpan.java:49)
at cc.mallet.extract.StringSpan.<init>(StringSpan.java:33)
at cc.mallet.pipe.CharSequence2TokenSequence.pipe(CharSequence2TokenSequence.java:68)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:294)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:290)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:290)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:290)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.types.InstanceList.addThruPipe(InstanceList.java:267)
at cc.mallet.classify.tui.Text2Vectors.main(Text2Vectors.java:312)
$ bin/mallet import-dir --input ../Text --output topic-input.mallet --keep-sequence --remove-stopwords
Labels =
../Text
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3658)
at java.lang.String.<init>(String.java:201)
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:909)
at java.lang.StringBuffer.subSequence(StringBuffer.java:473)
at cc.mallet.extract.StringSpan.constructTokenText(StringSpan.java:49)
at cc.mallet.extract.StringSpan.<init>(StringSpan.java:33)
at cc.mallet.pipe.CharSequence2TokenSequence.pipe(CharSequence2TokenSequence.java:68)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:294)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:290)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:290)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:290)
at cc.mallet.pipe.Pipe$SimplePipeInstanceIterator.next(Pipe.java:282)
at cc.mallet.types.InstanceList.addThruPipe(InstanceList.java:267)
at cc.mallet.classify.tui.Text2Vectors.main(Text2Vectors.java:312)
我该如何解决这个问题?谢谢你。
【问题讨论】:
-
它是否试图将 30 GB 读入内存?分析它并让我们知道它是否正在尝试创建一个巨大的 String 实例?
-
我不确定 MALLET 的实际工作原理,但似乎程序试图读取 30 GB 的文本目录。
-
30G 是 吨 的数据!您可以访问具有更多内存的机器吗?如果没有,如果你给我发电子邮件,我可以运行分析。
标签: java out-of-memory mallet