Kaggle 经典比赛 NBME - Score Clinical Patient Notes 高分方案解析

149 阅读3分钟
本篇文章为比赛第一名方案解析,该比赛涉及到NLP-Token分类-医疗
介绍:在本次竞赛中,参赛者将在患者笔记中确定特定的临床概念。具体来说,参赛者将开发一种自动化方法,将临床概念从考试量规(例如,“食欲减退”)映射到这些概念在医学生撰写的临床患者笔记中表达的各种方式
网址:www.kaggle.com/competition…

解决方案摘要

以下六个模型被混合以最大化交叉验证(cv)。每个模型使用 MLM、伪标签、AWP、增强,并在 10 组 GroupStratifiedKFolds 中训练了 5 组以及所有数据,从结果 50%的 OOF 训练数据中构建我们的 CV。由于时间限制,最终提交使用了这六个模型(折 0、1、2、3、4、全部)的一些权重。笔记本

exp-numHugging Face 模型cvPubLB (5/10 折+全部)PriLB (5/10 折+全部)最终提交 使用权重
107deberta-v3-large0.89250.89310.89294/10 折+全部
092deberta-v2-xlarge0.89140.89300.89113/10 折+全部
106deberta-large0.89130.89220.89252/10 折+全部
102deberta-v2-xlarge0.89250.89280.89403/10 折+全部
101deberta-large0.89070.89180.89344/10 折
104deberta-v2-large0.89210.89250.89202/10 折+全部

NBME Model PipeLine 003

有效事项。

  • AWP

  • MLM

    • 预训练在'patient_notes.csv'上执行,除了'train.csv'中的数据。
    • CV 增加约 0.002
  • 伪标签

    • 比例,伪标签数据:90%,训练数据:10%

    • 软标签

      • 在我的实验中,软标签比硬标签更好地提高了 cv 分数。
      • 我们尝试限制用于伪标签的数据,例如那些对任何单个字母具有超过 0.95 预测价值的数据,但从整个数据集中随机采样提高了交叉验证的效果。
  • 增强

    • 删除文本中的一句话。
    • 概率增加,p=0.2
    • cvscore 几乎未变。然而,它似乎适用于这项任务和数据,所以我们采用了它。
    • 伪标签数据未尝试增强。
  • 辅助目标学习

    • 添加目标文本的开始和结束部分,并使用 3chanel 学习。

      • channel_0: 正常目标
      • channel_1: 开始:1,否则:0
      • channel_2: 结束:1,否则:0
    • CV 改进不大,但可用于与伪标签(blend)结合。 (我认为取两个伪标签的平均值可以提高伪标签的准确性。)

    • 检查 PrivateLB 分数,似乎这次尝试是有效的。

未工作

  • 洗牌增强

    • 增强随机打乱句子,使 CV 更差。
  • 标签平滑损失

  • 剪辑梯度范数

    • 我尝试了以下两件事,但交叉验证效果变得更差。也许我们需要调整更多参数。

      • torch.nn.utils.clip_grad_norm_(self.model.parameters(), 1000) -> torch.nn.utils.clip_grad_norm_(self.model.parameters(), 1000)
      • torch.nn.utils.clip_grad_norm_(self.model.parameters(), 10) # 翻译为:torch.nn.utils.clip_grad_norm_(self.model.parameters(), 10)

后处理

cv 分割

比赛中途之前,我们一直在使用 5 折分组交叉验证。从 10 折到分组分层交叉验证的改变对我们团队来说是一个巨大的提升。