604. The Learning Agency Lab - PII Data Detection | pii-detection-removal-from-educational-data
感谢 Learning Agency Lab 和 Kaggle 举办本次竞赛。
恭喜我的队友 @kpriyanshu256 成为 Kaggle 竞赛大师,以及 @lucamassaron 获得 Kaggle 竞赛特级大师头衔。🎊🎊🎊
比赛背景: 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 - 2倍 × 5折 = 共10个 Deberta V3 Large 模型 - 推理时间少于7小时。(最大长度 = 4000,步长 = 1024)
训练数据集 - meta-llama/Meta-Llama-3-70B-Instruct,感谢 @nbroad 提供的数据集
所有模型均使用 Focal Loss 和 BiLSTM + GRU 头部进行训练。
其他尝试:
其他尝试:
我们选择基于文档中是否存在PII进行5折分层交叉验证,这帮助我们在基于折数训练时避免过度拟合,并在选择最具表现力和可推广性的最终提交时提供了可靠的衡量标准,而不是仅仅依赖公开排行榜。
在1280序列长度上训练的模型在以最大长度4000进行推理时表现良好。使用步长训练的模型在公开排行榜上被限制在0.967。我们发现最佳设置是使用最大长度4000和步长1024。训练最大长度大于1280也没有效果。
def replace_space(lst):
return ["[SPACE]" if x.isspace() else x for x in lst]
train_df["tokens"] = train_df["tokens"].apply(replace_space)
我们主要遵循此处描述的策略来生成更多数据。
一些非PII样本中存在教师/讲师的名字,模型将其识别为PII - 因此我们对这些假阳性样本进行了释义并将其添加到训练数据集中。我们使用https://huggingface.co/kalpeshk2011/dipper-paraphraser-xxl模型进行释义。
这个是唯一对我们有效的数据集,我们尝试了论坛上分享的许多其他数据集。
BERT分类器 -
对于STUDENT_NAME标签,我们观察到模型生成的许多假阳性与教师名字和为解释故事讲述而引入的虚构角色有关。
我们从训练数据中提取了FICTIONAL_CHARACTER、TEACHER_NAME和OTHER类的句子,并使用它们构建了一个BERT分类器。
我们尝试使用此分类器过滤主模型预测的STUDENT_NAME令牌。不幸的是,由于数据集的显著噪声和指标对假阴性的严重惩罚,这种方法表现不佳。
我们还进行了其他后处理尝试以减少假阳性,例如使用正则表达式过滤姓名和ID(例如,移除包含未混淆讲师名字的令牌:"Angela Meyer"、"Jeanne Liedtka"、"Ed Hess"、"Tim Olgivie"),或者使用XGBoost模型作为最终验证器,使用与输出logits和阳性令牌特征以及邻近前一个和后一个令牌的特征或整个文档中检测到的令牌的统计数据相关的特征。由于这些方法在OOF或公开排行榜上没有带来任何结果,大多数方法最终被搁置。
我们观察到以下规则在公开排行榜上有轻微提升,这是我们最佳提交的一部分
使用Spacy可视化工具进行错误分析、Neptune.ai用于日志记录(使用Neptune.ai进行日志记录帮助我们查看各个PII类型)、Optuna用于获取不同模型的权重和阈值。
感谢 @aman1391、@kpriyanshu256、@lucamassaron 和 @steubk 的合作,与你们合作非常愉快 🙏