Exemplo n.º 1
0
    def fit(self, train_sents, dev_sents=None):
        for epoch_i in range(1, self.num_epochs + 1):
            random.shuffle(train_sents)
            num_correct, num_total = self._fit_epoch(train_sents)

            print("Epoch {}: {}/{} = {}".format(epoch_i,
                                                num_correct, num_total,
                                                num_correct / num_total))

            if dev_sents:
                performance_dict = measure_performance(dev_sents, self.parse(dev_sents))
                perf_measure = performance_dict['uas']
                if perf_measure > self.best_epoch_score:
                    self.best_epoch = epoch_i
                    self.best_epoch_score = perf_measure
                else:
                    # We didn't get better: should we stop?
                    no_improvement_epochs = epoch_i - self.best_epoch
                    if no_improvement_epochs == self.early_stop_after:
                        print("No improvements for {} epochs. Stopping".format(self.early_stop_after))
                        return

                print("Dev: {}".format(performance_dict))
Exemplo n.º 2
0
    def _fit_epoch(self, train_sents):
        trainer = ParallelTrain(train_sents, batch_size=self.train_batch_size, parser=self)
        parses = trainer.parse()

        performance_dict = measure_performance(train_sents, parses)
        return performance_dict['ua'], performance_dict['total']