事件抽取基线系统运行踩坑记录
收藏
快速回复
语言与智能技术竞赛 问答学习资料开源方案 3152 14
事件抽取基线系统运行踩坑记录
收藏
快速回复
语言与智能技术竞赛 问答学习资料开源方案 3152 14

今晚跑了一下基线系统,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
收藏
回复
全部评论(14)
时间顺序
都山樵客
#2 回复于2020-04

赞,我正在跑baseline模型

0
回复
阿布军师
#3 回复于2020-04
赞,我正在跑baseline模型

感觉这个阶段大家都跑到关系抽取的赛道去了

0
回复
都山樵客
#4 回复于2020-04
感觉这个阶段大家都跑到关系抽取的赛道去了

也不清楚,没事我是来玩baseline的,我先了解下,然后需要的话,也换一个赛道试试

0
回复
V
VonnOoO
#5 回复于2020-04

这个“F1_score是0.712”是触发词模型还是论元模型?我看官方平台给的触发词模型80多,论元模型40多呢

0
回复
l
llwowowowoll
#6 回复于2020-04

我也在跑baseline模型,谢谢楼主

0
回复
I
IStar
#7 回复于2020-04

请问  执行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.

0
回复
阿布军师
#8 回复于2020-04
VonnOoO #5
这个“F1_score是0.712”是触发词模型还是论元模型?我看官方平台给的触发词模型80多,论元模型40多呢

官方给的80是roberta large的预训练模型,原先给的预训练模型是ernie1.0,分数只有71

0
回复
阿布军师
#9 回复于2020-04
IStar #7
请问  执行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.
展开

没遇到过,在官方的sequenceTask上改一改,重写一个自定义task,把日子信息打印出来就清楚了

0
回复
阿布军师
#10 回复于2020-04
IStar #7
请问  执行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.
展开

你也可以先检查一下是不是没处理test1.json,看着像是模型训练完了,执行model.predict操作报错,有可能是文件格式不一致

0
回复
w
wangwei8638
#11 回复于2020-04

果然一步一坑,感谢分享

0
回复
依米喜欢你7
#12 回复于2020-04
IStar #7
请问  执行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.
展开

请问你这个问题解决了么,我刚跑也有这个问题,如果用验证集去测试是正常的,但是用楼主那段代码把test1转化为test测试就会出现你这个问题。

0
回复
依米喜欢你7
#13 回复于2020-04
请问你这个问题解决了么,我刚跑也有这个问题,如果用验证集去测试是正常的,但是用楼主那段代码把test1转化为test测试就会出现你这个问题。

这个问题已经解决了。

0
回复
子龍_灬
#14 回复于2020-07

楼主可以分享一下事件抽取的数据集吗?谢谢

0
回复
范佩欣
#16 回复于2020-07

你好,可以提供一下DuIE2.0的数据集的下载方式吗?

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户