返回列表

8th place solution: Predicting Targets at Once Led Us to Gold

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

开始: 2022-03-21 结束: 2022-06-20 自然语言处理 数据算法赛
第8名方案:一次性预测目标助我们夺金

第8名方案:一次性预测目标助我们夺金

作者: sakusaku-rich (Team N) | 排名: 8/2087 | 发布时间: 2022-06-22

首先,我们要感谢比赛组织者和 Kaggle 平台举办了如此激动人心的比赛。我也要感谢我的队友们。如果没有他们,我一周前就放弃了,也无法有效地利用我的想法。

我从这次比赛中学到了很多,并获得了一些可以应用于其他 NLP 任务的通用知识。

我们最终获得了第8名(公共/私有排行榜均为第8),我想总结我们的解决方案,并分享一些对我们无效的尝试。

概述

我们使用了 6 个用 BCELoss 训练的模型,并通过不同的权重进行平均作为集成方案。

overview

模型

Token 分类模型

token_classification_model

本次比赛旨在估计特定上下文中特定词对(anchor 和 target)之间的语义相似度。有多个 target 需要与特定的 anchor 进行比较。

因此,我们假设可以利用三种信息来预测相似度。

  1. anchor 和 target 之间的语义相关性
  2. 词对与上下文之间的语义相关性
  3. 应该与同一 anchor 进行比较的 target 们与特定 target 之间的语义相关性

我们绞尽脑汁,将输入定义如下,并将其输入模型。

anchorwise_input

[TAR] 是我们添加的一个特殊 token,用于让模型识别每个 target token 的位置。

这种方法极大地提高了分数,并缩短了训练/推理时间,因为模型可以一次性推断多个 anchor-target 对。

  • 公共 LB:0.8380(奖牌圈外) -> 0.8535(银牌圈)
  • 私有 LB:0.8526(奖牌圈外) -> 0.8656(银牌圈)

编辑:
我发布了一个训练 token 分类模型的 notebook。
https://www.kaggle.com/code/skraiii/pppm-tokenclassificationmodel-train-8th-place

文本分类模型

text_classification_model

我们也训练了作为文本分类任务的模型。可能大多数参赛者都采用了这种方法,但我们加了一个小技巧。我们只使用了对应 CLS token 的注意力输出。在我们的实验中,这使得模型学习更快,分数也有所提高。虽然该模型的 CV 分数低于 token 分类模型,但它有助于提高集成性能。

训练

CV 策略

我们使用了 StratifiedGroupKFold(n_folds=4),按分数分层,按 anchor 分组。

Target Shuffle Augmentation(目标洗牌增强)

我们定义了具有多个 target 的 anchor-wise 输入,因此我们通过每个样本洗牌 target 来增强数据。这可以防止模型记忆训练样本本身。

target_shuffle_aug

AWP (Adversarial Weight Perturbation,对抗性权重扰动)

这种对抗训练方法提高了我们的 CV 分数。我们修改了由 @currypurin 制作的 AWP 代码。

超参数非常重要。主要的超参数是 adv_lr。在过去的比赛中,获胜者经常调整 adv_eps。然而,在仔细阅读原始论文后,我们得出结论,adv_lr 更重要。

根据我们的理解,adv_epsadv_lr 可以用下图来说明。(不过,我们有一些与预期行为略有不同的经历,所以某处可能存在错误。)

同比赛其他方案