예제 #1
0
        if cost_avg < decay_cost:
            decay_cost = cost_avg
            decay_epoch = epoch
            rnn.save(args.model_dir, "decay_")

        #XXX: estimate training model
        if epoch % valid_freq == 0:
            y_relations = []
            for i, (x, y, words) in enumerate(zip(x_train, y_train, train_words_list)):
                y_pred = rnn.predict(x)

                # extract relations from current document
                y_relations.extend(extract_relations(y_pred, tag_to_j, words))

            # evaluate all relations
            precision, recall, f1 = scorer.evaluate_relation(train_relations_list, y_relations)
            log.info("  train precision {:7.4f} recall {:7.4f}, f1 {:7.4f}".format(precision, recall, f1))

        # validate model
        if epoch % valid_freq == 0:
            y_relations = []
            for i, (x, y, words) in enumerate(zip(x_valid, y_valid, valid_words_list)):
                y_pred = rnn.predict(x)

                # extract relations from current document
                y_relations.extend(extract_relations(y_pred, tag_to_j, words))

            # evaluate all relations
            precision, recall, f1 = scorer.evaluate_relation(valid_relations_list, y_relations)
            log.info("  valid precision {:7.4f} recall {:7.4f}, f1 {:7.4f} (best {:10.8f}) {}".format(precision, recall, f1, (f1 if f1 > best_f1 else best_f1), ("++" if f1 > best_f1 else "  ")))
            if f1 > best_f1:  # save best model
예제 #2
0
            decay_epoch = epoch
            rnn.save(args.model_dir, "decay_")

        # validate model
        if epoch % valid_freq == 0:
            y_relations = []
            for i, (x, y,
                    words) in enumerate(zip(x_valid, y_valid,
                                            valid_words_list)):
                y_pred = rnn.predict(x)

                # extract relations from current document
                y_relations.extend(extract_relations(y_pred, tag_to_j, words))

            # evaluate all relations
            precision, recall, f1 = scorer.evaluate_relation(
                valid_relations_list, y_relations)
            log.info(
                "valid set precision {:.2f}, recall {:.2f}, f1 {:.2f}{} (best {})"
                .format(precision, recall, f1,
                        (" +" if f1 > best_f1 else "  "), best_f1))
            if f1 > best_f1:  # save best model
                best_f1 = f1
                best_epoch = epoch
                #best_rnn = copy.deepcopy(rnn)
                rnn.save(args.model_dir, "f1_")
            if f1 >= 1.:  # perfect
                print "  WOOHOO!!!"
                break

        # learning rate decay if no improvement after some epochs
        if epoch - decay_epoch >= decay_after:
예제 #3
0
        #y = rnn.predict(train_x)

        y_relations = []
        for relation in extract_relations(doc_id, doc, y, tag_to_j,
                                          all_tsenses):
            y_relations.append(relation)

            # check relations
            validator.check_type(relation)
            validator.check_sense(relation)
            validator.check_args(relation)
            validator.check_connective(relation)

        # evaluate relations
        try:
            precision, recall, f1 = scorer.evaluate_relation(
                train_y_data[doc_id], y_relations)
            print "evaluate train set precision {0:.2f}, recall {1:.2f}, f1 {2:.2f}".format(
                precision, recall, f1)
        except ZeroDivisionError:
            precision, recall, f1 = 0.0, 0.0, 0.0
        if f1 == 1.0:
            print "WOOHOO!!!"
            break

        # learning rate decay if no improvement after some epochs
        if epoch - best_epoch >= decay_after:
            learn_rate *= decay_rate
        if epoch > epochs or learn_rate < decay_min:
            break
        epoch += 1
예제 #4
0
        # extract relations
        #y = rnn.predict(train_x)

        y_relations = []
        for relation in extract_relations(doc_id, doc, y, tag_to_j, all_tsenses):
            y_relations.append(relation)

            # check relations
            validator.check_type(relation)    
            validator.check_sense(relation)
            validator.check_args(relation)
            validator.check_connective(relation)

        # evaluate relations
        try:
            precision, recall, f1 = scorer.evaluate_relation(train_y_data[doc_id], y_relations)
            print "evaluate train set precision {0:.2f}, recall {1:.2f}, f1 {2:.2f}".format(precision, recall, f1)
        except ZeroDivisionError:
            precision, recall, f1 = 0.0, 0.0, 0.0
        if f1 == 1.0:
            print "WOOHOO!!!"
            break

        # learning rate decay if no improvement after some epochs
        if epoch - best_epoch >= decay_after:
            learn_rate *= decay_rate
        if epoch > epochs or learn_rate < decay_min:
            break
        epoch += 1