shun-zheng / Doc2EDAG

MIT License
342 stars 72 forks source link

使用bert,单句token长度大于512的情况 #10

Open mrkdian opened 4 years ago

mrkdian commented 4 years ago

代码里似乎是舍弃了位置大于512的token,这也太粗暴了。 还是我看错了,用得其他方法处理?

shun-zheng commented 4 years ago

对于单句,目前的设置是 大于128token位置的都删去。 由于Doc2EDAG是文档级模型,天生可以处理多句输入,所以可以将超长句切短再输入。 在本repo中,设置--rearrange_sent == True即可对自动实现这一功能(仅对规范中文文本有效)。

mrkdian commented 4 years ago

对于单句,目前的设置是 大于128token位置的都删去。 由于Doc2EDAG是文档级模型,天生可以处理多句输入,所以可以将超长句切短再输入。 在本repo中,设置--rearrange_sent == True即可对自动实现这一功能(仅对规范中文文本有效)。

感谢回复。 1.请问eval的文件中,为何gold_span和pred_span的NER结果会有较大不同?我以为gold_span只是决定是否使用pred的NER的label,只会影响事件抽取的部分。 2.如果gold_span是使用真实的NER结果做eval,那么为什么gold_span的NER结果不为1? 上述是使用sample_train.json做train,对dev.json做eval

shun-zheng commented 4 years ago

1、gold和pred说明的是 用于事件论元的候选实体来自于数据标注(gold)还是模型预测(pred)。 2、无论事件表格填充部分用的是哪种选项,NER部分展示的都是pred所对应的结果。

mrkdian commented 4 years ago

1、gold和pred说明的是 用于事件论元的候选实体来自于数据标注(gold)还是模型预测(pred)。 2、无论事件表格填充部分用的是哪种选项,NER部分展示的都是pred所对应的结果。

感谢回复。 还有个问题:有提供独立的eval脚本吗?或者调用哪个模块,哪个函数?

shun-zheng commented 4 years ago

请参考eval.sh文件

mrkdian commented 4 years ago

对于DCFEE的实现还有一个问题,DCFEE的事件探测似乎是依赖触发词的,数据集中并没有触发词的label,请问是如何实现DCFEE的?如果使用event key role作为事件触发词组,如何区分EU,EO(两者的event role似乎一样)

shun-zheng commented 4 years ago

@mrkdian 标注触发词需要额外的知识库(事件触发词表)以及额外的匹配规则(一篇文章多个词匹配上了,到底给哪个标成触发词?),这些是依赖触发词的方案在标注方面的痛点。 我们对DCFEE的复现是 基于它论文中的假设“包含了大多数事件论元的句子是触发事件的关键句",最终的目标都是得到事件类型及其相应的事件记录。

mrkdian commented 4 years ago

DEETask类里的train方法,从checkpoint继续训练时,恢复teacher_prob的代码是否有问题?

# bug
# for _ in range(resume_base_epoch):
#     self.get_teacher_prob()

#it should be
self.teacher_cnt = resume_base_epoch * self.num_step_per_epoch