387. Jigsaw Multilingual Toxic Comment Classification | jigsaw-multilingual-toxic-comment-classification
恭喜所有的获奖者!
我要感谢 Kaggle 和 Jigsaw 团队主办了这场有趣的比赛。我也非常感谢这个伟大的社区。如果没有那些优秀的公开 Kernel(代码内核),我不知道该从何开始这个项目。我很荣幸能以一枚单人金牌结束这次比赛。这是一次极好的学习经历。
随着私有排行榜的最终确定,我决定总结一下我在这个过程中学到的东西。我的解决方案与其他顶尖方案有很多共同之处。两个最有帮助的技术/技巧是多样化模型的集成和后处理。在某一个阶段,我也考虑过使用单语言模型,正如第1名解决方案中所讨论的那样。但我失败了,因为我错误地使用了 XLM-R。
根据我个人的理解,如果训练集、分词方法或模型架构不同,语言模型就是多样化的。事实上,我没有从头开始开发任何方法。相反,我从公开的 Kernel 开始,通过试错来改进它们。以下是我在最终提交中用于集成的 Kernel 列表。
最终提交的是 11 个模型的集成,包括两个使用 Google API 翻译的多语言训练集训练的 NB-SVM 模型,两个使用英语训练集、验证集和测试集训练的 BERT 模型,一个使用下采样的意外偏差训练集和原始验证集训练的 XLM-R 模型,一个使用 PL 测试集训练的 XLM-R 模型,一个使用多语言训练集训练的 XLM-R 模型,一个使用多语言训练集和 PL 测试集的 XLM-R 模型,两个经过微调 MLM 的 XLM-R 模型,以及三个使用 PL OpenSubtitles 训练的 XLM-R 模型。集成权重是通过直觉和探测公共排行榜分数找到的。权重如下:
weights = {}
weights['bert_1'] = weights['bert_2'] = 0.4/2
weights['nbsvm_1'] = weights['nbsvm_2'] = 0.035/2
weights['xlm_r_en'] =0.7; weights['xlm_r_pl_en'] = 0.3
weights['xlm_r_multilingual']= 0.35; weights['xlm_r_pl_multilingual'] = 0.2
weights['xlm_r_mlm_en'] = weights['xlm_r_mlm_en_2'] = 0.25/2
weights['xlm_r_mlm_multilingual'] = weights['xlm_r_mlm_multilingual_2'] = 0.25/2
weights['xlm_r_opensubtitle'] = weights['xlm_r_opensubtitle_2'] = weights['xlm_r_opensubtitle_3'] = 0.27/3
正如许多其他顶尖方案所强调的,后处理对 AUC 分数贡献很大,因为重要的不是单个预测的准确性,而是所有预测的排名/分布。由于我们需要预测测试集中的六种语言评论,