485. NBME - Score Clinical Patient Notes | nbme-score-clinical-patient-notes
很高兴看到排名的波动对我们有利 :) 祝贺大家,感谢 NBME 和 Kaggle 主办了这样一场精彩的比赛。
我们的解决方案基于 DeBERTa 模型集成的知识蒸馏,以及利用大量未标记文本语料库的伪标签进行高效的领域微调。我们采用了两阶段方法:第一步,我们在给定的训练数据上训练模型,并使用它们的集成模型对给定的未标记患者笔记进行伪标签标记。第二步,我们在训练数据 + 伪标签数据上训练了 4 个模型。
在比赛过程中,我们尝试了多种数据处理步骤。虽然大多数步骤没有显著帮助,但为了增加模型的多样性,我们在不同的模型中使用了它们。例如,我们使用了:
确实有显著帮助的是权重的 MLM(掩码语言模型)预训练,但不幸的是,这种收益与我们稍后进行的伪标签操作是重复的。当然,我们也尝试了很多其他没有帮助的方法。我们在相同的 5 折划分上评估了所有模型,发现 CV 分数与公共 LB 分数(以及私有 LB 分数)之间有很好的一致性。
我们使用了来自 Hugging Face 仓库的以下骨干网络:
并在上述不同的预处理方式上训练了许多不同的模型。然后我们为每个集合生成伪标签并保存概率。基于 CV 分数,我们构建了最佳的模型融合,并使用字符级概率的融合创建了一个伪标签集。该融合模型的 CV 分数约为 0.897。
在第二阶段,我们在训练数据 + 伪标签数据上训练了新的 DeBERTa 模型,即:
如你所见,我们的第二层模型中没有包含 deberta-v2-xxlarge,因为它对于最终的推理内核来说太重了。但它仍然通过伪标签和相关的知识蒸馏做出了重大贡献。最终提交的是 4 个模型,每个模型 3 折。
有两点非常有趣值得注意:
我们尝试在第一层融合中添加更多架构,并尝试了多种骨干网络,包括 BioBert、BioMegatron、RoBERTa、BART。但它们并没有提高我们融合模型的 CV 分数,因为就单模型得分而言,它们远远落后于 DeBERTa。
鉴于它们是在(大致)相同的伪标签融合数据上训练的,第二层模型的多样性很少。然而,其中的单个模型就已经可以在 LB 上达到前 10 名的位置。
除了去除空格和移除对换行符的任何预测外,没有太多后处理。这两者确实都有帮助。
此外,根据反馈,我们尝试了 WBF、XGBoost 和 RNN 堆叠器,但在这里都没有帮助 😁