File size: 1,371 Bytes
a446b0b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import comet.src.train.batch as batch
import comet.src.evaluate.evaluate as base_evaluate
import numpy as np

def make_evaluator(opt, *args):
    if opt.exp == "generation":
        return AtomicGenerationEvaluator(opt, *args)
    else:
        return AtomicClassificationEvaluator(opt, *args)


class AtomicGenerationEvaluator(base_evaluate.Evaluator):
    def __init__(self, opt, model, data_loader):
        super(AtomicGenerationEvaluator, self).__init__(
            opt, model, data_loader)

        self.batch = batch.batch_atomic_generate

    def initialize_losses(self):
        average_loss = {"total_micro": 0, "total_macro": 0}
        nums = {"total_micro": 0, "total_macro": 0}
        return average_loss, nums

    def compute_final_scores(self, average_loss, nums):
        average_loss["total_macro"] /= nums["total_macro"]
        average_loss["total_micro"] /= nums["total_micro"]

        average_loss["ppl_macro"] = np.exp(average_loss["total_macro"])
        average_loss["ppl_micro"] = np.exp(average_loss["total_micro"])

        return average_loss

    def counter(self, nums):
        return nums["total_macro"]

    def print_result(self, split, epoch_losses):
        print("{} Loss: \t {}".format(
            split, epoch_losses["total_micro"]))
        print("{} Perplexity: \t {}".format(
            split, epoch_losses["ppl_micro"]))