コード例 #1
0
def _test(config: Config, model: AttentionNestedNERModel):
    """

    :param config: Config file pass to test_one_sentence, find_entities, evaluate functions.
    :param model: model after load parameters.
    :return:
    """
    # initialize the confusion matrix.
    config.metric_dicts = [{"TP": 0, "FP": 0, "FN": 0} for i in range(len(config.labels))]
    # start test.
    config.result_file = open(config.output_path, "w")
    for test_index in range(len(config.test_data)):
        output_sent(config.result_file, config.test_str[test_index])
        word_ids = config.test_data[test_index]
        gt_labels = config.test_label[test_index]
        gt_entities = []
        for nested_level_index in range(len(gt_labels)):  # all nested levels.
            # for nested_level_index in range(config.max_nested_level):  # todo attention this gt label!
            output_level(config.result_file, nested_level_index, config.bio_labels, gt_labels[nested_level_index], "gt")

            gt_entities, added_flag = process_one_nested_level_predict_result(config, gt_labels[nested_level_index],
                                                                              gt_entities)
            if added_flag is False:
                break
        predict_candidates = _test_one_sentence(config, model, word_ids)
        evaluate(config, predict_candidates, gt_entities)
        output_summary(config.result_file, config.test_str[test_index], config.labels, predict_candidates, gt_entities)
    # print result
    print(get_metrics(config))
    config.result_file.close()
    return
コード例 #2
0
def _test(config: Config, model: AttentionNestedNERModel):
    """

    :param config: Config file pass to test_one_sentence, find_entities, evaluate functions.
    :param model: model after load parameters.
    :return:
    """
    # initialize the confusion matrix.
    metric_dicts = []
    one_metric_dicts = [{"TP": 0, "FP": 0, "FN": 0} for i in range(len(config.labels))]

    for i in range(config.max_nested_level):
        metric_dicts.append(deepcopy(one_metric_dicts))
    config.metric_dicts = metric_dicts
    # start test.
    # config.result_file = open(config.output_path, "w")
    for test_index in range(len(config.test_data)):
        # output_sent(config.result_file, config.test_str[test_index])
        word_ids = config.test_data[test_index]
        gt_labels = config.test_label[test_index]
        gt_entities = [[] for i in range(config.max_nested_level)]

        for nested_level_index in range(len(gt_labels)):  # all nested levels.

            one_layer_entity = process_one_nested_level_predict_result_layer_by_layer(config, gt_labels[
                nested_level_index])
            gt_entities[nested_level_index].extend(one_layer_entity)

        predict_candidates = _test_one_sentence_layer_by_layer(config, model, word_ids)
        evaluate_layer_by_layer(config, predict_candidates, gt_entities)
        # output_summary(config.result_file, config.test_str[test_index], config.labels, predict_candidates, gt_entities)
    # print result
    for i in range(config.max_nested_level):
        print("Layer: ", i + 1)
        print(get_metrics_one_layer(config, config.metric_dicts[i]))

    # config.result_file.close()
    return