仅使用 Kaggle 和免费 Colab 获得18名
仅使用 Kaggle 和免费 Colab 获得18名
作者:Michal (MASTER) | 比赛排名:18th
首先,非常感谢 NBME 和 Kaggle 组织了如此有趣的比赛。
我写这篇文章主要是为了证明,即使是在像这样的比赛中,不拥有或租用昂贵的 GPU 也能获得不错的结果。我在免费 Colab(T4 gpu)上进行了大部分实验,使用的是数据子样本和较小的模型。当某些想法看起来有希望时,我会用更大的模型和更多的数据来测试,最终在 Kaggle 上训练并测试了一个完整的 fold。
因为我的实验资源有限,我查阅了 NBME 比赛的所有讨论,并阅读了类似比赛的解决方案,以找出哪些方法有效,所以我要感谢所有在讨论中分享知识的人。这是我第一次参加 NLP 比赛,如果没有 Kaggle 社区,我不可能取得这么好的成绩。
对我有效的方法:
- 保留换行符 - 按照此处描述的方法修改分词器。
- 将文本和特征转换为小写。
- 为换行符添加额外的 token:["\r", "\n", "\t"]。
- 为一些缩写添加额外的 token:["cc","hpi", "pmhx", "pmh", "rx", "fhx", "shx", "phi", "meds", "sh", "fh", "ros", "psh", "hx", "pshx", "fmhx"]。
- MLM 预训练(1 个 epoch,0.2 掩码概率,约 70% 准确率)。
- 伪标签。
- 来自 Roberta strikes back 的后处理修复空格方法。
我的模型集成
我的集成模型有点像大杂烩,因为我没有资源重新训练模型,所以我只能利用现有的资源:
-
deberta-v3-large (公榜: 0.888, 私榜: 0.890) - 权重: 0.4
5 折,分词器不删除换行符,小写,添加 token,MLM 预训练并在伪标签(20k 样本)上微调。
-
deberta-large-mnli (公榜: 0.885, 私榜: 0.886) - 权重: 0.2
在 95% 的训练数据上训练,分词器不删除换行符,小写,添加 token,MLM 预训练并在伪标签(20k 样本)上微调。
-
deberta-v3-large (公榜: ???, 私榜: ???) - 权重: 0.4
5 折中的 2 折(GPU 时间耗尽),普通分词器,无额外 token,MLM 预训练并在伪标签(20k 样本)上微调。
模型 1 和 2 使用了从所有模型(1、2、3)平均得出的伪标签,这提升了 CV(可能是泄露)和单模型分数,但在集成中的效果没有我预期的那么好。因此,对于模型 3,我只使用了它自己预测的伪标签(跨 fold 平均),这提升了 CV(泄露)、单模型分数,并且我认为对集成的帮助更大。
最终预测是模型字符级预测的加权和,并进行了后处理以修复空格。