第19名方案:伪标签与后处理
第19名方案:伪标签与后处理
作者: mrt💪🥺, YYama, Naoism, MST
比赛排名: 第19名
我要感谢主办方和Kaggle组织了这场精彩的比赛!
感谢所有参与者提供的有用代码和有趣的讨论!
同时也要感谢我所有优秀的队友(@naoism, @yosukeyama, @mst8823)!
概要
5个模型的集成。进行了一些后处理。
CV:0.8971,Private LB:0.892
MLM 预训练
精度提高了约0.002。
- mlm_probability=0.15。使用了所有无标签数据。
模型
三个 deberta-v3-large,一个 deberta-v2-xlarge,一个 deberta-v1-large。
所有模型的损失函数均为 BCEwithLogitsLoss(我们尝试了 jaccard 和 KLD,但 bce 的 CV 表现最好)。
模型1:
- deberta-v3-large
- CV:0.8875,Private LB:0.889
- 包含类似此讨论中提到的 /n 字符
模型2:
- deberta-v3-large
- CV:0.8957,Private LB:0.890
- 包含 '/n' 字符
- AWP (对抗权重扰动)
- Mask 增强:prob=0.8,ratio=0.03
- 伪标签
- 使用从无标签数据生成的伪标签进行预训练。使用从有标签数据生成的伪标签进行微调。
模型3:
- deberta-v3-large
- CV:0.890,Private LB:-
- AWP
- Mask 增强:prob=1.0,ratio=0.2
- Multi sample dropout
- 伪标签(软伪标签)
- 保留有标签数据,同时从无标签数据中随机抽取 11,000 个样本进行训练。
模型4:
- deberta v2 xlarge
- CV:0.882,Private LB:-
- 无 MLM。
- 使用 BNB (Bits and Bytes) 来增加 batch size,因为小 batch size 很难收敛。
模型5:
- deberta v1 large
- CV:0.8934,Private LB:0.891
- Multi sample dropout
- 伪标签
- 使用伪标签和有标签(训练)数据进行预训练。仅使用有标签数据进行微调。
伪标签
@naoism 实现了这一部分,非常感谢。
只有模型3使用了单个模型的推理结果。
其他模型使用了三个在没有伪标签的情况下 CV 表现良好的模型的集成结果。
集成
- 字符概率级别的集成。对每个模型的 5 折集成结果进行再次集成。
- 阈值使用 CV 最佳的值。
- 结合使用和未使用伪标签的模型可以提高精度。
后处理
- 如果单词前没有紧跟空格(例如 "hello),由于 offset mapping 问题,推理位置会发生偏移。在这种情况下,我们将推理的起始位置修正一位。
- 同样,将从 1 开始的推理修正为从 0 开始。