| 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) | |