Example #1
0
                            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)
Example #2
0
        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()