519. Feedback Prize - English Language Learning | feedback-prize-english-language-learning
感谢 Kaggle 和主办方举办第三届 Feedback 竞赛。
我的解决方案基于多个微调 NLP transformer 模型的集成。此外,我在旧的 Feedback 数据上使用了两轮伪标签。
我参考了我们在第二届 Feedback 竞赛中的很多建议(描述这里),并为这次比赛工作了大约两周。我的时间分配大约是 50% 用于准确性,50% 用于效率解决方案。
总的来说,我观察到本地 CV 和公共 LB 之间有很好的相关性。由于数据非常少且评估指标是 RMSE,本地得分可能会非常不稳定。为此,对于我运行的每个实验,我都训练了三个不同的随机种子,并且只比较这三个种子的平均值。例如,如果我想比较 LR=1e-5 和 LR=2e-5,我会为这两个实验分别运行三个单独的种子进行单折验证,只有当三个种子的平均值有提升时,我才会在所有 5 折上运行,然后再次比较 3 个种子的混合结果以确保无误。
这让我能够为我的实验带来更多的可信度,而且由于数据量真的很小,这对我来说通常是可行的。
当前的问题非常直接:将文本输入 transformer 模型,应用某种池化,添加一个线性头,并预测回归目标。我在最终集成中使用了以下训练流程的组合:
Token 长度:
我所有的模型都使用动态填充进行训练和预测。
池化:
主干网络:
对于我的大多数模型,我通常运行 3 个 epoch,全部使用余弦衰减学习率,并总是选择最后一个 epoch。我对模型的主干和头部使用差异化学习率。我不使用论坛中建议的任何其他技术,如主干各层的差异化学习率或重新初始化。
像往常一样,为了最终提交,我在完整数据上重新训练了我的模型,但也混入了一些折模型,因为我还有很多运行时间剩余。
我遵循了我们在第二届 FB 竞赛中的流程,并按照以下步骤实施了两阶段伪标签:
通过进行预训练和微调,我不需要调整伪标签的分布,因为我正在本次竞赛的数据上做最终调整。这让我能够毫无问题地使用所有以前的数据。
对于我的大多数提交,我只是做了跨种子和模型的常规平均。我最终最好的提交是一个经过 Nelder-Mead 优化的模型集成,我分别针对每个目标列优化了集成权重。为了不过度拟合 CV,我在权重上添加了 1 到 3 之间的权重界限。
实际上,我本可以更信任本地优化,我几天前有一个未选中的提交,拥有最好的本地 CV,它在 Private LB 上能排到第 2 名,该提交对集成权重没有限制,甚至包含负权重,但这感觉有点太冒险了,而且因为我只做了一次基于最佳 CV 的提交,所以我选择了一个稍微保守一点的方案。
我做了一个基于保守最佳 CV 分数的提交,这也是我最好的已选 Private LB 提交(虽然我有一个更好的未选中提交)。我做了一个基于最佳 Public LB 的提交,它在 Private LB 上明显更差。还有一个提交花在了效率上。