446. CommonLit Readability Prize | commonlitreadabilityprize
首先,我们要感谢 Kaggle 和 Commonlit 主办了如此有趣的比赛!这是我们在 NLP 竞赛领域的首次挑战,非常感谢 @rhtsingh、@maunish 和 @andretugan 分享他们精彩的内核。他们的笔记本对本次比赛的帮助无疑是巨大的。
我们选择了 Public LB(公开排行榜)成绩最好的模型和 CV(交叉验证)成绩最好的模型作为最终提交。以下是我们最好的提交结果:
| 提交类型 | Public LB | Private LB |
|---|---|---|
| 最佳 Public LB | 0.450 | 0.451 |
| 最佳 CV | 0.451 | 0.448 |
我们融合了 10 个模型,其中包括两个 25 折交叉验证模型。
数据集大小是机器学习最重要的因素之一。在本次比赛中,train.csv 包含约 3000 个样本。一般来说,对于训练深度学习模型来说,这个数字非常小。为了充分利用这个小数据集,我们仔细确定了 K 折交叉验证中的折数(K)。我们的假设是,如果增加 K,由于训练样本数量的增加,模型表现会更好(当然,K 会有上限,因为验证样本会变得太少)。我们尝试了 4 个候选值(K=5, 10, 15, 25)来验证这一假设。正如我们所预期的,我们观察到随着 K 的增加,LB 分数有微小但稳定的提升。具体来说,将 K 从 5 增加到 15 使 Public(和 Private)LB 提高了 0.002。从 15 增加到 25 并没有改变显示的分数,但略微提高了分数(我们通过按分数对提交进行排序确认了这一点)。考虑到推理时间,我们决定对一些强大的单模型(deberta-large,roberta-large,使用交叉熵损失训练)采用 25 折。顺便说一句,我们使用了普通的 K 折交叉验证,因为使用分箱目标(binned target)的分层 K 折似乎并没有显著提高 CV-LB 的相关性。
像大多数团队一样,我们使用了 HuggingFace 上用 PyTorch 实现的预训练模型。通过几次实验,发现 deberta-large 的表现明显更好。然而,deberta-large 需要比其他模型更长的训练时间,因此我们试图通过使用 deberta base 在短时间内获得 deberta-large 的最佳参数。一些内核和论文对这些实验非常有帮助(例如:https://arxiv.org/abs/2006.04884)。在更改了许多参数(包括学习率、激活层)后,通过更改损失函数获得了最佳结果。一些使用交叉熵损失的模型在之前的 NLP 竞赛中表现出了优异的结果(例如:Google Quest Challenge 讨论)。因此,我们使用 Sigmoid(target - Median(target)) 作为预测标签训练了 BCEWithLogitsLoss。在预测期间将 Median(target) 加回回归器。这个想法对 CV 和 LB 分数都有显著贡献,也对融合效果贡献显著。
| 模型 | Public 分数 | 融合权重 |
|---|---|---|
| RoBERTa-Large (25 折 交叉熵) | - | 0.4 |
| DeBERTa large (25 折) | 0.458 | 0.25 |
| DeBERTa large (15 折 交叉熵) | - | 0.25 |
| DeBERTa large 5轮 5折 | 0.460 | 0.1 |