返回列表

3rd Place Solution

604. The Learning Agency Lab - PII Data Detection | pii-detection-removal-from-educational-data

开始: 2024-01-17 结束: 2024-04-23 数据安全与隐私 数据算法赛
第三名解决方案 - PII检测与删除

第三名解决方案

作者:Rai  |  排名:第三名  |  发布日期:2024-04-24

感谢Kaggle和The Learning Agency Lab举办的又一场精彩竞赛!

背景部分

业务背景:https://www.kaggle.com/competitions/pii-detection-removal-from-educational-data/overview

数据背景:https://www.kaggle.com/competitions/pii-detection-removal-from-educational-data/data

概述

我的最终解决方案只使用了一个骨干模型——deberta-v3-large,该模型在两个阶段使用多个种子进行训练。关键在于正确的数据组合、后处理以及确保模型在所有类别(包括训练数据中样本很少或没有样本的类别)上都能表现良好。非常感谢@nbroad@mpware分享的数据集。该解决方案通过以下步骤实现:

  • 使用mpware数据集进行预训练
  • 在竞赛数据+nbroad数据集上进行微调
  • 后处理

数据

在本次竞赛期间共享了不少数据集。我尝试了不同的组合,最终得到了上述方案——使用mpware进行预训练,使用竞赛数据和nbroad的数据集进行微调。

mpware数据集非常有用,但直接使用会降低模型在某些类别上的性能。然而,使用它进行预训练可以提高交叉验证(CV)和排行榜(LB)的分数。

这在竞赛期间已经讨论过——某些类别(如PHONE_NUM)在训练数据和公开排行榜中几乎没有样本。因此,很难通过训练数据的验证或公开排行榜来了解模型在这些类别上的表现如何。我最终使用了一些共享的外部数据集以及自己生成的一些数据来评估模型在这些类别上的表现,这似乎效果不错。

训练与后处理

最终解决方案只使用了一个骨干模型——deberta-v3-large。我尝试了其他模型,但没有一个能提高性能。我花了一些时间根据交叉验证调整超参数,然后使用不同的种子在完整数据集上重新训练模型。向分词器添加\n\n\t\r\n作为新token很有帮助。其他超参数:

  • 学习率:1e-5
  • batch size:2
  • 梯度累积:2
  • 预热:0.1
  • 轮数:2

对于后处理,我使用了与大多数公开笔记相同的方法,即对O标签使用阈值。这效果很好,但存在误报,所以我根据我的out-of-fold(OOF)预测开发了一套规则来过滤这些误报——删除某些类别的极短预测、从NAME_STUDENT中删除常见讲师姓名、删除NAME_STUDENT中的Mr、Mrs、Dr预测等。

我还加入了一些基于OOF预测的其他后处理。例如,在一些论文中,同一个名字会同时出现为B-NAME_STUDENTI-NAME_STUDENT,比如下面的论文中的'Leroy'。模型在这些情况下容易混淆预测,需要通过后处理来修复。

验证

我使用分层5折交叉验证进行验证。分层基于PII的存在与否。交叉验证和公开排行榜相关性很好。

然而,正如我前面提到的,某些类别在训练数据和公开排行榜中几乎没有样本,因此交叉验证和公开排行榜都不是衡量模型在这些类别上表现的良好指标。这些类别很可能出现在私有测试集中,所以我使用Mistral生成了论文,并结合一些共享的外部数据集来评估模型的性能。这确实很有帮助。

无效的方法

  • 重新标注训练数据
  • 其他骨干模型
  • 针对单个类别的模型
  • 使用更多外部数据
  • 使用第二阶段模型识别误报

再次感谢Kaggle和The Learning Agency Lab举办如此精彩的竞赛!恭喜所有获奖者!

同比赛其他方案