496. U.S. Patent Phrase to Phrase Matching | us-patent-phrase-to-phrase-matching
感谢主办方和Kaggle团队举办这次比赛。也感谢许多通过Notebook或讨论区分享想法的参赛者。在我们找到“魔法”之前,很难提高分数。幸运的是,我们的团队实现了突破,并在比赛结束时获得了第3名。非常感谢我的队友们的辛勤工作! @xiamaozi11 @renxingkai @decalogue
我们的团队试图在组织者分享的公共数据集中找到关于锚点和目标的额外信息。然而,这种方法收效甚微,因为只有部分数据匹配,或者那些文本没有用处。
我们解决方案的核心部分是将具有相同锚点的目标添加到每个数据样本中。这种数据处理技巧使我们的单模型在LB上的分数从0.84x提升到了0.85x。
我们在最终提交中堆叠了12个不同的模型。使用MSE损失的DeBERTa V3 large在CV和LB上都给出了最好的单模型分数。
StratifiedGroupKFold 和 GroupKFold 都可以防止具有相同锚点的数据泄露到验证集中。GroupKFold 可以保持每个折的训练数据大小相同,而 StratifiedGroupKFold 可以保持标签的分布。我们(由不同的团队成员)使用了这两种方法,并且CV和LB之间都获得了相对较强的相关性。
基线输入数据:
anchor [SEP] target [SEP] context text
我们的输入数据:
anchor [SEP] target; target_x1; target_x2; ... traget_xn; [SEP] context text
其中 target_xi 是具有相同锚点和上下文代码的目标。
通过硬编码它们很容易获得可比较的改进,而打乱序列可以达到更高的分数。
预训练模型:
损失函数:
这些损失函数之间没有太大的区别。然而,在训练阶段使用不同的损失函数会在集成时带来很高的多样性,因为预测的分布看起来与oof不同。
技巧:
添加所有这些技巧可能会带来大约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 |