返回列表

6th place solution

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

开始: 2022-02-01 结束: 2022-05-03 临床决策支持 数据算法赛
第6名解决方案

第6名解决方案

作者: Dieter (Grandmaster)
团队成员: Pascal Pfeiffer, Dieter, Darragh
发布日期: 2022年5月5日
比赛排名: 第6名

很高兴看到排名的波动对我们有利 :) 祝贺大家,感谢 NBME 和 Kaggle 主办了这样一场精彩的比赛。

太长不看版 (TL;DR)

我们的解决方案基于 DeBERTa 模型集成的知识蒸馏,以及利用大量未标记文本语料库的伪标签进行高效的领域微调。我们采用了两阶段方法:第一步,我们在给定的训练数据上训练模型,并使用它们的集成模型对给定的未标记患者笔记进行伪标签标记。第二步,我们在训练数据 + 伪标签数据上训练了 4 个模型。

预处理 / 数据处理

在比赛过程中,我们尝试了多种数据处理步骤。虽然大多数步骤没有显著帮助,但为了增加模型的多样性,我们在不同的模型中使用了它们。例如,我们使用了:

  • 针对换行符和医疗缩写的特殊标记;
  • 将所有大写文本转换为小写;
  • 标签的 Mixup(混合)策略;
  • Token dropout(词元丢弃)。

确实有显著帮助的是权重的 MLM(掩码语言模型)预训练,但不幸的是,这种收益与我们稍后进行的伪标签操作是重复的。当然,我们也尝试了很多其他没有帮助的方法。我们在相同的 5 折划分上评估了所有模型,发现 CV 分数与公共 LB 分数(以及私有 LB 分数)之间有很好的一致性。

第一层模型 (Level1 Models)

我们使用了来自 Hugging Face 仓库的以下骨干网络:

  • deberta-large
  • deberta-v2-xlarge
  • deberta-v2-xxlarge
  • deberta-v3-large

并在上述不同的预处理方式上训练了许多不同的模型。然后我们为每个集合生成伪标签并保存概率。基于 CV 分数,我们构建了最佳的模型融合,并使用字符级概率的融合创建了一个伪标签集。该融合模型的 CV 分数约为 0.897。

第二层模型 (Level2 Models)

在第二阶段,我们在训练数据 + 伪标签数据上训练了新的 DeBERTa 模型,即:

  • deberta-large
  • deberta-v2-xlarge
  • deberta-v3-large

如你所见,我们的第二层模型中没有包含 deberta-v2-xxlarge,因为它对于最终的推理内核来说太重了。但它仍然通过伪标签和相关的知识蒸馏做出了重大贡献。最终提交的是 4 个模型,每个模型 3 折。

有两点非常有趣值得注意:
我们尝试在第一层融合中添加更多架构,并尝试了多种骨干网络,包括 BioBert、BioMegatron、RoBERTa、BART。但它们并没有提高我们融合模型的 CV 分数,因为就单模型得分而言,它们远远落后于 DeBERTa。
鉴于它们是在(大致)相同的伪标签融合数据上训练的,第二层模型的多样性很少。然而,其中的单个模型就已经可以在 LB 上达到前 10 名的位置。

后处理

除了去除空格和移除对换行符的任何预测外,没有太多后处理。这两者确实都有帮助。
此外,根据反馈,我们尝试了 WBF、XGBoost 和 RNN 堆叠器,但在这里都没有帮助 😁

同比赛其他方案