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