615. Learning Agency Lab - Automated Essay Scoring 2.0 | learning-agency-lab-automated-essay-scoring-2
首先,我要感谢竞赛组织者、Kaggle,并祝贺所有获奖者。
我还要感谢在各种讨论中提供有用信息的所有 Kaggle 用户。
早期对竞赛数据的分析显示,许多记录与 Persuade Corpus 2.0 中的文本相同。这些相同文本记录有七种提示名称(prompt names)。正如在 这个讨论帖 中所讨论的,基于提示名称使用 group k-fold 会导致较低的 CV 但较高的 LB 分数。考虑到提示名称的角度,我假设了三种可能的模式,并根据使用 group k-fold 时的 LB 结果,我认为可能性为 2 或 3。
有讨论认为测试数据中没有新的提示名称。此外,虽然基于提示名称的 group k-fold 产生了较高的 LB 分数,但 fold 之间的分数差异很大,且训练/验证数据数量不平衡。因此,我考虑了一种替代策略。
| Car-free cities | The Face on Mars | Driverless cars | Exploring Venus | Does the electoral college work? | Facial action coding system | "A Cowboy Who Rode the Waves" | 总计 | |
|---|---|---|---|---|---|---|---|---|
| 训练集大小 | 15345 | 15214 | 13810 | 14291 | 15261 | 14264 | 15657 | 17307 |
| 验证集大小 | 1962 | 2093 | 3497 | 3016 | 2046 | 3043 | 1650 | 17307 |
| CV | 0.695 | 0.731 | 0.788 | 0.825 | 0.798 | 0.844 | 0.711 | 0.797 |
| 公共榜 | 0.816 | 0.801 | 0.816 | 0.796 | 0.805 | 0.816 | 0.807 | 0.818 |
| 私有榜 | 0.829 | 0.815 | 0.823 | 0.804 | 0.822 | 0.822 | 0.819 | 0.824 |
竞赛数据包含 12,871 条来自 Persuade Corpus 2.0 的记录(称为数据 A)和 4,436 条来自 Persuade Corpus 2.0 以外来源的记录(称为数据 B)。在 Groupkfold 的最佳情况下,CV 为 0.818,LB 为 0.826,观察到以下差异:
数据 A: 0.826
数据 B: 0.792
我切换到专注于数据 B 的策略,并尝试了以下两阶段训练:
第一阶段:使用数据 A + B 训练,并根据数据 B 的评估在每个 epoch 保存模型。
第二阶段:加载第一阶段模型的权重,使用数据 B 训练,并根据数据 A 的评估保存模型(以避免过拟合数据 B)。
两阶段训练的结果是 CV 为 0.828,LB 保持在 0.826,但数据 B 显著改善如下。此外,与 Groupkfold 相比,私有榜分数显著提高,表明专注于数据 B 是一个好策略。
| 数据 A | 数据 B | CV | 公共榜 | 私有榜 | |
|---|---|---|---|---|---|
| groupkfold | 0.826 | 0.792 | 0.818 | 0.826 | 0.828 |
| 专注于数据 B | 0.832 | 0.815 | 0.828 | 0.826 | 0.838 |
在 deberta 中,"\\n"(换行符)被忽略,所以我将它们转换为 "[BR]" 并在 tokenizer 中将其设置为特殊 token。这遵循了我在之前的 FeedbackPrize 竞赛中实施的预处理。
如上所述,最初我选择了基于提示名称的 groupkfold。然而,后来我 switched 到基于提示名称/分数的 Multilabelstratifiedkfold。
我使用 Multilabelstratifiedkfold 分别拆分了数据 A 和数据 B。
鉴于大多数 token 的大小超过 512,我主要采用 deberta-v3 系列作为 backbone。为了训练的稳定性,我利用了 MLM 预训练和层冻结。有效的层冻结包括 deberta-v3-base/xsmall 的 9 层和 deberta-v3-large 的 6 层。
此外,因为回归往往比分类产生更好的分数,我选择了回归,并且 BCE(二元交叉熵)损失函数是稳定的。
在第二阶段训练期间,利用基于第一阶段 out-of-fold 预测的 soft-labeling 导致了 CV 和公共榜分数的提高。
与 deberta-v3-large 相比,deberta-v3-base 显示出更稳定的 CV/LB 性能,同样,作为单一模型(6-fold)它也达到了最高的私有榜分数。不幸的是,排名第一的模型没有被包含在集成中。(这次竞赛使得选择变得相当具有挑战性。)
| 排名 | 模型 | CV | 公共榜 | 私有榜 |
|---|---|---|---|---|
| 1 | deberta-v3-base | 0.8279 | 0.8216 | 0.8399 |
| 2 | deberta-v3-base | 0.8281 | 0.8264 | 0.8384 |
| 3 | deberta-v3-base | 0.8227 | 0.8278 | 0.8380 |
我选择了使用 Nelder-Mead 的简单集成。
| 模型 | 最大长度 | 层冻结 | 头部结构 | CV |
|---|---|---|---|---|
| deberta-v3-base | 1024 | 9 | MeanPooling&LayerNorm | 0.825 |
| deberta-v3-base | 1536 | 9 | MeanPooling&LayerNorm | 0.827 |
| deberta-v3-base | 1024 | 9 | AttentionPooling | 0.828 |
| deberta-v3-base | 1536 | 9 | AttentionPooling | 0.826 |
| deberta-v3-base | 1024 | 9 | LSTMPooling | 0.823 |
| deberta-v3-base | 1536 | 9 | LSTMPooling | 0.822 |
| deberta-v3-large | 1024 | 6 | MeanPooling&LayerNorm | 0.830 |
| deberta-v3-large | 1536 | 6 | MeanPooling&LayerNorm | 0.830 |
| deberta-v3-large | 1024 | 6 | AttentionPooling | 0.832 |
| deberta-v3-large | 1536 | 6 | AttentionPooling | 0.834 |
CV: 0.8357
公共榜:0.8329
私有榜:0.8399
最高的私有榜分数来自以下集成,但未被选中,因为其在 CV 和公共榜分数上表现较低。
CV: 0.8274
公共榜:0.8240
私有榜:0.8415