返回列表

5th place solution

446. CommonLit Readability Prize | commonlitreadabilityprize

开始: 2021-05-03 结束: 2021-08-02 智能评测 数据算法赛
第5名方案

第5名方案

作者:Ruby (Master) | 比赛:CommonLit Readability Prize

感谢 Kaggle 和 CommonLit 举办这次比赛,这是我的第一次 NLP 比赛,我学到了很多东西。
同时非常感谢 @rhtsingh(我从你的笔记本中学到了很多关于 NLP 的知识),@leighplt(我使用你的笔记本作为初始基线)和 @konradb(我使用了你笔记本中的特征)。

交叉验证 (CV)

  • 我使用的是不打乱的 K-Fold,因为我注意到训练集没有被打乱,而且摘录似乎来自不同来源的批次。我认为测试集可能也是由来自其他来源的摘录组成的,而且众所周知测试集包含更多的现代文本。所以我认为使用不打乱的 K-Fold 可能更好地衡量“分布外”的泛化能力。
  • 根据我早期的实验,不打乱的 CV 分数通常比打乱的分数高 0.01 左右。由于 LB 分数是 5 个模型的平均值(我使用 5 折),而 CV 是由 5 个模型的袋外预测给出的(每次一个模型),所以我预计 CV 分数会高于 LB 分数。
  • 虽然我认为不打乱的 K-Fold 似乎更好,但我没有系统地检查它是否优于打乱的方式,或者是否进一步按分箱分组。

Dropout(丢弃)

  • 在此任务中应用 dropout 时,模型性能在 .train().eval() 模式之间似乎存在差距。我认为这可能源于我无法识别的潜在错误,或者某些层在 .train().eval() 之间的方差差异。Dropout 中的缩放因子通常不能保证层具有相同的方差,而“可读性”听起来像是一个与“方差”/“困惑度”...相关的概念。当然,这可能不是真正的原因。
  • 我没能彻底解决这个问题。我在模型中使用了 dropout,但在推理时使用 .train() 模式,这给了我合理的性能,并且在我的情况下优于零 dropout 设置。由于 dropout 的随机性,我在推理时对同一模型但不同种子(seed)的预测结果进行了平均,这给了我进一步的提升。

其他对我有效的超参数

  • AdamW 优化器,5 个 epochs
  • 余弦学习率调度器
  • 跨层指数变化学习率
  • 重新初始化部分层
  • 梯度累积以获得更大的批次大小(由于笔记本时间限制,我只尝试了基础模型批次大小 32 和大型模型批次大小 16)
  • 线性层头,后接最后隐藏状态的平均池化(有时我使用两个线性层输出,但这主要是因为我想跟踪我早期的一个实验,两个或一个线性层的性能差别不大。)

我在最终解决方案中包含了一个带有 ITPT 的模型,但这只是为了多样性,它在 CV 和 LB 方面对我都没有效果。

用于最终推理的单模型

(分数为未进行 dropout 平均的分数)

模型编号 模型名称 CV 分数 Public LB
F2roberta large0.48390.470
F17roberta base0.47580.468
F23roberta large0.47920.465
F32deberta large0.47490.469
F41roberta large mnli0.47960.475
F50funnel large0.4800.465
F51electra large0.4790.469

同名模型具有不同的参数,您可以在相应的笔记本中查看详情。

我使用基于 CV 的“one drop”策略来选择模型,虽然我最好的单模型 deberta large(CV 0.4757,Public LB 0.462,Private LB 0.462)并没有包含在我的最终推理

同比赛其他方案