返回列表

3rd place solution

496. U.S. Patent Phrase to Phrase Matching | us-patent-phrase-to-phrase-matching

开始: 2022-03-21 结束: 2022-06-20 自然语言处理 数据算法赛
第3名解决方案

第3名解决方案

作者: Saber (团队成员: xia, Decalogue, Rainbow Cat, Saber)
比赛排名: 第3名

感谢主办方和Kaggle团队举办这次比赛。也感谢许多通过Notebook或讨论区分享想法的参赛者。在我们找到“魔法”之前,很难提高分数。幸运的是,我们的团队实现了突破,并在比赛结束时获得了第3名。非常感谢我的队友们的辛勤工作! @xiamaozi11 @renxingkai @decalogue

总结

我们的团队试图在组织者分享的公共数据集中找到关于锚点和目标的额外信息。然而,这种方法收效甚微,因为只有部分数据匹配,或者那些文本没有用处。

我们解决方案的核心部分是将具有相同锚点的目标添加到每个数据样本中。这种数据处理技巧使我们的单模型在LB上的分数从0.84x提升到了0.85x。

我们在最终提交中堆叠了12个不同的模型。使用MSE损失的DeBERTa V3 large在CV和LB上都给出了最好的单模型分数。

验证策略

StratifiedGroupKFoldGroupKFold 都可以防止具有相同锚点的数据泄露到验证集中。GroupKFold 可以保持每个折的训练数据大小相同,而 StratifiedGroupKFold 可以保持标签的分布。我们(由不同的团队成员)使用了这两种方法,并且CV和LB之间都获得了相对较强的相关性。

数据处理

基线输入数据:

anchor [SEP] target [SEP] context text

我们的输入数据:

anchor [SEP] target; target_x1; target_x2; ... traget_xn; [SEP] context text

其中 target_xi 是具有相同锚点和上下文代码的目标。

通过硬编码它们很容易获得可比较的改进,而打乱序列可以达到更高的分数。

模型

预训练模型:

  • Electra large
  • Bert For Patent
  • DeBERTa V3 large
  • DeBERTa V1
  • DeBERTa V1 xlarge

损失函数:

  • 二元交叉熵损失
  • 均方误差损失
  • 皮尔逊相关系数损失

这些损失函数之间没有太大的区别。然而,在训练阶段使用不同的损失函数会在集成时带来很高的多样性,因为预测的分布看起来与oof不同。

技巧:

  • 不同层使用不同的学习率
  • FGM (Fast Gradient Method)
  • EMA (指数移动平均)

添加所有这些技巧可能会带来大约1k~2k的提升。

结果

单模型:

模型 CV Public Score Private Score
Bert For Patent 0.8362 / /
DeBERTa V3 large 0.8516 0.8559 0.8675
DeBERTa V1 0.8385 / /
DeBERTa V1 xlarge 0.8423 / /
Electra large