第一名解决方案
第一名解决方案
作者:hyd (Grandmaster) | 排名:第 1 名
概述
我使用了在所有比赛数据上训练的单个列表式(list-wise)deberta-v3-large 模型。输入文本是由 [SEP] 和 [CLS] 标记分隔的单元格内容。
代码
有效的方法
- MLM(掩码语言模型)
- 预处理
- 理由和背景:它使文本更短,因此我们可以处理更长的文本。
- 使用 DeBERTa 而不是 CodeBERT
- +LSTM 头
- 更大的 cell_cnt(单元格数量)和 seq_length(序列长度)
- +后处理:同时预测代码和 Markdown,然后按基本真值对代码进行排序。
- 理由和背景:比仅预测 Markdown 然后与代码单元格拼接更合理。
无效的方法
- 翻译:facebook/mbart-large-50-many-to-one-mmt
- 理由和背景:大多数笔记本是英文的。或者是我操作有误。
- 将代码排名加入全连接层(+code rank to dense layers)
- 理由和背景:我应该尝试将文本与排名信息拼接。模型会学得更好。
- 提取嵌入,然后训练 Transformer 模型
- xlm-robert-large 或 mdeberta-v3-base
- 理由和背景:效果比 deberta-v3-large 差很多,所以无法直接进行集成。
重要参考
补充信息
- 损失函数为 MAE。
- 在训练数据上进行 MLM 15 个 epoch,max_length 为 1024。耗时 3 天。
- 训练 10 个 epoch,max_length 为 2048。耗时 7 天。我认为将 max_length 设置为 5120 会大大提高模型性能,但我没有足够的 A100~
- 推理:max_length 为 5120。耗时 6 小时。
- 我在最后两周使用了 1 * A100(80GB),在早期阶段使用了 1 * 3090(24GB)。
- 未来工作:
- 将文本与排名信息拼接:flag + rank_1 + cell_1 + flag+ rank_2 + cell_2 + … + flag+ rank_n + cell_n
- 多语言支持
- 额外的训练数据
- 对抗权重扰动(AWP),但太耗时
致谢
感谢竞赛组织者举办如此精彩的 NLP 竞赛。也感谢优秀的 Notebooks 和讨论,我学到了很多。
团队成员