Closed ping40 closed 1 year ago
您好,
从您之前的issue里头看到是安装了hydra-core==1.0.6的版本,需要重新 pip install hydra-core==1.3.1的版本(忽视与deepke版本的冲突),从您的报错里头来看可能是由于hydra的版本导致predict.yaml文件里头的配置没有覆盖。
另外从报错里来看是您在使用训练好的模型重新复现在DuEE数据集上TriggerClassification的结果,如果是这样的话,建议您在./conf/predict.yaml
中将模型路径改为训练好的模型,并且把do_pipeline_train设置为False。实际上python run.py的时候已经将触发词的结果预测完毕了并保存到eval_pred.json文件了。
如果您是想要做Event Arguments Extraction的话,需要将train.yaml文件中的task_name设置为role并再训练一个模型(pipeline的事件抽取需要两个模型来完成),接着再运行predict.py来得到最终pipeline抽取的结果。我们现在更新了一下readme,您可以重新跑一下。
感谢您的使用反馈
hydra-core==1.0.6的版本 和 do_pipeline_train = False情况下, 程序的确可以的确可行。
预测结果为:
f1 = 0.415527950310559
loss = 164.49403154089094
precision = 0.46783216783216786
recall = 0.37374301675977656
这个 结果也太差了,没法用啊。 是我哪里设置不正确吗 ?
期望的结果如附件: 附件来自DuEE论文中写的。
您好,我们会尽快排查下,也建议您测试下训练集效果看看模型是否欠拟合,建议您多训几个epoch再测试下。
您好,您可以尝试将train.yaml中的max_steps调大一些比如10000或者更多,应该能够得到更好的效果。另外可能是由于底座模型的中文能力不够强,使用bert-base并不能复现到DuEE论文中基线的结果,您可以尝试使用别的中文能力更强的底座模型。
您好建议您使用RoBERTa-wwm-ext-large试一试https://github.com/ymcui/Chinese-BERT-wwm
您好建议您使用RoBERTa-wwm-ext-large试一试https://github.com/ymcui/Chinese-BERT-wwm
源码中有:
MODEL_CLASSES = {
"bertcrf": (BertConfig, BertCRFForTokenClassification, BertTokenizer),
}
是不是 目前仅仅支持 bertcrf 模型 ?
或者 如果我要用 模型 Chinese-BERT-wwm, 我仅仅修改train.yaml中的 model_name_or_path 就可以了 ?
``> 您好,您可以尝试将train.yaml中的max_steps调大一些比如10000或者更多,应该能够得到更好的效果。另外可能是由于底座模型的中文能力不够强,使用bert-base并不能复现到DuEE论文中基线的结果,您可以尝试使用别的中文能力更强的底座模型。
修改了 max_steps为 15000,没有看出好转。 也没有看出 有增加epoch的需要。
(base) [huangping@localhost 09-57-18]$ grep "f1" run.log
[2023-07-06 10:02:20,219][__main__][INFO] - f1 = 0.17694598043385795
[2023-07-06 10:07:31,595][__main__][INFO] - f1 = 0.30281962147547314
[2023-07-06 10:12:29,239][__main__][INFO] - f1 = 0.3363669457590098
[2023-07-06 10:17:30,167][__main__][INFO] - f1 = 0.3519400953029272
[2023-07-06 10:22:26,760][__main__][INFO] - f1 = 0.3935611038107753
[2023-07-06 10:27:17,421][__main__][INFO] - f1 = 0.4049697783747481
[2023-07-06 10:32:39,500][__main__][INFO] - f1 = 0.4117272147864882
[2023-07-06 10:38:04,259][__main__][INFO] - f1 = 0.3930456380006209
[2023-07-06 10:43:29,647][__main__][INFO] - f1 = 0.40867992766726946
[2023-07-06 10:48:49,888][__main__][INFO] - f1 = 0.4135224871717476
[2023-07-06 10:54:12,628][__main__][INFO] - f1 = 0.40747126436781606
[2023-07-06 10:59:31,818][__main__][INFO] - f1 = 0.40898617511520746
[2023-07-06 11:04:50,080][__main__][INFO] - f1 = 0.4193738924985233
[2023-07-06 11:10:08,911][__main__][INFO] - f1 = 0.40647586007516623
[2023-07-06 11:15:22,817][__main__][INFO] - f1 = 0.41581342434584756
[2023-07-06 11:20:41,726][__main__][INFO] - f1 = 0.40134529147982057
[2023-07-06 11:25:56,539][__main__][INFO] - f1 = 0.4016783216783217
[2023-07-06 11:31:18,098][__main__][INFO] - f1 = 0.41398919533693485
[2023-07-06 11:36:30,602][__main__][INFO] - f1 = 0.4116978989210676
[2023-07-06 11:41:25,092][__main__][INFO] - f1 = 0.4120603015075377
[2023-07-06 11:46:18,326][__main__][INFO] - f1 = 0.4113871057772816
[2023-07-06 11:51:09,629][__main__][INFO] - f1 = 0.41914471821013877
[2023-07-06 11:56:01,582][__main__][INFO] - f1 = 0.4054945054945055
[2023-07-06 12:00:53,145][__main__][INFO] - f1 = 0.41611479028697573
[2023-07-06 12:05:42,285][__main__][INFO] - f1 = 0.4188451594369434
[2023-07-06 12:10:32,369][__main__][INFO] - f1 = 0.41594647337608026
[2023-07-06 12:15:24,148][__main__][INFO] - f1 = 0.41514726507713884
[2023-07-06 12:20:15,418][__main__][INFO] - f1 = 0.41143808995002773
[2023-07-06 12:25:05,207][__main__][INFO] - f1 = 0.41839596186203026
[2023-07-06 12:29:57,443][__main__][INFO] - f1 = 0.4174838890445503
附件是 outpus 日志。 run.log
您好,事件抽取任务对于小模型来说是非常难的,那个DuEE里论文汇报的结果是比赛的最优结果,其没有介绍具体细节,DeepKE提供了基础的事件抽取功能。根据经验BERT-base效果是比较一般的,建议您尝试large模型如RoBERTa-wwm-ext-large效果会有一定程度的提升。
``> 您好,您可以尝试将train.yaml中的max_steps调大一些比如10000或者更多,应该能够得到更好的效果。另外可能是由于底座模型的中文能力不够强,使用bert-base并不能复现到DuEE论文中基线的结果,您可以尝试使用别的中文能力更强的底座模型。
修改了 max_steps为 15000,没有看出好转。 也没有看出 有增加epoch的需要。
(base) [huangping@localhost 09-57-18]$ grep "f1" run.log [2023-07-06 10:02:20,219][__main__][INFO] - f1 = 0.17694598043385795 [2023-07-06 10:07:31,595][__main__][INFO] - f1 = 0.30281962147547314 [2023-07-06 10:12:29,239][__main__][INFO] - f1 = 0.3363669457590098 [2023-07-06 10:17:30,167][__main__][INFO] - f1 = 0.3519400953029272 [2023-07-06 10:22:26,760][__main__][INFO] - f1 = 0.3935611038107753 [2023-07-06 10:27:17,421][__main__][INFO] - f1 = 0.4049697783747481 [2023-07-06 10:32:39,500][__main__][INFO] - f1 = 0.4117272147864882 [2023-07-06 10:38:04,259][__main__][INFO] - f1 = 0.3930456380006209 [2023-07-06 10:43:29,647][__main__][INFO] - f1 = 0.40867992766726946 [2023-07-06 10:48:49,888][__main__][INFO] - f1 = 0.4135224871717476 [2023-07-06 10:54:12,628][__main__][INFO] - f1 = 0.40747126436781606 [2023-07-06 10:59:31,818][__main__][INFO] - f1 = 0.40898617511520746 [2023-07-06 11:04:50,080][__main__][INFO] - f1 = 0.4193738924985233 [2023-07-06 11:10:08,911][__main__][INFO] - f1 = 0.40647586007516623 [2023-07-06 11:15:22,817][__main__][INFO] - f1 = 0.41581342434584756 [2023-07-06 11:20:41,726][__main__][INFO] - f1 = 0.40134529147982057 [2023-07-06 11:25:56,539][__main__][INFO] - f1 = 0.4016783216783217 [2023-07-06 11:31:18,098][__main__][INFO] - f1 = 0.41398919533693485 [2023-07-06 11:36:30,602][__main__][INFO] - f1 = 0.4116978989210676 [2023-07-06 11:41:25,092][__main__][INFO] - f1 = 0.4120603015075377 [2023-07-06 11:46:18,326][__main__][INFO] - f1 = 0.4113871057772816 [2023-07-06 11:51:09,629][__main__][INFO] - f1 = 0.41914471821013877 [2023-07-06 11:56:01,582][__main__][INFO] - f1 = 0.4054945054945055 [2023-07-06 12:00:53,145][__main__][INFO] - f1 = 0.41611479028697573 [2023-07-06 12:05:42,285][__main__][INFO] - f1 = 0.4188451594369434 [2023-07-06 12:10:32,369][__main__][INFO] - f1 = 0.41594647337608026 [2023-07-06 12:15:24,148][__main__][INFO] - f1 = 0.41514726507713884 [2023-07-06 12:20:15,418][__main__][INFO] - f1 = 0.41143808995002773 [2023-07-06 12:25:05,207][__main__][INFO] - f1 = 0.41839596186203026 [2023-07-06 12:29:57,443][__main__][INFO] - f1 = 0.4174838890445503
附件是 outpus 日志。 run.log
您好请问你使用的是bert-base-chinese
吗?因为我注意到您一开始的报错文件里模型路径是bert-base-uncased
。我这边本地使用bert-base-chinese
跑是没问题的,当使用gold trigger训练role模型时f1可以达到71,最终预测的结果f1是65+。另外您还可以把train.yaml中的model_name_or_path改成chinese-bert-wwm中的其他bert系列的中文预训练模型来进行尝试,例如hfl/chinese-bert-wwm-ext
或者是hfl/chinese-roberta-wwm-ext-large
等。
@shengyumao 请问,模型训练出来了,最后如何使用? 或者 如何 修改 predict.py 文件? 达到如下 输入输出的目的,
输入: 消失的“外企光环”,5月份在华裁员900余人,香饽饽变“臭”了
输出类似如下: [ { "event_type": "组织关系-裁员", "trigger": "裁员", "trigger_start_index": 15, "arguments": [ { "argument_start_index": 17, "role": "裁员人数", "argument": "900余人", "alias": [] }, { "argument_start_index": 10, "role": "时间", "argument": "5月份", "alias": [] } ], "class": "组织关系" } ]
@shengyumao
采用 模型 chinese-bert-www-ext 后,结果如下,
f1 = 0.8473282442748091
loss = 94.22317569813829
precision = 0.8274760383386581
recall = 0.8681564245810056
chinese-roberta-wwm-ext-large 模型结果如下:
f1 = 0.8572993700356066
loss = 109.40171002327128
precision = 0.8409457281031704
recall = 0.8743016759776536
这个结果比较理想的。
@zxlzr 请问一下,训练后的模型最后如何使用? 或者 有类似的例子吗? 谢谢您
@ping40 您好我们现在暂时还没支持在自己的数据上一键完成抽取,我们会在近期进一步完善开发。如果您想用训练好的模型在自己的数据上做预测(事件类型与DuEE中的一致),需要做以下几步:
最后您可以将相应的抽取结果转换为您需要的格式。我们也会在近期尽快支持用训练好的模型在本地数据上完成抽取。
按照 文档 https://github.com/zjunlp/DeepKE/tree/main/example/ee/standard#readme, 先执行 python run.py (用 DuEE数据)
然后执行python predict.py , 出现如下错误: