485. NBME - Score Clinical Patient Notes | nbme-score-clinical-patient-notes
首先,感谢 NBME 和 Kaggle 主办了如此精彩的比赛。这是一次学习曲线陡峭且收获颇丰的经历。衷心感谢社区分享的精彩想法和深入讨论。
feature 309: duration-2-months,过滤掉包含 2 weeks、years 等的跨度我使用患者笔记对所有 DeBERTa 模型进行了持续的预训练。使用标准的掩码语言建模进行预训练,Token 掩码概率为 0.2。在随后的训练步骤中,任务适应后的模型被用作骨干网络。
我觉得在这次比赛中取得好成绩的关键是充分利用未标记数据。为此,我尝试了 (1) 标准伪标签,(2) 弱监督:对比正则化自训练方法 (https://arxiv.org/pdf/2010.07835.pdf) 和 (3) Meta Pseudo Labels (MPL)。其中,MPL 效果最好。感谢 @hengck23 分享的这个关于 MPL 的优秀笔记本:https://www.kaggle.com/code/hengck23/playground-for-meta-pseudo-label。我针对 NBME Token 分类任务改编了这个笔记本。在不同的训练运行中,我使用了软伪标签和硬伪标签来增加多样性。
在 MPL 期间,学生模型仅使用来自教师的伪标签在未标记数据上进行训练。因此,可以在实际训练数据上进一步微调学生模型以获得额外的性能提升。在微调期间,我还使用了随机权重平均 (SWA) 以获得更好的泛化能力。
对于 DeBERTa Large,我使用 MPL 训练了两个模型(每个模型使用 180k 随机采样的未标记数据 + 所有标记数据)。接下来,我使用这两个模型作为教师,将其组合知识(平均 Token 预测)蒸馏到另一个 DeBERTa Large 模型中。我在蒸馏过程中使用了以下损失:0.15 * 标记数据上的 BCE 损失(实际标注) + 0.15 * 标记数据上的 BCE 损失(来自教师的伪标签) + 0.7 * 带有伪标签的未标记数据上的 BCE 损失。使用 KD 的理由:在