475. Jigsaw Rate Severity of Toxic Comments | jigsaw-toxic-severity-rating
首先,非常感谢比赛组织者和所有参与者。我学到了很多东西,也更加坚定了我对“相信你的交叉验证(CV)”原则的信念 🙂
集成中使用的模型列表:
集成后的 CV 为 0.7605,LB 为 0.779。所有这些模型都是通过 rankdata + mean(排名数据取平均)的方式进行集成的。
所有模型都在通过多数投票聚合的 validation_data.csv 上进行了验证。
起初,我习惯将最终的 CV 分数定义为 CV * 0.65 + LB * 0.35。这些权重代表了我个人对分数值的信心。在某个时刻,我注意到公共 LB 分数存在巨大的波动性,微小的模型变化(CV 上 0.001 的分数差异)会导致 LB 分数 0.05-0.1 的变化。我假设只有少量的独特评论被用于 more_toxic 或 less_toxic 角色。关于这一点的更多信息请见 此处。所以我放弃了 LB,只坚持使用本地 CV 分数。
起初,我想集成 14 个模型(在 UBTC, Offenseval, C3, Hate Speech Measurement 上训练),而不是 5 个。但在排名任务中,更多的模型并不一定能带来更好的分数。不同模型的分数分布差异很大,不同数据集(例如 Ruddit 和 Offenseval)对毒性的定义也大相径庭。为了从集成中获得最大收益,我生成了 14 个模型的所有子集,并对使用 rankdata + mean 混合的结果运行验证。通过这种方式,我发现上述 5 个模型的子集获得了最高分。
我还尝试了很多其他的集成策略:仅取最接近分数的平均值、编写自定义比较器函数并基于投票对评论进行排序、排名 + 人工分布生成(泊松、正态分布)等。不幸的是,在 CV 上,所有这些方法的效果都略逊于 rankdata + mean。
训练所有模型时使用了以下技巧:
validation_data.csv 中的一部分评论之前已经接触过它。我认为它存在数据泄露问题,因此改用了 roberta-base 和 unitary/unbiased-toxic-roberta。