返回列表

3rd Place Solution: Meta Pseudo Labels + Knowledge Distillation

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

开始: 2022-02-01 结束: 2022-05-03 临床决策支持 数据算法赛
第3名方案:Meta Pseudo Labels + 知识蒸馏
作者: Raja Biswas | 排名: 第3名

第3名方案:Meta Pseudo Labels + 知识蒸馏

首先,感谢 NBME 和 Kaggle 主办了如此精彩的比赛。这是一次学习曲线陡峭且收获颇丰的经历。衷心感谢社区分享的精彩想法和深入讨论。

代码

摘要

  • 通过 MLM(掩码语言建模)预训练进行任务适应
  • 多标签 Token 分类(预测答案跨度的内部、起始和结束)
  • 训练多样性
    • Meta Pseudo Labels (MPL)
    • 来自模型集成的知识蒸馏
    • 标记 Token:在特征文本前添加前缀 Token,例如:["QA CASE=0"]
    • 随机权重平均 (SWA)
  • 融合:不同模型字符级预测的加权平均
  • 后处理:与时间持续时间相关的特征,例如对于 feature 309: duration-2-months,过滤掉包含 2 weeksyears 等的跨度

模型

  • DeBERTa Large
  • DeBERTa XLarge
  • DeBERTa V2 XLarge
  • DeBERTa V3 Large

工作流程

1. 任务适应

我使用患者笔记对所有 DeBERTa 模型进行了持续的预训练。使用标准的掩码语言建模进行预训练,Token 掩码概率为 0.2。在随后的训练步骤中,任务适应后的模型被用作骨干网络。

2. Meta Pseudo Labels (MPL)

我觉得在这次比赛中取得好成绩的关键是充分利用未标记数据。为此,我尝试了 (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 分类任务改编了这个笔记本。在不同的训练运行中,我使用了软伪标签和硬伪标签来增加多样性。

3. 学生模型的微调

在 MPL 期间,学生模型仅使用来自教师的伪标签在未标记数据上进行训练。因此,可以在实际训练数据上进一步微调学生模型以获得额外的性能提升。在微调期间,我还使用了随机权重平均 (SWA) 以获得更好的泛化能力。

4. 知识蒸馏 (KD)

对于 DeBERTa Large,我使用 MPL 训练了两个模型(每个模型使用 180k 随机采样的未标记数据 + 所有标记数据)。接下来,我使用这两个模型作为教师,将其组合知识(平均 Token 预测)蒸馏到另一个 DeBERTa Large 模型中。我在蒸馏过程中使用了以下损失:0.15 * 标记数据上的 BCE 损失(实际标注) + 0.15 * 标记数据上的 BCE 损失(来自教师的伪标签) + 0.7 * 带有伪标签的未标记数据上的 BCE 损失。使用 KD 的理由:在

同比赛其他方案