返回列表

2nd Place Solution

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

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

第二名方案

作者:Leon, Tifo
比赛排名:第2名

首先,我要感谢竞赛主办方举办了这场有趣的比赛。感谢我的优秀队友 @Tifo,我们在过去的一个月里努力讨论和工作,探索新方法。同时也感谢社区提供的优秀 Notebooks 和讨论。

魔法在哪里

关键在于,在同一个 Anchor 下,不同的 Target 之间存在很强的相关性。(你可以从 GroupKFold 和 KFold 的分数差距中看出这一点)。例如,有些 Target 与原始 Target 相似,有些则与 Anchor 相似。简而言之,将它们添加到上下文中可以更有效地捕捉 Anchor 和 Target 之间的相关性。

我们使用了多种方法来利用这一“魔法”:

第一阶段 (Stage 1)

  1. 将来自同一个 anchor 的 Target 分组,例如 'target1, target2, target3, ...'。然后将它们添加到上下文中。
  2. 将来自同一个 anchorcontext 的 Target 分组。这带来了更相关的 Target。
  3. 将来自同一个 anchor 的 Target 分组。将来自同一个 context 的 Anchor 分组。依次将它们添加到上下文中。

第二阶段 (Stage 2)

  1. 将来自同一个 anchor 的 Target 分组,并添加 OOF 分数来描述更具体的定量信息,例如 'target1 23, target2 47, ...'。分数乘以 100,以便可以被识别为一个 Token。

  2. 将来自同一个 anchorcontext 的 Target 分组,并附带分数。

细节

  • 在训练期间,分组在训练集内部进行,分数来自第一阶段模型的 OOF 分数。
  • 在推理期间,分组是在将训练集和测试集拼接后进行的,分数来自 OOF 和第一阶段模型对测试集的预测。(为什么要拼接?因为训练集和测试集中有重叠的 Anchor。)

有效的技巧

  • FGM (Fast Gradient Method)

  • EMA(指数移动平均)

    • decay: 0.999
    • 单模型 CV 提升 0.001-0.003
  • 知识蒸馏

    • 换句话说,使用集成模型的 OOF 作为软标签。通过这种方式,单模型可以达到接近集成模型的性能(只是节省时间,但没有更多多样性)。
    • 确保每个 Fold 只使用对应的标签,以避免泄露。
    • 第二轮或更多轮的实际表现与第一轮几乎相同,而且 CV 会以一种奇怪的方式失真。我们只使用了从第一轮蒸馏出来的少数模型。

无效的尝试

  • BCE Loss (二元交叉熵损失)
  • MLM (掩码语言模型)
  • 后处理

模型

  • Deberta-v3-large
  • Bert-for-patents
  • Deberta-large

交叉验证 (CV) 分割

我们使用了 5 折 StratifiedGroupKFold(相同的种子 42,按 Anchor 分组)。因此,我们能够有效地使用 OOF 来获得集成分数和模型权重。线性回归比 Optuna 搜索快得多。

当模型数量足够多时,我们的 CV 和 LB(Leaderboard)是完全相关的。

Notebook 代码

提交地址:https://www.kaggle.com/code/zzy990106/upppm-final

你可以在代码中找到更多细节。

同比赛其他方案