第22名方案:模型架构
第22名方案:模型架构
作者:Vee
比赛排名:第22名
感谢 Kaggle 举办了这场有趣且充满挑战的 NLP 比赛。这是我第一次认真参加 NLP 竞赛,非常享受其中的每一刻,并在过程中学到了很多。
首先,有几个因素让这场竞赛变得非常具有挑战性:
- 数据标注问题:训练数据中存在多处标注问题。虽然这很容易让人感到沮丧,但竞赛的挑战在于处理这种现实世界中始终存在的数据和标注问题。
- 缺乏 CV/LB 相关性:由于没有良好的相关性,我们并不真正知道该关注什么。这导致精力分散在各处。我训练了 XLM-Roberta Large、MURIL Large,尝试了多种损失函数和不同类型的头部(head),直到结果公布后我们才知道 Muril 和 Mean/Max head 确实有效(详见下文)。
架构
- XLM-Roberta:我使用了 Hugging Face 的 Trainer 模型。
- Muril-Large:这些模型的 CV/LB 相关性非常好,但训练非常不稳定。我在多次实验中都无法可靠地使其工作。这是我计划在比赛后改进的地方。
- XLM-Roberta with Mean/Max Head:在 CV/LB 相关性方面效果非常好,遗憾的是我在最后一周才意识到这一点。每当 CV 增加时,LB 分数就会跳升,我真的很想了解为什么这个特定的“head”效果这么好。感谢 @rashmibanthia 提供的这个想法。
Muril 和 Mean/Max 再次证明,架构设计并使用优秀的模型对于获得良好的结果至关重要。
数据
- 增强:我尝试了随机裁剪,对这个想法很兴奋,但 CV 并没有真正提高。我应该尝试检查这项技术的 Public LB 分数,但我认为这不会有什么改善。这可能没起作用的原因是模型太强大了,不会被这种程度的增强所愚弄。
- 自动翻译数据:我使用了自动翻译的数据,但这确实损害了性能。这是有道理的,因为翻译质量并不是很好。
- TyDi 数据集:我实验了 Tydi 数据集中的所有语言,发现泰卢固语 表现最好,其次是英语和孟加拉语。其他语言表现不佳。
后处理
- 我微调了 @nbroad 分享的后处理代码,以删除其他特殊字符(如
( 和 )),并将 k.m 替换为 k.m. 等。这带来了 0.002 的提升。
无效尝试
- 使用自动翻译数据进行数据增强:如上所述,这效果不佳。
- 使用中位数 代替均值:我曾在 Google Brain - Ventilator Pressure Prediction 比赛中花过一些时间,当时 @cdeotte 的一个想法在预测值远离均值时非常有效。我在这里尝试了使用中位数的相同想法,但在 LB 上分数下降了 0.005。经过进一步评估,看起来最终的 logits 并不像我想象的那样分散。
- End_Logits 修改:在评估模型预测期间,我意识到 start_logits 运作良好,但模型对 end_logits 的重视程度较低。所以我尝试使用
np.log100(np.sqrt(end_logits)) 进行微调。这在 Public LB 上确实有效,提升了约 0.002,但我最终放弃了它,因为我觉得它在 Private LB 上表现不会好(结果确实如此)。
未尝试的想法
- 在自动翻译数据上进行基础调优,然后在 chaii+mlqa+tydi 数据上进行微调:我相信这有真正的潜力,但没有时间去尝试。
- 集成投票:我认为这有潜力,但没来得及做。
最后,感谢所有让这场比赛变得有趣的人。