事件抽取基线系统运行踩坑记录
收藏
今晚跑了一下基线系统,F1_score是0.712,分享一下运行基线系统踩的坑
1 使用官方训练集报错:keyError
解决:用官方提供的schema.json文件生成字典
2 执行predict_trigger时报错:数据解析错误
解决: data_process.py中新增测试数据处理方法,使用!python bin/data_process.py origin_events_process4test ./data/test1.json ./data/ 生成test.json
def origin_events_process4test():
"""origin_events_process"""
origin_events_path = sys.argv[2]
save_dir = sys.argv[3]
if not origin_events_path or not save_dir:
raise Exception("set origin_events_path and save_dir first")
output = []
lines = utils.read_by_lines(origin_events_path)
for line in lines:
d_json = json.loads(line)
event = {}
event["trigger"] = ""
event["trigger_start_index"] = 0
event["class"] = ""
event["event_type"] = ""
event["arguments"] = []
argument = {}
argument["argument_start_index"] = 0
argument["role"] = ""
argument["argument"] = ""
argument["alias"] = []
event["arguments"].append(argument)
event["event_id"] = u"{}_{}".format(d_json["id"], "no_event")
event["text"] = d_json["text"]
event["id"] = d_json["id"]
output.append(json.dumps(event, ensure_ascii=False))
random.shuffle(output) # 随机一下
print(
u"include sentences {}, events {}, test datas {}"
.format(len(lines), len(output), len(output)))
utils.write_by_lines(u"{}/test.json".format(save_dir), output)
3 执行predict_trigger时报错
解决:分别为predict_event_role.sh, predict_event_trigger.sh 创建测试版本predict_event_role4test.sh,predict_event_trigger4test.sh
其中修改了 预测环境为CPU,batch_size为32
python run_event_trigger.py --use_cuda false\
--do_train false \
--do_val false \
--do_test true \
--batch_size 32 \
4 依次执行完剩下的命令即可
使用CPU进行预测时,两个预测任务耗时都在18分钟左右
0
收藏
请登录后评论
赞,我正在跑baseline模型
感觉这个阶段大家都跑到关系抽取的赛道去了
也不清楚,没事我是来玩baseline的,我先了解下,然后需要的话,也换一个赛道试试
这个“F1_score是0.712”是触发词模型还是论元模型?我看官方平台给的触发词模型80多,论元模型40多呢
我也在跑baseline模型,谢谢楼主
请问 执行predict_trigger时又出现这个报错吗
Traceback (most recent call last):
File "run_event_trigger.py", line 431, in
main(args)
File "run_event_trigger.py", line 293, in main
graph_vars, 1, 'final')
File "run_event_trigger.py", line 396, in predict_wrapper
res = predict(exe, test_prog, test_pyreader, graph_vars, dev_count=1)
File "/home/aistudio/baseline/bin/finetune/sequence_label.py", line 233, in predict
res += parse_crf_ret(inputs, crf_decodes, np_lens)
File "/home/aistudio/baseline/bin/finetune/sequence_label.py", line 212, in parse_crf_ret
src_ids = [_id for _id in np_inputs[index][1:np_lens[index] - 1]]
IndexError: invalid index to scalar variable.
官方给的80是roberta large的预训练模型,原先给的预训练模型是ernie1.0,分数只有71
没遇到过,在官方的sequenceTask上改一改,重写一个自定义task,把日子信息打印出来就清楚了
你也可以先检查一下是不是没处理test1.json,看着像是模型训练完了,执行model.predict操作报错,有可能是文件格式不一致
果然一步一坑,感谢分享
请问你这个问题解决了么,我刚跑也有这个问题,如果用验证集去测试是正常的,但是用楼主那段代码把test1转化为test测试就会出现你这个问题。
这个问题已经解决了。
楼主可以分享一下事件抽取的数据集吗?谢谢
你好,可以提供一下DuIE2.0的数据集的下载方式吗?