from . import SentenceEvaluator from typing import Iterable class SequentialEvaluator(SentenceEvaluator): """ This evaluator allows that multiple sub-evaluators are passed. When the model is evaluated, the data is passed sequentially to all sub-evaluators. All scores are passed to 'main_score_function', which derives one final score value """ def __init__(self, evaluators: Iterable[SentenceEvaluator], main_score_function = lambda scores: scores[-1]): self.evaluators = evaluators self.main_score_function = main_score_function def __call__(self, model, output_path: str = None, epoch: int = -1, steps: int = -1) -> float: scores = [] for evaluator in self.evaluators: scores.append(evaluator(model, output_path, epoch, steps)) return self.main_score_function(scores)