387. Jigsaw Multilingual Toxic Comment Classification | jigsaw-multilingual-toxic-comment-classification
首先,我们要感谢 Kaggle/Jigsaw 举办了一场毫无争议的比赛,同时也要祝贺其他的奖牌获得者。
自从我在 2018 年有毒评论分类竞赛中获胜以来,我就没有参加过 Kaggle 比赛。当时 NLP 分类的最先进技术是非上下文词嵌入(例如 FastText),我很好奇在 Transformer 的世界里我是否还能表现出色。我很惊喜能和我的队友 @rafiko1 取得如此好的成绩。
你会注意到我们在 4 月底就登上了公开排行榜的最终第一名。换句话说,我们等了 2 个月才等到比赛结束 :)
我们最初混合使用了 k 折交叉验证和留出验证集,但随着我们改进测试预测并使用伪标签 + 验证集进行训练,验证指标变得非常嘈杂,以至于我们主要依赖公开 LB 分数。
已经注意到 Transformer 模型的性能受初始化和数据顺序的影响很大(论文链接1, 论文链接2)。为了减轻这种影响,我们强调了集成和装袋我们的模型。这包括时间自集成。鉴于公开测试集,我们采用了迭代融合的方法,通过前一次最佳提交和当前模型预测的加权平均来细化测试集预测。我们从简单的平均开始,逐渐增加前一次最佳提交的权重。对于训练数据,我们主要使用每次模型运行中 2018 年有毒评论翻译的子样本。
当我们使用测试集预测作为训练数据时,我们观察到了性能提升——直觉是它有助于模型学习测试集分布。使用所有测试集预测作为软标签比任何其他版本的伪标签(例如,硬标签,置信度阈值 PL 等)效果更好。在比赛结束时,我们发现对 PL 进行上采样会给 LB 带来轻微但实质性的提升。
像大多数团队一样,我们从一个普通的 XLM-R 模型开始,将 2018 年数据集的 6 种测试集语言的翻译作为训练数据。我们在最后一层的 CLS 标记上使用了普通的分类头,配合 Adam 优化器和二元交叉熵损失函数,并以低学习率微调整个模型。鉴于 Transformer 模型有数亿个可训练权重用于相对简单的二元预测任务,我们不相信默认架构需要太多调整就能通过模型获得良好的信号。因此,我们没有在超参数优化、架构调整或预处理上花费太多时间。
@rafiko1 和我在组队前独立发现了这项技术。我们都受到了 MultiFiT 论文的启发——具体来说:
当我们使用来自 HuggingFace 的预训练外语单语言 Transformer 模型处理测试集语言时(例如,Camembert 用于法语样本,Rubert 用于俄语,BerTurk 用于土耳其语,BETO 用于西班牙语等),我们观察到显著的性能提升。
我们针对 6 种语言中的每一种微调了模型——通过将 2018 年有毒评论的翻译与该特定语言样本的伪标签(最初来自 XLM-R 多语言模型)结合起来,训练相应的单语言模型,预测相同的样本,然后将其融合回所有预测的“主分支”。这是协同增效的,因为训练模型 A -> 训