387. Jigsaw Multilingual Toxic Comment Classification | jigsaw-multilingual-toxic-comment-classification
感谢 Kaggle 主办了如此有趣且充满挑战的比赛!多语言 NLP 既有趣又困难。事后看来,我 希望我在 tweet sentiment extraction 比赛上少花点时间,而在这个比赛上多花点时间。
我们的方案是几个 Transformer 模型(主要是 xlm-roberta-large)的简单混合,并配合了一些后处理。架构与公开可用的内核相同,分类头采用隐藏状态的 max+mean pooling 或 CLS token 的隐藏状态。我们使用 3 步法来训练模型,从 7 种语言开始微调到 3 种语言,最后到单一语言。由于这种 3 步法会导致全局预测的失真,我们通过按因子移动各语言预测值作为后处理步骤。
我们仍然对在如此短的时间内取得如此好的结果感到惊讶。虽然 @aerdem4 在这个比赛上工作了更长的时间,并且已经对特定的挑战有了很好的理解,但 @cpmpml 和 @christofhenkel 在团队合并截止日期前几个小时才加入。两天前,我们还排在 100 名开外,最多只能指望拿块银牌。但凭借坚持不懈、对推进哪些想法的正确直觉,当然还有一点运气,我们成功攀升到了金牌榜的前列。
无。这就是 2020 年的 NLP :D
我们做了两件事。一是对负样本进行下采样,以获得更平衡的数据集,同时也缩小了数据集规模。如果你只使用与正样本数量相同的负样本,数据集大约会减少 5 倍,运行一个 epoch 的时间也是如此。我们的一些模型就是用这种方式训练的。
另一个加速来自按批次填充。主要思想是将填充量限制为当前批次所需的量。输入被填充到批次中最长输入的长度,而不是固定长度(比如 512)。这是一种众所周知的技术,并且在以前的比赛中使用过。它显著加快了训练速度。
我们通过按长度对样本进行排序来改进这个想法,以便给定批次中的样本具有相似的长度。这进一步减少了填充的需要。如果批次中的所有输入具有相同的长度,则根本没有填充。
鉴于样本已排序,我们无法在训练模式下打乱它们。我们改为打乱批次。与最初的按批次填充相比,这产生了额外的 2 倍加速。在 V100 GPU 上,对第一个训练集训练 xlm-roberta-large 一个 epoch 大约需要 17 分钟。
由于时间紧迫,因此我们没有很多提交机会来获取 LB(排行榜)反馈,我们致力于获得可靠的交叉验证。我们混合使用了每种语言的 Group-3fold 和简单的验证数据 3fold,来代表未知语言 ru、pt、fr 以及已知语言 it、es 和 tr。这构成了一个 6fold 方案。例如,fold1 代表如果 es 不在 valid.csv 中的情况,其行为应该与 pt 不在 valid 中一样。所有 folds 的平均 AUC 是 Public 和 Private LB 的一个非常好的代理指标。
像大多数团队一样,我们使用 xlm-roberta large 作为主要骨干网络,配有一个简单的分类头,该分类头使用 max+mean pooling 或 CLS token 的隐藏状态。总的来说,我们在最终集成中使用了以下骨干网络(括号中为其近似权重):
我们取得好结果的一个主要因素是针对 tr、it 和 es 的单语言模型进行逐步微调。让我们在解释之前先说明整个方法:

作为输入数据,我们使用了英文 jigsaw-toxic-comment-train.csv 及其作为公共数据集提供的六种翻译,合计大约 140 万条评论。我意识到直接在组合数据集上