def evaluate(data, model, name): if name == "train": instances = data.train_Ids texts = data.train_texts elif name == "dev": instances = data.dev_Ids texts = data.dev_texts elif name == 'test': instances = data.test_Ids texts = data.test_texts elif name == 'raw': instances = data.raw_Ids else: print("Error: wrong evaluate name,", name) right_token = 0 whole_token = 0 pred_results = [] gold_results = [] ## set model in eval model model.eval() batch_size = 4 start_time = time.time() train_num = len(instances) total_batch = train_num // batch_size + 1 for batch_id in range(total_batch): start = batch_id * batch_size end = (batch_id + 1) * batch_size if end > train_num: end = train_num instance = instances[start:end] if not instance: continue gaz_list, reverse_gaz_list, batch_word, batch_biword, batch_wordlen, batch_wordrecover, batch_label, mask = batchify_with_label( instance, data.HP_gpu, True) tag_seq = model(gaz_list, reverse_gaz_list, batch_word, batch_wordlen, mask) pred_label, gold_label = recover_label(tag_seq, batch_label, mask, data.label_alphabet, batch_wordrecover) pred_results += pred_label gold_results += gold_label decode_time = time.time() - start_time speed = len(instances) / decode_time if type == '-': print('overall result of: {}'.format(name)) elif type == ".NAM": print('NE result of: {}'.format(name)) elif type == ".NOM": print('NM result of: {}'.format(name)) save_gold_pred(texts, pred_results, gold_results, name) acc, p, r, f = get_ner_fmeasure(gold_results, pred_results, data.tagScheme) print( "time: %.2fs, speed: %.2fst/s; acc: %.4f, p: %.4f, r: %.4f, f: %.4f" % (decode_time, speed, acc, p, r, f)) return speed, acc, p, r, f, pred_results
def evaluate(data, model, name): if name == "train": instances = data.train_Ids elif name == "dev": instances = data.dev_Ids elif name == 'test': instances = data.test_Ids elif name == 'raw': instances = data.raw_Ids else: print("Error: wrong evaluate name,", name) right_token = 0 whole_token = 0 pred_results = [] gold_results = [] ## set model in eval model model.eval() batch_size = 1 start_time = time.time() train_num = len(instances) total_batch = train_num // batch_size + 1 for batch_id in range(total_batch): start = batch_id * batch_size end = (batch_id + 1) * batch_size if end > train_num: end = train_num instance = instances[start:end] if not instance: continue gaz_list, batch_word, batch_biword, batch_wordlen, batch_wordrecover, batch_char, batch_charlen, batch_charrecover, batch_label, mask = batchify_with_label( instance, data.HP_gpu, True) tag_seq = model(gaz_list, batch_word, batch_biword, batch_wordlen, batch_char, batch_charlen, batch_charrecover, mask) # print "tag:",tag_seq pred_label, gold_label = recover_label(tag_seq, batch_label, mask, data.label_alphabet, batch_wordrecover) pred_results += pred_label gold_results += gold_label decode_time = time.time() - start_time speed = len(instances) / decode_time acc, p, r, f = get_ner_fmeasure(gold_results, pred_results, data.tagScheme) return speed, acc, p, r, f, pred_results