574. CommonLit - Evaluate Student Summaries | commonlit-evaluate-student-summaries
我的解决方案相当简单,因为我几乎没有使用复杂的技巧——相反,我只是构建了一个可靠的流程并找到了合适的超参数。我有一些很棒的想法(至少我自己这么认为 :))——利用增强技术,并基于commonlit.org上的其他文本使用大模型生成合成数据。但那时,当我还在积极贡献时,文本的许可存在不确定性,我没有完成增强技术的使用——我忙于工作(尝试让RLHF生效),所以我退出了比赛——我最后一次提交是一个月前。但显然这个决定是正确的,至少我没有过拟合 :)
现在让我们将我的解决方案分解为几个部分。
我使用了相当标准的模板:提示词 + 问题 + 文本。在比赛末期,我深入挖掘数据并进行了良好的预处理——毕竟,有很多非常相似的论文具有相同或不同的分数。因此,我尝试通过相似性(如莱文斯坦距离)找到这些样本,然后将它们合并。此外,我基于这一洞察决定进行增强——如果有很多相似的论文(仅因拼写错误而不同)——我可以使用类似反向自动校正的方法——用相近的词汇随机替换某些词。仅使用这一技术,我在fold3上就获得了0.453的私有分数(比我最终选择的混合模型更好,可能让我获得第二名)——但那时我太累了,没有进一步研究增强技术。但我认为增强技术很可能让我赢得比赛。
Deberta是王者,所以这里没什么好说的。我尝试使用像Llama这样的解码器模型,但Deberta仍然更好。一些技术给了我提升——使用EMA(老实说,没有EMA会非常不稳定,所以它可能是必需的)和使用差异学习率。我尝试了几种池化选项,但对我而言最好的选择是连接CLS标记和学生文本的平均池化。我还使用token_type_ids来区分提示、问题和文章。
我采用了以下方案——我在某个折(例如fold0)上尝试找到好的超参数,然后在其他折上使用完全相同的超参数进行训练。然后我提交整个混合模型和4个单独模型(一天共5次提交),第二天重复该过程。我意识到在推理时可以使用maxlen 1500(没有深入研究这个数字,尝试过1024和2048,但1500在效率方面更好),所以在最终混合中我选择了各折中最好的10个检查点(有些折有2个检查点,有些有3个)。首先按折取平均值,然后再取总平均。就是这样。
简要总结有效的方法(按重要性从高到低排序,个人观点):
使用Deberta
EMA(指数移动平均)
数据增强
差异学习率
自定义池化
token_type_ids
数据清洗
无效的方法(随机排序):
解码器模型
AWP(对抗性权重扰动)
FGM(快速梯度方法)
权重衰减(WD)
恒定学习率
手工特征
使用GBT进行堆叠
最终,对我来说这是一场很好的比赛。去年我参加了另一场NLP比赛并获得银牌,但当时我整天都在努力(那时候我没有工作,所以有很多空闲时间)。这次我也预期是银牌,我认为这是一个不错的成绩,但我获得了第三名。无论如何,这场比赛对我来说很轻松,因为我投入的努力很少(至少与上一场比赛相比)。我希望这意味着我今年会有很大成长——我认为这是参加Kaggle的主要目标。
祝大家一切顺利。
```