From: <lor...@us...> - 2010-12-13 20:36:40
|
Revision: 2554 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2554&view=rev Author: lorenz_b Date: 2010-12-13 20:36:33 +0000 (Mon, 13 Dec 2010) Log Message: ----------- Some fixes for eval. Modified Paths: -------------- trunk/autosparql/src/main/java/org/dllearner/autosparql/server/ExampleFinder.java trunk/autosparql/src/main/java/org/dllearner/autosparql/server/Generalisation.java trunk/autosparql/src/main/java/org/dllearner/autosparql/server/evaluation/EvaluationScript.java trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/SPARQLQueryGeneratorCachedImpl.java Modified: trunk/autosparql/src/main/java/org/dllearner/autosparql/server/ExampleFinder.java =================================================================== --- trunk/autosparql/src/main/java/org/dllearner/autosparql/server/ExampleFinder.java 2010-12-13 19:54:28 UTC (rev 2553) +++ trunk/autosparql/src/main/java/org/dllearner/autosparql/server/ExampleFinder.java 2010-12-13 20:36:33 UTC (rev 2554) @@ -162,8 +162,12 @@ if(testedQueries.contains(currentQuery) && !currentQueryTree.getChildren().isEmpty()){ return findExampleByGeneralisation(currentQueryTree); } else { - result = selectCache.executeSelectQuery(endpoint, getLimitedQuery(currentQuery, (posExamples.size()+negExamples.size()+1), true)); - testedQueries.add(currentQuery); + if(currentQueryTree.getChildren().isEmpty()){ + result = selectCache.executeSelectQuery(endpoint, getLimitedQuery("SELECT ?x0 WHERE {?x0 ?y ?z.FILTER(REGEX(?x0,'http://dbpedia.org/resource'))}", (posExamples.size()+negExamples.size()+1), true)); + } else { + result = selectCache.executeSelectQuery(endpoint, getLimitedQuery(currentQuery, (posExamples.size()+negExamples.size()+1), true)); + testedQueries.add(currentQuery); + } } } catch (Exception e) { @@ -252,12 +256,13 @@ List<String> queries = queryGen.getSPARQLQueries(posExamplesTrees, negExamplesTrees); for(String query : queries){ - if(testedQueries.contains(query)){ + if(!queryGen.getCurrentQueryTree().getChildren().isEmpty() && testedQueries.contains(query)){ if(logger.isInfoEnabled()){ logger.info("Skipping query because it was already tested before:\n" + query); } continue; } + if(logger.isInfoEnabled()){ logger.info("Trying query"); logger.info(query); @@ -266,8 +271,12 @@ String result = ""; try { - result = selectCache.executeSelectQuery(endpoint, getLimitedQuery(currentQuery, (posExamples.size()+negExamples.size()+1), true)); - testedQueries.add(currentQuery); + if(queryGen.getCurrentQueryTree().getChildren().isEmpty()){ + result = selectCache.executeSelectQuery(endpoint, getLimitedQuery("SELECT ?x0 WHERE {?x0 ?y ?z.FILTER(REGEX(?x0,'http://dbpedia.org/resource'))}", (posExamples.size()+negExamples.size()+1), true)); + } else { + result = selectCache.executeSelectQuery(endpoint, getLimitedQuery(currentQuery, (posExamples.size()+negExamples.size()+1), true)); + testedQueries.add(currentQuery); + } } catch (Exception e) { e.printStackTrace(); throw new SPARQLQueryException(e, encodeHTML(query)); @@ -291,8 +300,8 @@ logger.info("None of the queries contained a new example."); logger.info("Making Generalisation..."); } - return findExampleByGeneralisation(queryGen.getCurrentQueryTree()); -// return findExampleByLGG(Collections.singletonList(queryGen.getCurrentQueryTree()), negExamplesTrees); +// return findExampleByGeneralisation(queryGen.getCurrentQueryTree()); + return findExampleByLGG(Collections.singletonList(queryGen.getCurrentQueryTree()), negExamplesTrees); } private Example getExample(String uri){ Modified: trunk/autosparql/src/main/java/org/dllearner/autosparql/server/Generalisation.java =================================================================== --- trunk/autosparql/src/main/java/org/dllearner/autosparql/server/Generalisation.java 2010-12-13 19:54:28 UTC (rev 2553) +++ trunk/autosparql/src/main/java/org/dllearner/autosparql/server/Generalisation.java 2010-12-13 20:36:33 UTC (rev 2554) @@ -71,7 +71,12 @@ if( edgeCount > maxEdgeCount){ removeLeafs(tree, edgeCount-maxEdgeCount); } else { - removeLeafs(tree, edgeCount/2); + if(edgeCount == 1){ + removeLeafs(tree, 1); + } else { + removeLeafs(tree, edgeCount/2); + } + } return tree; Modified: trunk/autosparql/src/main/java/org/dllearner/autosparql/server/evaluation/EvaluationScript.java =================================================================== --- trunk/autosparql/src/main/java/org/dllearner/autosparql/server/evaluation/EvaluationScript.java 2010-12-13 19:54:28 UTC (rev 2553) +++ trunk/autosparql/src/main/java/org/dllearner/autosparql/server/evaluation/EvaluationScript.java 2010-12-13 20:36:33 UTC (rev 2554) @@ -32,6 +32,7 @@ import org.dllearner.sparqlquerygenerator.impl.SPARQLQueryGeneratorImpl; import org.dllearner.sparqlquerygenerator.operations.lgg.LGGGeneratorImpl; import org.dllearner.sparqlquerygenerator.operations.nbr.NBRGeneratorImpl; +import org.dllearner.sparqlquerygenerator.operations.nbr.strategy.GreedyNBRStrategy; import org.dllearner.sparqlquerygenerator.util.ModelGenerator; import org.ini4j.IniFile; @@ -65,8 +66,9 @@ Logger.getLogger(SPARQLQueryGeneratorImpl.class).setLevel(Level.OFF); Logger.getLogger(LGGGeneratorImpl.class).setLevel(Level.OFF); Logger.getLogger(NBRGeneratorImpl.class).setLevel(Level.OFF); + Logger.getLogger(GreedyNBRStrategy.class).setLevel(Level.OFF); Logger.getLogger(Generalisation.class).setLevel(Level.OFF); - Logger.getLogger(ExampleFinder.class).setLevel(Level.OFF); + Logger.getLogger(ExampleFinder.class).setLevel(Level.INFO); SPARQLEndpointEx endpoint = new SPARQLEndpointEx( @@ -115,6 +117,9 @@ //iterate over the queries int testedCnt = 0; int learnedCnt = 0; + int mostGeneralQueryCount = 0; + String mostGeneralQuery = "SELECT ?x0 WHERE {?x0 ?y ?z.}"; + boolean failed = false; while(queries.next()){ id = queries.getInt("id"); query = queries.getString("query"); @@ -123,7 +128,8 @@ MonitorFactory.getTimeMonitor("Query").reset(); MonitorFactory.getTimeMonitor("LGG").reset(); MonitorFactory.getTimeMonitor("NBR").reset(); - + mostGeneralQueryCount = 0; + failed = false; try { //send query to SPARQLEndpoint rs = SparqlQuery.convertJSONtoResultSet(selectQueriesCache.executeSelectQuery(endpoint, query)); @@ -164,31 +170,43 @@ negExamples.add(nextExample); logger.info("Suggested example is considered as negative example."); } - if(learnedQuery.equals(exampleFinder.getCurrentQuery())){ - continue; + + if(learnedQuery.equals(mostGeneralQuery)){ + mostGeneralQueryCount++; + } else { + mostGeneralQueryCount = 0; } + if(mostGeneralQueryCount == 10){ + logger.info("Breaking because seems to be that we run into an infinite loop"); + failed = true; + break; + } + learnedQuery = exampleFinder.getCurrentQuery(); logger.info("Learned query:\n" + learnedQuery); equivalentQueries = isEquivalentQuery(resources, learnedQuery, endpoint); logger.info("Original query and learned query are equivalent: " + equivalentQueries); } while(!equivalentQueries); - int posExamplesCount = posExamples.size(); - int negExamplesCount = negExamples.size(); - int examplesCount = posExamplesCount + negExamplesCount; - double queryTime = MonitorFactory.getTimeMonitor("Query").getTotal(); - double lggTime = MonitorFactory.getTimeMonitor("LGG").getTotal(); - double nbrTime = MonitorFactory.getTimeMonitor("NBR").getTotal(); - double totalTime = queryTime + nbrTime + lggTime; + if(!failed){ + int posExamplesCount = posExamples.size(); + int negExamplesCount = negExamples.size(); + int examplesCount = posExamplesCount + negExamplesCount; + double queryTime = MonitorFactory.getTimeMonitor("Query").getTotal(); + double lggTime = MonitorFactory.getTimeMonitor("LGG").getTotal(); + double nbrTime = MonitorFactory.getTimeMonitor("NBR").getTotal(); + double totalTime = queryTime + nbrTime + lggTime; + + write2DB(ps, id, query, learnedQuery, + examplesCount, posExamplesCount, negExamplesCount, + totalTime, queryTime, lggTime, nbrTime); + logger.info("Number of examples needed: " + + (posExamples.size() + negExamples.size()) + + "(+" + posExamples.size() + "/-" + negExamples.size() + ")"); + learnedCnt++; + } - write2DB(ps, id, query, learnedQuery, - examplesCount, posExamplesCount, negExamplesCount, - totalTime, queryTime, lggTime, nbrTime); - logger.info("Number of examples needed: " - + (posExamples.size() + negExamples.size()) - + "(+" + posExamples.size() + "/-" + negExamples.size() + ")"); - learnedCnt++; -// if(testedCnt == 200){ +// if(testedCnt == 50){ // break; // } } catch (Exception e) { @@ -236,6 +254,9 @@ * @return */ private static boolean isEquivalentQuery(SortedSet<String> originalResources, String query, SparqlEndpoint endpoint){ + if(query.equals("SELECT ?x0 WHERE {?x0 ?y ?z.}")){ + return false; + } QueryEngineHTTP qexec = new QueryEngineHTTP(endpoint.getURL().toString(), query); for (String dgu : endpoint.getDefaultGraphURIs()) { qexec.addDefaultGraph(dgu); Modified: trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/SPARQLQueryGeneratorCachedImpl.java =================================================================== --- trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/SPARQLQueryGeneratorCachedImpl.java 2010-12-13 19:54:28 UTC (rev 2553) +++ trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/SPARQLQueryGeneratorCachedImpl.java 2010-12-13 20:36:33 UTC (rev 2554) @@ -155,6 +155,7 @@ private void learnPosOnly(){ resultQueries.clear(); + resultTrees.clear(); if(posQueryTrees.size() == 2 || newPosExample != null){ if(logger.isDebugEnabled()){ logger.debug("Computing LGG ..."); @@ -186,6 +187,7 @@ private void learnPosNeg(){ resultQueries.clear(); + resultTrees.clear(); if(newPosExample != null){ if(logger.isDebugEnabled()){ logger.debug("Computing LGG ..."); @@ -210,6 +212,9 @@ logger.debug("LGG computation time: " + lggMonitor.getTotal() + " ms"); } } + if(posQueryTrees.size() == 1){ + lgg = posQueryTrees.get(0); + } Monitor nbrMonitor = MonitorFactory.getTimeMonitor("NBR monitor"); @@ -225,7 +230,6 @@ resultQueries.add(nbr.toSPARQLQueryString(true)); resultTrees.add(nbr); } - nbrMonitor.stop(); if(logger.isDebugEnabled()){ logger.debug("Time to make NBR: " + nbrMonitor.getTotal() + " ms"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |