posCount += 1 if entry.parent_id == entry.pred_parent_id and entry.pred_relation == entry.relation: lasCount += 1 if entry.parent_id == entry.pred_parent_id: uasCount += 1 count += 1 print("---\nLAS accuracy:\t%.2f" % (lasCount * 100 / count)) print("UAS accuracy:\t%.2f" % (uasCount * 100 / count)) print("POS accuracy:\t%.2f" % (posCount * 100 / count)) print("POS&LAS:\t%.2f" % (poslasCount * 100 / count)) score = poslasCount * 100 / count if score >= highestScore: parser.Save( os.path.join(args.output, os.path.basename(args.model))) highestScore = score print("POS&LAS of the previous saved model: %.2f" % (highestScore)) else: print('Extracting vocabulary') words, w2i, c2i, pos, rels = utils.vocab(args.conll_train) with open(os.path.join(args.output, args.params), 'wb') as paramsfp: pickle.dump((words, w2i, c2i, pos, rels, args), paramsfp, protocol=2)
parser.Train(args.conll_train) devpath = os.path.join(args.output, 'dev_epoch_' + str(epoch+1) + '.conll') lysfastparse.bcovington.utils_bcovington.write_conll(devpath, parser.Predict(args.conll_dev)) lysfastparse.utils.dump_lookup_extra_into_conll(devpath, lookup_conll_data) lysfastparse.utils.transform_to_single_root(devpath) print 'Executing conll17_eval' os.system('python '+config[YAML_CONLL17_EVAL]+' '+args.conll_dev + ' '+devpath+ ' > ' + devpath + '.txt ') with codecs.open(devpath+".txt") as f_devpath: content = f_devpath.readlines() las_lines = [l for l in content if l.startswith("LAS F1 Score")] if len(las_lines) != 1: warnings.warn("Cannot determine LAS F1 Score from file") else: las = float(las_lines[0].split(":")[1]) log_results_file.write('\t'.join([args.output.rsplit("/",1)[1],str(epoch),"\n".join(content)])) print 'Finished predicting dev' #Only saves the best performing model if las >= better_las: parser.Save(os.path.join(args.output, args.model)) better_las = las log_results_file.close()