返回列表

9th Weight search and threshold modification

485. NBME - Score Clinical Patient Notes | nbme-score-clinical-patient-notes

开始: 2022-02-01 结束: 2022-05-03 临床决策支持 数据算法赛
第9名方案:权重搜索与阈值调整

第9名方案

首先,非常感谢 Kaggle 和 NBME 主办了如此精彩的比赛,并祝贺所有的获奖者!

感谢我优秀的队友 @yanbojwang@qinhui1999@yankuoaaagmailcom@alex821

摘要

我们集成了6个 Token 分类模型,针对 F1 分数变化较大的 feature_num 设置了阈值,并进行了后处理。

模型

我们训练了以下6个 Token 分类模型,并将它们全部用于最终提交(共29个模型)。

Public LB 成绩

  • Token 分类 Deberta-v3-large 5折: 0.887 (含后处理)
  • Token 分类 Deberta-v1-large 5折: 0.887 (含后处理)
  • Token 分类 Deberta-v2-xlarge 4折: 0.886 (含后处理)
  • Token 分类 Deberta-v1-xlarge 5折: 0.890 (含后处理)
  • Token 分类 funnel-transformer 5折: 0.883 (含后处理)
  • Token 分类 electra 5折: 0.886 (含后处理)

Deberta-v3-large, Deberta-v1-large, Deberta-v2-xlarge, Deberta-v1-xlarge 使用的方法:

  • MLM (0.30)
  • FocalLoss
  • 2折伪标签 (2fold pseudo labeling)
  • FGM (对抗训练)
  • 多重 Dropout (multiple-dropout)

funnel-transformer, electra 使用的方法:

  • MLM (0.30)
  • BCE Loss
  • 特殊字符处理 (添加 ‘\n,\s,\t’)
  • 无伪标签
  • FreeLB (对抗训练)
  • SMA (随机权重平均)

阈值调整

根据不同特征的文本长度以及 F1 分数的变化趋势,我们选择了一些特征来单独设置阈值。在 Private 阶段我们没有选择过多的设置,而是选择了较少的数量。然而,设置更多的值可以获得更高的 Private 分数。

技巧

我们通过使用不同的分词器进行多次排序,实现了超加速(9小时内跑完30个模型)。

因为我们的伪标签在线表现不够理想,我们只取了少量折的数据进行伪标签训练,并加入了最终融合以防止抖动。根据 CV 表现,我们为每个模型分配了权重,以获得更理想的 LB 成绩。

通过对部分特征设置阈值,可以在 PB 上提升 0.001-0.002。

权重搜索可以提升约 0.001。

后处理

if len(result) > 0:  
    for start,end in result:  
        if start < len(valid_text):  
            if valid_text[start-1] != ' ':  
                start -= 1  
            if valid_text[start] == '\n':  
                start += 1

我们在 Private 榜单上的分数实际上可以达到 0.894。因为我们预期这场比赛会有很大的抖动,所以我们选择了过于保守的策略。

同比赛其他方案