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
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