Spico197 / DocEE

🕹️ A toolkit for document-level event extraction, containing some SOTA model implementations.
https://doc-ee.readthedocs.io/
MIT License
232 stars 36 forks source link

关于trigger #48

Closed Smile-L-up closed 2 years ago

Smile-L-up commented 2 years ago

Idea sharing While sharing what you want to do, make sure to protect your ideas.

Problems If you have any questions about event extraction, make sure you have read the latest papers or searched on the Internet. 您好,很高心能有您这样的开源工作者,我在实践中遇到了些问题,想向您请教一下。 1、我在自己构造数据集时,发现一个有意思的现象。在标注了trigger的情况下,如下代码两种构建template方式,在build_data.py)中构造数据集时,两种方式下add_triggers都设置为False。得到的结论差距恨到,第二种的F1值高很多,您知道什么原因吗? 2、另外我想 问的是TRIGGERS设置那么多模式最终选哪种模式,是根据我们设置的num_triggers参数选择吗? 3、在最终评价的时候有些field对应为null,这种在评价的时候会自动过滤吗? 期待您的回复

class MarryEvent(BaseEvent):
    NAME = "Marry"
    FIELDS = [
        "Trigger",
        'Marry_loc', 'Marry_wife', 'Marry_time', 'Marry_husband'
    ]

    TRIGGERS = {
    1: ['Marry_time'],  # importance: 0.9686967372778184
    2: ['Marry_husband', 'Marry_time'],  # importance: 0.9842342342342343
    3: ['Marry_husband', 'Marry_loc', 'Marry_time'],  # importance: 0.9887387387387387
    4: ['Marry_husband', 'Marry_loc', 'Marry_time', 'Trigger'],  # importance: 0.9887387387387387
    5: ['Marry_husband', 'Marry_loc', 'Marry_time', 'Marry_wife', 'Trigger'],  # importance: 0.9887387387387387
}
    TRIGGERS['all'] = ['Marry_time', 'Marry_loc', 'Marry_husband', 'Marry_wife', 'Trigger']
class MarryEvent(BaseEvent):
    NAME = "Marry"
    FIELDS = ["Trigger",'loc', 'wife', 'time', 'husband']

    TRIGGERS = {
        1: ["Trigger"], 
        2: ["Trigger", 'loc'],  
        3: ["Trigger", 'loc', 'wife'],  
        4: ["Trigger", 'loc', 'wife', 'time'],  
        5: ["Trigger", 'loc', 'wife', 'time', 'husband'], 
    }
    TRIGGERS["all"] = ["Trigger",'loc', 'wife', 'time', 'husband']

    def __init__(self, recguid=None):
        super().__init__(self.FIELDS, event_name=self.NAME, recguid=recguid)
        self.set_key_fields(self.TRIGGERS)

Others Other things you may want to share or discuss.

Spico197 commented 2 years ago

嗨您好,感谢您对本项目的关注。

  1. 确实很有意思。您使用的是自己的数据集吗?您的实验设置中,num_triggers参数设置的是1吗?如果num_triggers设置为1的话,从第一种template返回的importance score来看,trigger并不是取决定性因素的论元,但是结果却差距很多的话,似乎有点不太对。而且如果您设置了add_triggerFalse,那么template中应该不会再包含Trigger这个论元了,是您对template进行了修改吗?您可以看下加上触发词时的importance score,trigger的importance score是不是100%?
  2. 嗯啊,是根据num_triggers来选择 伪触发词的组合。这个是一个超参数,在不同的数据集上可能表现不太一样,可以从1开始多试几个。
  3. 如果金标答案的某一个论元是None,但是预测为非None,此时是一种False Positive错误,会反馈在最终的P、R、F1值中。
Smile-L-up commented 2 years ago

感谢您的回复。从您的解答的第三点我可能知道什么原因了。因为我在构建template的时候FIELDS 字段有添加Triggers,而在build_data.py时,设置add_triggers为False,这样就相当于是每条样本都添加了一个[ 'triggers':bull ]这个论元类型,模型没事别到Triggers,在计算的时候就相当于人为添加了正样例,导致最终结果偏高。感觉这种为null的论元很常见,计算的时候需要排除。 1、使用的自己的数据集,num_triggers = 1,我构造数据集的顺序是先手动构造template,再运行build_data.py,修改一些描述字段构造最终数据集。后面发现有trigger.py这个文件,就尝试用这个输出importance score. 2、好的

Spico197 commented 2 years ago

嗷嗷这样,确实会造成一些评价上的偏差,可以改一下再试试看结果有没有新的变化。