446. CommonLit Readability Prize | commonlitreadabilityprize
我要感谢 Kaggle 和 CommonLit 举办了这次比赛,也要感谢这里所有分享了精彩讨论和 Notebooks 的人。我到现在还很震惊,因为我一直梦想着能获得单人金牌,但从没想过真的能实现!
这是继去年的 Tweet Sentiment Extraction 比赛之后,我参加的第二个 NLP 比赛。两者有一些相似之处,即 a) 数据集较小,b) 目标噪声较大。TSE 比赛的技巧是使用 5 折交叉验证(CV),但要平均多个随机种子(我用了 5 个,每个实验总共运行 25 次,然后取平均值)。
为了创建我的 5 折数据,我使用了 Abhishek 的分箱和分层 方法。平均来看,CV 和 Public LB 之间大约有 0.01 的差距,但相关性很好。我没有提交大部分的单模型,因为我对我的 CV 设置很满意,而且我很懒 😂️。
我表现最好的模型是 deberta-large,其 CV 为 0.4738(5 个种子的平均值)。
对于我所有的 transformer 模型,我使用了此 notebook 中的 AttentionBlock,但将其应用于 transformer 序列的最后隐藏状态。
n_hidden = self.config.hidden_size # from HF config
self.seq_attn_head = nn.Sequential(
nn.LayerNorm(n_hidden),
AttentionBlock(n_hidden, n_hidden, 1),
nn.Linear(n_hidden + n_additional_features, 2 if kl_loss else 1),
)
我还使用 textstat 添加了几个特征,即 flesch_reading_ease 和 smog_index,并将它们拼接到 AttentionBlock 的输出之后,再进入回归头。这些特征给我的 CV 带来了微小但可重复的提升,但我不确定这对最终性能是否有重大影响。我在比赛后期做了一个测试,拼接了其他模型的预测结果,效果并不比下面的集成方法好,这让我觉得这些特征的作用很小。
我从所有的模型开始,迭代地移除最差的模型,直到符合 GPU 时间限制。(我发现这比贪婪地添加模型效果更好)。我认为这最终效果很好,因为选择过程会选择有助于整体集成的模型,而不是 CV 分数最高的模型。
我主要使用了 3 种集成方法: