Files
Castor/common/evaluation.py
T
Achyudh Ram 1b817d3e24 WIP: Add Reuters-21578 dataset (#147)
* Add ReutersTrainer, ReutersEvaluator options in Factory classes

* Add Reuters to Kim-CNN command line arguments

* Fix SST dataset path according to changes in Kim-CNN args

The dataset path in args.py was made to point at the dataset folder rather than dataset/SST folder. Hence SST folder was added to paths in the SST dataset class

* Add Reuters dataset class, and support in __main__

* Add Reuters dataset trainers and evaluators

* Remove debug print statement in reuters_evaluator

* Fix rounding bug in reuters_trainer and reuters_evaluator
2018-10-02 21:09:51 -04:00

52 lines
1.8 KiB
Python

from .evaluators.sick_evaluator import SICKEvaluator
from .evaluators.msrvid_evaluator import MSRVIDEvaluator
from .evaluators.sst_evaluator import SSTEvaluator
from .evaluators.trecqa_evaluator import TRECQAEvaluator
from .evaluators.wikiqa_evaluator import WikiQAEvaluator
from .evaluators.pit2015_evaluator import PIT2015Evaluator
from .evaluators.reuters_evaluator import ReutersEvaluator
from nce.nce_pairwise_mp.evaluators.trecqa_evaluator import TRECQAEvaluatorNCE
from nce.nce_pairwise_mp.evaluators.wikiqa_evaluator import WikiQAEvaluatorNCE
class EvaluatorFactory(object):
"""
Get the corresponding Evaluator class for a particular dataset.
"""
evaluator_map = {
'sick': SICKEvaluator,
'msrvid': MSRVIDEvaluator,
'SST-1': SSTEvaluator,
'SST-2': SSTEvaluator,
'trecqa': TRECQAEvaluator,
'wikiqa': WikiQAEvaluator,
'pit2015': PIT2015Evaluator,
'twitterurl': PIT2015Evaluator,
'Reuters': ReutersEvaluator
}
evaluator_map_nce = {
'trecqa': TRECQAEvaluatorNCE,
'wikiqa': WikiQAEvaluatorNCE
}
@staticmethod
def get_evaluator(dataset_cls, model, embedding, data_loader, batch_size, device, nce=False, keep_results=False):
if data_loader is None:
return None
if nce:
evaluator_map = EvaluatorFactory.evaluator_map_nce
else:
evaluator_map = EvaluatorFactory.evaluator_map
if not hasattr(dataset_cls, 'NAME'):
raise ValueError('Invalid dataset. Dataset should have NAME attribute.')
if dataset_cls.NAME not in evaluator_map:
raise ValueError('{} is not implemented.'.format(dataset_cls))
return evaluator_map[dataset_cls.NAME](
dataset_cls, model, embedding, data_loader, batch_size, device, keep_results
)