-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #519 from dice-group/new-release
Excluded recent tests
- Loading branch information
Showing
3 changed files
with
108 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,53 @@ | ||
from ontolearn.concept_learner import ROCES | ||
from ontolearn.knowledge_base import KnowledgeBase | ||
from owlapy.parser import DLSyntaxParser | ||
from ontolearn.learning_problem import PosNegLPStandard | ||
import random | ||
import unittest | ||
import os | ||
import torch | ||
import numpy as np | ||
import pathlib | ||
import warnings | ||
warnings.filterwarnings("ignore") | ||
|
||
|
||
def seed_everything(): | ||
seed = 42 | ||
os.environ['PYTHONHASHSEED'] = str(seed) | ||
os.environ['TOKENIZERS_PARALLELISM'] = 'true' | ||
random.seed(seed) | ||
np.random.seed(seed) | ||
torch.manual_seed(seed) | ||
if torch.cuda.is_available(): | ||
torch.cuda.manual_seed(seed) | ||
torch.cuda.manual_seed_all(seed) | ||
torch.backends.cudnn.deterministic = True | ||
torch.backends.cudnn.benchmark = False | ||
print('-----Seed Set!-----') | ||
|
||
|
||
seed_everything() | ||
|
||
base_path = pathlib.Path(__file__).parent.resolve()._str | ||
|
||
class TestROCES(unittest.TestCase): | ||
|
||
def test_prediction_quality_family(self): | ||
knowledge_base_path = base_path[:base_path.rfind("/")+1] + "KGs/Family/family-benchmark_rich_background.owl" | ||
model = ROCES(knowledge_base_path=knowledge_base_path, k=5, max_length=48, proj_dim=128, drop_prob=0.1, | ||
num_heads=4, num_seeds=1, m=32, load_pretrained=True, verbose=True) | ||
KB = KnowledgeBase(path=model.knowledge_base_path) | ||
dl_parser = DLSyntaxParser(model.kb_namespace) | ||
brother = dl_parser.parse('Brother') | ||
daughter = dl_parser.parse('Daughter') | ||
pos = set(KB.individuals(brother)).union(set(KB.individuals(daughter))) | ||
neg = set(KB.individuals())-set(pos) | ||
learning_problem = PosNegLPStandard(pos=pos, neg=neg) | ||
node = list(model.fit(learning_problem).best_predictions)[0] | ||
print("Quality:", node.quality) | ||
assert node.quality > 0.1 | ||
if __name__ == "__main__": | ||
test = TestROCES() | ||
test.test_prediction_quality_family() | ||
# from ontolearn.concept_learner import ROCES | ||
# from ontolearn.knowledge_base import KnowledgeBase | ||
# from owlapy.parser import DLSyntaxParser | ||
# from ontolearn.learning_problem import PosNegLPStandard | ||
# import random | ||
# import unittest | ||
# import os | ||
# import torch | ||
# import numpy as np | ||
# import pathlib | ||
# import warnings | ||
# warnings.filterwarnings("ignore") | ||
# | ||
# | ||
# def seed_everything(): | ||
# seed = 42 | ||
# os.environ['PYTHONHASHSEED'] = str(seed) | ||
# os.environ['TOKENIZERS_PARALLELISM'] = 'true' | ||
# random.seed(seed) | ||
# np.random.seed(seed) | ||
# torch.manual_seed(seed) | ||
# if torch.cuda.is_available(): | ||
# torch.cuda.manual_seed(seed) | ||
# torch.cuda.manual_seed_all(seed) | ||
# torch.backends.cudnn.deterministic = True | ||
# torch.backends.cudnn.benchmark = False | ||
# print('-----Seed Set!-----') | ||
# | ||
# | ||
# seed_everything() | ||
# | ||
# base_path = pathlib.Path(__file__).parent.resolve()._str | ||
# | ||
# class TestROCES(unittest.TestCase): | ||
# | ||
# def test_prediction_quality_family(self): | ||
# knowledge_base_path = base_path[:base_path.rfind("/")+1] + "KGs/Family/family-benchmark_rich_background.owl" | ||
# model = ROCES(knowledge_base_path=knowledge_base_path, k=5, max_length=48, proj_dim=128, drop_prob=0.1, | ||
# num_heads=4, num_seeds=1, m=32, load_pretrained=True, verbose=True) | ||
# KB = KnowledgeBase(path=model.knowledge_base_path) | ||
# dl_parser = DLSyntaxParser(model.kb_namespace) | ||
# brother = dl_parser.parse('Brother') | ||
# daughter = dl_parser.parse('Daughter') | ||
# pos = set(KB.individuals(brother)).union(set(KB.individuals(daughter))) | ||
# neg = set(KB.individuals())-set(pos) | ||
# learning_problem = PosNegLPStandard(pos=pos, neg=neg) | ||
# node = list(model.fit(learning_problem).best_predictions)[0] | ||
# print("Quality:", node.quality) | ||
# assert node.quality > 0.1 | ||
# | ||
# if __name__ == "__main__": | ||
# test = TestROCES() | ||
# test.test_prediction_quality_family() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,54 @@ | ||
from ontolearn.semantic_caching import run_semantic_cache, run_non_semantic_cache | ||
|
||
|
||
class TestSemanticCache: | ||
def setup_method(self): | ||
self.path_kg = "KGs/Family/father.owl" #path to the father datasets | ||
self.path_kge = None | ||
self.symbolic_reasoner = "HermiT" | ||
self.neural_reasoner = "EBR" | ||
self.num_concepts = 800 | ||
self.cache_size = 0.8*self.num_concepts | ||
self.eviction = "LRU" | ||
self.cache_type = "cold" | ||
|
||
def run_cache_tests(self, cache_semantic, cache_non_semantic): | ||
assert cache_semantic["hit_ratio"] >= cache_non_semantic["hit_ratio"], f"Expected semantic caching to have higher hit ratio, but got {cache_semantic['hit_ratio']} vs {cache_non_semantic['hit_ratio']}" | ||
assert cache_semantic["miss_ratio"] <= cache_non_semantic["miss_ratio"], f"Expected semantic caching to have lower miss ratio, but got {cache_semantic['miss_ratio']} vs {cache_non_semantic['miss_ratio']}" | ||
|
||
def test_jaccard(self): | ||
|
||
cache_neural,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.neural_reasoner, self.eviction, 0, self.cache_type, True) | ||
cache_symbolic,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.symbolic_reasoner, self.eviction, 0, self.cache_type, True) | ||
assert float(cache_neural["avg_jaccard"]) >= float(cache_neural["avg_jaccard_reas"]), "Expected average Jaccard similarity to be at least as good as reasoner-based retrieval." | ||
assert float(cache_symbolic["avg_jaccard"]) >= float(cache_symbolic["avg_jaccard_reas"]), "Expected average Jaccard similarity to be at least as good as reasoner-based retrieval." | ||
|
||
def test_cache_methods(self): | ||
for reasoner in [self.neural_reasoner, self.symbolic_reasoner]: | ||
cache_semantic,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, reasoner, self.eviction, 0, self.cache_type, True) | ||
cache_non_semantic,_ = run_non_semantic_cache(self.path_kg, self.path_kge, self.cache_size, reasoner, True) | ||
self.run_cache_tests(cache_semantic, cache_non_semantic) | ||
|
||
def test_cache_size(self): | ||
cache_large,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.neural_reasoner, self.eviction, 0, self.cache_type, True) | ||
|
||
for k in [0.1, 0.2]: | ||
cache_small,_ = run_semantic_cache(self.path_kg, self.path_kge, k * self.num_concepts, self.neural_reasoner, self.eviction, 0, self.cache_type, True) | ||
assert cache_small["hit_ratio"] <= cache_large["hit_ratio"], f"Expected hit ratio to increase with cache size, but got {cache_small['hit_ratio']} vs {cache_large['hit_ratio']}" | ||
assert cache_small["miss_ratio"] >= cache_large["miss_ratio"], f"Expected miss ratio to decrease with cache size, but got {cache_small['miss_ratio']} vs {cache_large['miss_ratio']}" | ||
|
||
def test_eviction_strategy(self): | ||
eviction_strategies = ["LRU", "FIFO", "LIFO", "MRU", "RP"] | ||
results = {strategy: float(run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.neural_reasoner, strategy, 10, self.cache_type, True)[0]["hit_ratio"]) for strategy in eviction_strategies} | ||
for strategy, hit_ratio in results.items(): | ||
assert isinstance(hit_ratio, float), f"Hit ratio for {strategy} should be a float, but got {type(hit_ratio)}" | ||
best_strategy = max(results, key=results.get) | ||
assert best_strategy == "LRU", f"Expected LRU to be the best, but got {best_strategy}" | ||
|
||
assert results, "No results were generated, possibly due to a failure in the cache evaluation process." | ||
for strategy, hit_ratio in results.items(): | ||
assert 0.0 <= hit_ratio <= 1.0, f"Hit ratio for {strategy} is out of bounds: {hit_ratio}" | ||
# from ontolearn.semantic_caching import run_semantic_cache, run_non_semantic_cache | ||
# | ||
|
||
# class TestSemanticCache: | ||
# def setup_method(self): | ||
# self.path_kg = "KGs/Family/father.owl" #path to the father datasets | ||
# self.path_kge = None | ||
# self.symbolic_reasoner = "HermiT" | ||
# self.neural_reasoner = "EBR" | ||
# self.num_concepts = 800 | ||
# self.cache_size = 0.8*self.num_concepts | ||
# self.eviction = "LRU" | ||
# self.cache_type = "cold" | ||
# | ||
# def run_cache_tests(self, cache_semantic, cache_non_semantic): | ||
# assert cache_semantic["hit_ratio"] >= cache_non_semantic["hit_ratio"], f"Expected semantic caching to have higher hit ratio, but got {cache_semantic['hit_ratio']} vs {cache_non_semantic['hit_ratio']}" | ||
# assert cache_semantic["miss_ratio"] <= cache_non_semantic["miss_ratio"], f"Expected semantic caching to have lower miss ratio, but got {cache_semantic['miss_ratio']} vs {cache_non_semantic['miss_ratio']}" | ||
# | ||
# def test_jaccard(self): | ||
# | ||
# cache_neural,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.neural_reasoner, self.eviction, 0, self.cache_type, True) | ||
# cache_symbolic,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.symbolic_reasoner, self.eviction, 0, self.cache_type, True) | ||
# | ||
# assert float(cache_neural["avg_jaccard"]) >= float(cache_neural["avg_jaccard_reas"]), "Expected average Jaccard similarity to be at least as good as reasoner-based retrieval." | ||
# assert float(cache_symbolic["avg_jaccard"]) >= float(cache_symbolic["avg_jaccard_reas"]), "Expected average Jaccard similarity to be at least as good as reasoner-based retrieval." | ||
# | ||
# | ||
# def test_cache_methods(self): | ||
# for reasoner in [self.neural_reasoner, self.symbolic_reasoner]: | ||
# cache_semantic,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, reasoner, self.eviction, 0, self.cache_type, True) | ||
# cache_non_semantic,_ = run_non_semantic_cache(self.path_kg, self.path_kge, self.cache_size, reasoner, True) | ||
# self.run_cache_tests(cache_semantic, cache_non_semantic) | ||
# | ||
# def test_cache_size(self): | ||
# cache_large,_ = run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.neural_reasoner, self.eviction, 0, self.cache_type, True) | ||
# | ||
# for k in [0.1, 0.2]: | ||
# cache_small,_ = run_semantic_cache(self.path_kg, self.path_kge, k * self.num_concepts, self.neural_reasoner, self.eviction, 0, self.cache_type, True) | ||
# assert cache_small["hit_ratio"] <= cache_large["hit_ratio"], f"Expected hit ratio to increase with cache size, but got {cache_small['hit_ratio']} vs {cache_large['hit_ratio']}" | ||
# assert cache_small["miss_ratio"] >= cache_large["miss_ratio"], f"Expected miss ratio to decrease with cache size, but got {cache_small['miss_ratio']} vs {cache_large['miss_ratio']}" | ||
# | ||
# def test_eviction_strategy(self): | ||
# eviction_strategies = ["LRU", "FIFO", "LIFO", "MRU", "RP"] | ||
# results = {strategy: float(run_semantic_cache(self.path_kg, self.path_kge, self.cache_size, self.neural_reasoner, strategy, 10, self.cache_type, True)[0]["hit_ratio"]) for strategy in eviction_strategies} | ||
# | ||
# for strategy, hit_ratio in results.items(): | ||
# assert isinstance(hit_ratio, float), f"Hit ratio for {strategy} should be a float, but got {type(hit_ratio)}" | ||
# | ||
# best_strategy = max(results, key=results.get) | ||
# assert best_strategy == "LRU", f"Expected LRU to be the best, but got {best_strategy}" | ||
# | ||
# assert results, "No results were generated, possibly due to a failure in the cache evaluation process." | ||
# for strategy, hit_ratio in results.items(): | ||
# assert 0.0 <= hit_ratio <= 1.0, f"Hit ratio for {strategy} is out of bounds: {hit_ratio}" |