首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pellet作为推理器的OutOfMemoryError

使用Pellet作为推理器的OutOfMemoryError
EN

Stack Overflow用户
提问于 2012-04-23 19:44:55
回答 1查看 862关注 0票数 3

我尝试使用Pellet推断数据,但我的应用程序在推理过程中总是因为"OutOfMemoryError: Java heap space“而崩溃。

正如其他地方所建议的那样,我已经尝试增加堆大小,目前我正在使用这些VM参数:"-XX:MaxPermSize=256m -Xmx6144m“。此外,我必须设置'PelletOptions.USE_CONTINUOUS = true',但到目前为止,我只能将崩溃延迟几分钟。(到目前为止最长的跑步时间: 30分钟)。

我将数据存储在Jena TDB triplestore中。它的总大小是170MB,由962117条语句组成。本体已经在Protege中建模,当与Hermit或Fact++进行推理时,没有不一致之处(当然,在这一点上没有数据)。我想要推断的语句已经使用等价的类(例如:A和(hasX some X))、逆属性(hasX <--> isXOf)和一些传递属性进行了建模。有55个类: 14个根类,11个等价类(一个根类的所有子类型)。目前,已将14个类的实例添加到tripestore中。

我也使用了pellint来分析我的本体,但我不确定从这个结果中得出哪些结论:

代码语言:javascript
复制
[Untyped classes]
- http://www.w3.org/2002/07/owl#AllDisjointClasses

[Untyped object roles]
- http://www.w3.org/2002/07/owl#topObjectPriority
- http://www.w3.org/2002/07/owl#members

[Untyped datatype roles]
- http://www.w3.org/2002/07/owl#qualifiedCardinality

[Untyped individuals]
- 4 BNodes

下面是我创建InfModel的代码:

代码语言:javascript
复制
 Dataset dataset = TDBFactory.createDataset(..);
 Model model = dataset.getDefaultModel();

 OntModel ont = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC,model);
 ont.read("file:.." , "RDF/XML");

 PelletOptions.USE_CONTINUOUS_RULES = true;
 Reasoner reasoner = PelletReasonerFactory.theInstance().create();
 reasoner = reasoner.bindSchema(ont);

 InfModel infModel = infModel = ModelFactory.createInfModel(reasoner, model);

这就是我查询数据的基本方式:

代码语言:javascript
复制
 QueryExecution qe = QueryExecutionFactory.create("SELECT ...", infModel);
 Resultset rs = qe.execSelect();

 while(rs.hasNext())
 {
     QuerySolution sol = rs.nextSolution();
     ...
 }
 qe.close();

正如您所看到的,在查询数据、准备或验证InfModel时,我收到了各种异常。你有什么想法,我可以尝试解决这个错误吗?

代码语言:javascript
复制
 java.lang.OutOfMemoryError: Java heap space
 at java.util.Arrays.copyOf(Unknown Source)
 at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
 at java.lang.AbstractStringBuilder.append(Unknown Source)
 at java.lang.StringBuilder.append(Unknown Source)
 at java.net.URLStreamHandler.parseURL(Unknown Source)
 at sun.net.www.protocol.file.Handler.parseURL(Unknown Source)
 at java.net.URL.<init>(Unknown Source)
 at java.net.URL.<init>(Unknown Source)
 at sun.misc.URLClassPath$FileLoader.getResource(Unknown Source)
 at sun.misc.URLClassPath.getResource(Unknown Source)
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.warn(QueryIteratorCheck.java:114)
 at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.dump(QueryIteratorCheck.java:95)
 at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.checkForOpenIterators(QueryIteratorCheck.java:68)
 at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.close(QueryIteratorCheck.java:50)
 at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.closeIterator(QueryIteratorWrapper.java:50)
 at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.close(QueryIteratorBase.java:184)
 at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCloseable.close(QueryIteratorCloseable.java:39)
 at com.hp.hpl.jena.sparql.engine.QueryExecutionBase.close(QueryExecutionBase.java:180)


 java.lang.OutOfMemoryError: Java heap space
 at shared.SharedObjectFactory.build(SharedObjectFactory.java:303)
 at aterm.pure.PureFactory.makeAppl(PureFactory.java:191)
 at aterm.pure.PureFactory.makeAppl(PureFactory.java:185)
 at aterm.pure.PureFactory.makeAppl(PureFactory.java:228)
 at org.mindswap.pellet.utils.ATermUtils.makeLiteral(ATermUtils.java:245)
 at org.mindswap.pellet.ABox.addLiteral(ABox.java:1696)
 at org.mindswap.pellet.tableau.completion.rule.SomeValuesRule.applySomeValuesRule(SomeValuesRule.java:174)
 at org.mindswap.pellet.tableau.completion.rule.SomeValuesRule.apply(SomeValuesRule.java:64)
 at org.mindswap.pellet.tableau.completion.rule.AbstractTableauRule.apply(AbstractTableauRule.java:64)
 at org.mindswap.pellet.tableau.completion.SROIQStrategy.complete(SROIQStrategy.java:157)
 at org.mindswap.pellet.ABox.isConsistent(ABox.java:1423)
 at org.mindswap.pellet.ABox.isConsistent(ABox.java:1260)
 at org.mindswap.pellet.KnowledgeBase.consistency(KnowledgeBase.java:1987)
 at org.mindswap.pellet.KnowledgeBase.isConsistent(KnowledgeBase.java:2061)
 at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:247)
 at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:230)
 at com.hp.hpl.jena.rdf.model.impl.InfModelImpl.prepare(InfModelImpl.java:89)


 java.lang.OutOfMemoryError: Java heap space
 at org.mindswap.pellet.tableau.branch.DisjunctionBranch.tryBranch(DisjunctionBranch.java:197)
 at org.mindswap.pellet.tableau.branch.Branch.tryNext(Branch.java:117)
 at org.mindswap.pellet.tableau.completion.rule.ChooseRule.apply(ChooseRule.java:82)
 at org.mindswap.pellet.tableau.completion.rule.ChooseRule.apply(ChooseRule.java:56)
 at org.mindswap.pellet.tableau.completion.rule.AbstractTableauRule.apply(AbstractTableauRule.java:64)
 at org.mindswap.pellet.tableau.completion.SROIQStrategy.complete(SROIQStrategy.java:157)
 at org.mindswap.pellet.ABox.isConsistent(ABox.java:1423)
 at org.mindswap.pellet.ABox.isConsistent(ABox.java:1260)
 at org.mindswap.pellet.KnowledgeBase.consistency(KnowledgeBase.java:1987)
 at org.mindswap.pellet.KnowledgeBase.isConsistent(KnowledgeBase.java:2061)
 at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:247)
 at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:230)
 at org.mindswap.pellet.jena.PelletInfGraph.validate(PelletInfGraph.java:564)
 at com.hp.hpl.jena.rdf.model.impl.InfModelImpl.validate(InfModelImpl.java:111)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-02 21:25:45

infModel的查询显然导致了Pellet生成成百上千条owl:differentFrom语句。解决方案是使用ModelExtractor

代码语言:javascript
复制
ModelExtractor ext = new ModelExtractor(inf); 
Model m = ext.extractModel();
QueryExecution qe = QueryExecutionFactory.create("SELECT ...", m);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10279894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档