返回列表

[Private 13th Solution] Pseudo-labeling

446. CommonLit Readability Prize | commonlitreadabilityprize

开始: 2021-05-03 结束: 2021-08-02 智能评测 数据算法赛
[Private 13th Solution] 伪标签

[Private 第13名方案] 伪标签

作者:Nguyen Duc Minh
发布时间:2021-08-03

感谢社区举办了这次比赛!

概述

  • 模型架构:roberta-large, xlnet-large, electra-large, deberta-large。
  • 注意力头:maunish 的 clrp-roberta-svm
  • 半监督学习,伪标签。
  • 超参数:我没有做太多调整,主要使用了 torch 的训练脚本 中的原始设置,因为既然我已经落后于其他人,我也没多少机会去竞争了。

注意:我在这篇文章中会报告我的 Public 分数,因为 Public / Private 的差异仅在 0.001 左右。

前半程

我在前半程花了大部分时间尝试不同的方法(分类任务、自定义损失)以及学习如何使用 Huggingface 的 TF 和 Pytorch。但我当时不太懂原理,所以所有的实验都不可复现,而且将其转化为分类问题基本上丢弃了所有的序数信息,所以效果不佳。

在熟悉了 Pytorch 和 Huggingface 之后,我在训练集上训练了 TF 模型,数据向左平移,因为 TF 模型在验证集上预测值偏高。将 roberta-large 和 xlnet-large 集成后,我的 LB 分数达到了 0.462。加入 Pytorch 模型和通过 torch 的精彩脚本 训练的注意力头后,分数提升到了 0.458

此时,我单个最好的 5 折模型分数仅为 0.468

后半程

伪标签

阅读了 Self-training with Noisy Student improves ImageNet classification 后深受启发。

我主要使用了 CMU 的书籍摘要电影摘要 以及少量的 Mark Wijkhuizen 的维基百科摘要。数据集是通过清洗和混合不同的数据集创建的。我用当时最好的集成模型生成了伪标签。大多数数据集包含 16k 到 26k 个摘录。

模型使用 80% 的训练数据(第一折)与新数据集拼接进行训练。这帮助我将 roberta-large 的单模型(1个文件)分数提升到了 0.465

在此之后,我花了两周时间苦苦寻找什么才算是一个好的数据集,我最终创建了 20 多个不同的数据集,但由于知识匮乏,仍无法弄清楚。

比赛的最后两周,我决定只使用表现最好的 3 个数据集,并简单地加入了 xlnet-large, electra-large, deberta-large,我的最佳分数变成了 0.455(4个文件)。加入 SVR 后分数为 0.454(4个文件)。将新数据集分成 4 折并集成 deberta-large 和 electra-large 后,分数达到了 0.452(8个文件)。

几点发现:

  • Public 分数在第一代之后变差了。我假设这是由于模型的学习能力有限,因为这种方法更倾向于模型的蒸馏和压缩,而不是大多数半监督学习方法中通常使用单个模型的预测来生成伪标签而不是集成模型的设置。这一发现与 On the Efficacy of Knowledge Distillation 作者的发现类似,尽管技术不同:“更大的模型并不总是更好的老师”。
  • deberta-large 表现最好。
  • 添加噪声并没有改善 CV,所以我没有提交。

注意:我不是该领域的专家,可能存在后见之明偏差,请随时指正。

终点线

  • 在将一堆模型集成在一起后,我最终在 Public LB 上以
同比赛其他方案