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