387. Jigsaw Multilingual Toxic Comment Classification | jigsaw-multilingual-toxic-comment-classification
我要感谢组织者举办了这场精彩的比赛,也要感谢Kaggle提供v3 TPU,让我这样没有硬件设备的人也能在没有太大劣势的情况下参与竞争。我还要祝贺获奖者。这是我第一次参加Kaggle比赛,在这个过程中我学到了很多关于SOTA NLP模型和技术的知识。起初虽然艰难,但看到我的想法奏效并在排行榜上上升令人非常兴奋。
对于我所有的模型,我都使用 [CLS] token 在训练数据上训练了2个epoch,没有添加任何额外的层。我尝试在上面添加不同的头部,但发现分数都有所下降。我认为这是因为预训练深度神经网络的最后一层对于之前的任务(在我们这里是MLM目标)过于具体化。在上面添加更多层只会让训练变得更加不稳定。
我进一步在验证集上微调了2个epoch,使用5折交叉验证,然后平均了袋外预测。这个5折CV AUC分数是公共LB分数的一个很好的指标。我只集成了XLM-R模型,因为其他多语言模型(如XLM-17, m-BERT)不是很有用。我还对每个模型训练了3次并平均预测结果以保持稳定性。
主要地,我训练了:
我尝试了两种不同的分层策略:分层学习率和分层权重衰减。我在文章 https://arxiv.org/abs/1905.05583 中看到分层学习率在微调BERT时很有效,并发现在这次比赛中也非常有用。根据这个结果,我还尝试了这种分层训练策略的一个变体,即对低层进行更多的正则化。我发现这比分层学习率效果更好(公共LB提升了约0.008)。它的工作原理类似于分层学习率策略,但不是将学习率乘以分层系数 alpha^(总层数-层号)(其中第一层的层号=0),而是将权重衰减率乘以系数 alpha^层号。因此,你对低层的正则化比高层更多。这是有道理的,因为高层需要广泛探索参数空间以适应新目标,而低层不需要太多改变。我使用0.01作为权重衰减,0.99作为分层系数。分层学习率策略可能实际上更好,但它对超参数选择非常敏感,由于TPU时间有限,我选择了分层权重衰减。
我使用我最佳模型在测试集上的预测作为伪标签,并将其包含在训练集中。即使使用相对较差模型(分数约0.935)的伪标签也是有效的。有趣的是观察到了XLM-R-large模型的不稳定性,仅仅切换伪标签就导致了模型的发散。我不得不将学习率从1e-5降低到6e-6才能收敛。
我对所有模型的训练数据进行了1:1的下采样。对于XLM-R仅翻译模型,我混合了Yandex和Google翻译,在本地CV和公共LB上看到了一点提升。我还确保在采样非有毒样本时,不同语言之间没有重复。
最后,我学到了严格按照重要性排序来规划想法非常关键,特别是在只有30小时TPU时间的情况下。我发现自己把大部分TPU时间花在调整工作模型使其更好上,而不是尝试更多新颖的想法:在利用和探索之间取得良好平衡是关键!看到我的一个想法(使用单语Transformer模型制作专家模型)在我的未尝试想法列表中间出现在第1名方案的解决方案中,这让我有点难过,但我吸取了教训 :)