返回列表

24th Place: Late Interaction + TPUs + More

475. Jigsaw Rate Severity of Toxic Comments | jigsaw-toxic-severity-rating

开始: 2021-11-08 结束: 2022-02-07 内容安全 数据算法赛
第24名方案:后期交互机制 + TPU + 更多技巧

第24名方案:后期交互机制 + TPU + 更多技巧

作者:Sarthak Bhatt
比赛排名:第24名

后期交互机制

这个想法大致借鉴了 ColBERT 论文中的后期交互机制。
手头的任务是根据毒性程度对 14,000 条评论进行排名。这类似于谷歌的搜索排名,模型必须根据查询快速对数百万个搜索结果进行排序。为了找到有用的方法,我开始阅读有关搜索排名的论文。这就是我接触到交叉编码器、双编码器 和后期交互机制的地方。

我之前曾发过一篇关于 交叉编码器与双编码器 的帖子。后期交互机制可以看作是结合了交叉编码器的表征能力和双编码器的低延迟优势。

我们得到的训练数据是成对形式的(毒性较弱的评论,毒性较强的评论)。

交叉编码器能够更好地模拟这种成对交互,但在测试时无法使用,因为评论之间总共有 14k*14k/2 = 9800 万种可能的成对交互。
另一方面,双编码器只能单独查看每条评论,并将其压缩成一个向量。

在这里,我使用后期交互机制以一种省时的方式近似计算所有的成对交互。这将我的公共 LB 分数从 0.844 提高到了 0.872。遗憾的是,它对私有 LB 并没有产生如此大的影响。

其他技巧

  • 伪标签:我使用了 2018 年比赛的数据集进行伪标签标注,这带来了分数的大幅提升。
  • Muppet Roberta Large:Facebook 的 Muppet Roberta Large 骨干网络给我带来了更好的性能,可能是因为它已经在情感分析和句子相似度任务上进行了预训练。
  • 模型集成:由于伪标签的软标签特性,在单一骨干网络上的集成并没有帮助。回想起来,我应该进行更多的集成。
  • 损失函数: 我使用了 《Dice Loss for Data Unbalanced NLP Tasks》 论文中的 Dice Loss(alpha 设为 0.25)来训练二分类标签:severe_toxic(严重毒性)、identity_hate(身份仇恨)、threat(威胁)、toxic(毒性)、obscene(污秽)和 insult(侮辱)。我是在研究 Feedback 比赛时发现这篇论文的,结果证明它对本场比赛也很有用。
  • TPU:为了加快训练速度,我使用了 512 的批量大小和混合精度。在 20 万多条评论上训练一个 Roberta Large 模型,每个 Epoch 耗时不到 5 分钟。我通常在 NLP 任务中使用 Tensorflow+TPU,因为 20 小时的免费 8xTPUv3 资源远胜于 30 小时的免费 P100 GPU。
  • 超参数:为了弥补大批量大小的影响,我将 beta_2 设置为 0.99,并使用了循环学习率,最大学习率为 16e-5。
  • SWA (随机权重平均):我还在 Keras 中实现了一个 SWA 回调,以便在每个周期结束时保存权重。最后我对权重进行了平均(模型汤 Model Soup)。
  • 移动平均:使用 0.99 的 EMA(指数移动平均)带来了微小的提升。

我使用了一些得分最高的公共笔记本来生成额外的伪标签。我还基于 2019 年比赛数据训练了一个模型来生成更多的伪标签。这样,对于每条评论,我都有 20 多个标签。

第 0 轮公共 LB:0.833 | 第 1 轮公共 LB:0.837 | 第 2 轮公共 LB:0.844 | 第 3 轮公共 LB:0.842


后见之明:我真希望我读过 Deepmind 的这篇论文:《Multiplicative Interactions and Where to Find Them》

同比赛其他方案