475. Jigsaw Rate Severity of Toxic Comments | jigsaw-toxic-severity-rating
公共排行榜似乎不太有用,所以我的策略就是最大化我的验证集分数。我的最终提交是6个(5折)Transformer模型的加权平均。这既是我最高的CV分数,也是最高的Private LB分数,所以我很高兴这次我选择信任我的CV。
我尝试包含尽可能多的不同数据集。在训练中我使用了:
我使用了 @columbia2131 的 Union-Find 方法来生成折,确保折之间没有任何文本泄露。我没有使用多数投票或任何其他消除数据分歧的方法,因为我认为这只会人为地使验证集变得更容易,并且与测试数据的相似度降低。
我使用Margin Ranking Loss来训练验证数据,并尝试了Margin Ranking和MSE来处理其他数据集。从额外数据集中创建大量排序配对数据相当容易,但我发现这并没有比直接使用MSE损失在标签上训练提高性能,而且还需要较小的批次大小。
在额外数据集上进行微调时,我在每次评估时计算验证集上与标注者的平均一致性,并使用早停。我在小数据集(jigsaw 1 和 ruddit)上训练了多个epoch,每个epoch评估一次。对于大数据集(offenseval 和 jigsaw 2),我通常只训练1个epoch,每完成该epoch进度的10%评估一次。
在验证数据上训练时,我训练了5个模型,每个模型使用4/5折进行训练,剩下的1折作为验证集。我在每个epoch计算CV,并使用CV最高的那个epoch的模型权重。
我最初使用的是折级早停,但我发现这会导致CV分数过于乐观。
我发现采用一个已经微调过的模型,并在另一个数据集上再次微调,可以提高性能。这在多个微调阶段都有效。效果最好的顺序是先在较大、分数较低的数据集上微调,然后再在较小的数据集上微调。
例如:
在早期的微调阶段,我大多以1e-5的学习率开始训练base-sized模型,在后续阶段降至1e-6。对于更大的模型,我使用了1e-6然后是5e-7。在每个阶段,我还使用了5%的预热和线性学习率衰减。即使使用混合精度训练,我的GPU上大模型也只能放下批次大小8,所以我使用了梯度累积来模拟批次大小64。
以下是模型结果表。
| 基础模型 | 折数 | CV | 最终提交 |
|---|---|---|---|
| deberta-v3-base | 5 | 0.715 | 是 |