返回列表

27th Solution - What Worked and What Didn't for Me...

475. Jigsaw Rate Severity of Toxic Comments | jigsaw-toxic-severity-rating

开始: 2021-11-08 结束: 2022-02-07 内容安全 数据算法赛
第27名方案 - 对我有效和无效的方法...

第27名方案 - 对我有效和无效的方法...

作者: Ertuğrul Demir (Grandmaster) | 发布时间: 2022-02-08

首先恭喜大家,感谢你们所有人的辛勤付出!

概述

这是一次奇特的经历,CV(交叉验证)和LB(排行榜)之间的差距非常大且非常不稳定,所以在前几次提交后,除非发生异常情况(比如分数极高或极低),我就不再查看LB分数了,否则我只专注于我的CV分数。接着问题来了:“该信任哪个CV?”所以我首先选择了CV策略:

CV策略

我尝试了几种策略,但最终决定使用 @its7171 的CV策略。这对我来说很有意义,并且给出了更稳定的结果。

数据

  • 在接触其他数据集之前,先只使用验证数据。
  • 其中一些数据集在其他参赛者中很受欢迎(如旧竞赛数据或Ruddit等),为了避免可能的泄漏,我决定排除其中一些。
  • Measuring Hate Speech 数据集配合一些预处理。我使用多种排列组合创建了“毒性较小”和“毒性较大”的文本对,并在数据集中保留得分最接近的对,然后将其中的样本无重复地添加到主流程中。

损失函数与评估指标

  • 尽管其他损失函数(如MSE等)给了我不错的CV分数(0.70+, 0.71+),但我最终决定使用 MarginRankingLoss。
  • 在评估指标方面,我使用了竞赛评估页面中描述的方法……

模型

  • 我的最终集成仅由基于Transformer的模型组成。其中包括:
    • 主要是 RoBERTa 变体(包括 DistilBERT),
    • DeBERTa v3 变体,
    • BERT 变体(主要是 toxic, hate 相关的),
    • BART。
  • 在没有外部数据的情况下,我的平均CV约为 0.71;加入外部数据后,我的CV没有太大变化,比原始分数略低,但我决定保留高分的额外数据模型,以增加最终集成的多样性。
  • 模型基于 MarginRankingLoss 进行训练,我没有过多训练实际的Transformer块(主干的低学习率),而是在其输出之上训练了一个最终的自定义注意力层和输出层。
  • 通过频繁的验证检查对这些模型进行微调。通常在第1个epoch的3/4左右收敛。

最终提交是基于这些模型排名的加权和。

可能有效的方法

  • 带有句子Transformer嵌入的模型。我通过连接不同的基础Transformer模型嵌入创建了高维矩阵。(这是我的第二个最终选择,勉强进入了银牌区,没有时间加入更多模型,只有roberta和roberta-large)。
  • 在最终集成中结合不同的方法(线性、Transformer、嵌入方法等)。

无效的方法

  • 使用 TF-IDF 的线性模型。
  • 使用词嵌入的模型(Glove, fasttext 等)。
  • 线性模型与Transformer嵌入结合 TF-IDF。
  • 在实际任务微调之前,在毒性数据集上预训练掩码语言模型。
  • 一些Transformer方法,如 Electra(我曾期望判别器能有更好的CV分数)。

最后,一些早期的集成模型比我的最终选择表现要好得多,但这正是比赛中的运气成分 :) 正如我所说,这次比赛对我来说是一次有趣的经历,在路上学到了很多东西……

同比赛其他方案