xhw205 / GPLinker_torch

CMeIE/CBLUE/CHIP/实体关系抽取/SPO抽取
207 stars 14 forks source link

有关训练过程中loss问题 #9

Closed yanhan19940405 closed 2 years ago

yanhan19940405 commented 2 years ago

非常感谢老哥的复现工程,很棒! 我在借鉴你的代码过程中,对CMeEE数据训练的时候,发现使用苏剑林原始multi_loss的时候,训练过程loss达到了1w数据级别,而且只有微小变化,变化幅度很小,在1e-6的变化量,但是模型有效果,效果很棒。(学习率调整过都是这个现象;改成苏剑林新的稀疏版loss,loss确实能下降了,但是模型指标一直是0.。

对于百度DUIE数据测试也是这样,但是使用multi_loss的时候存在训练效果先上升后下降的问题。 请问这是什么原因导致的呢?

yanhan19940405 commented 2 years ago

同时请问,为什么老哥GPLinker里面的训练代码,没有使用Global_pointer代码里面的模型评估指标呢?

xhw205 commented 2 years ago

您好,我一开始也发现loss巨大但模型仍work的问题了,但是也没找到问题点,就没debug了; 其他博主复现时候仿佛也出现了关于loss的问题,参考

Global_pointer代码里面的模型评估是针对实体的,得再加上关系,大体如下,不再更新了

TP, FP, FN = 0, 0, 0
for spo in spo_prediction_list: #Pre
    flag = True
    for gold_spo in spo_GT:#GT
        if spo["predicate"] == gold_spo["predicate"] and spo["subject"] == gold_spo["subject"] and spo["object"] == gold_spo["object"]:
            TP += 1
            flag = False
            break
    if flag:
        FP += 1 #遍历一遍没个对的
    FN = len(spo_GT) - TP
precision = TP / (TP + FP)
recall = TP / (TP + FN)