返回列表

Toxic Solution and Review (2nd Place)

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

开始: 2021-11-08 结束: 2022-02-07 内容安全 数据算法赛
Toxic Solution and Review (2nd Place)

有毒评论分类解决方案与回顾(第2名)

作者: Rayden Xu | 排名: 第2名 | 发布日期: 2022-02-21

首先,恭喜获奖者以及所有享受这场比赛的人!虽然这是我第一次参加比赛,但我真的很喜欢 Kaggle 的这场比赛,尤其是那里充满竞争的氛围。

概述

老实说,我从没想过能获得第2名,这在很大程度上归功于运气,但我也要对这份运气说声“谢谢!”,因为它让我坚持使用 “Bert” 方法看到了积极的成果。我不得不说,我们一直惊叹并相信 “Bert” 在 NLP 领域的性能。Roberta 帮助我取得了成功,尽管它的公开分数低于线性模型,但我发现这场比赛的关键点可能在于 “公开排行榜可能会误导我们过拟合”

回顾

我记得很清楚,大概在1月的前十天,很多人开始疯狂提升公开排行榜排名,这让我觉得整体趋势不正常,所以我做了两个决定:

  1. 在本地运行程序,以避免过多关注公开排行榜分数。
  2. 我选择与一位本该组队的伙伴分道扬镳。(这里的故事是,我们一开始进行了沟通并一起做了很多基础工作和探索,但在1月那段疯狂时期,我不同意他对提升公开分数的痴迷,也不像他那样信任线性模型而不是 BERT。(也许 Roberta 的提交分数只有 0.79416,甚至低于 0.8,更不用说线性模型了(0.893+)),但当我从论文和教授那里学到更多时,我意识到这会导致一些过拟合风险。
    显然,这就是我们看到从公开排行榜到私人排行榜出现显著“洗牌”的原因。幸运的是,运气印证了我坚持使用 BERT 方法的决心。

关于数据集

我使用了上一次有毒评论分类比赛的数据。由于本次比赛的目标是预测评论的毒性,这是一个回归任务,我对原始数据的几个特征进行了加权平均。

关于数据清洗

BERT 在预训练时使用的是原始数据,这意味着预训练的 BERT 是基于未清洗的语料库。实际上,我发现数据清洗会改变分布并丢失信息。
通常,数据清洗可以提高线性模型的性能,但可能会损害 BERT 的性能。如果权重衰减或 dropout 值过大,模型性能会下降。深入研究后我们会发现,线性模型需要清洗以减少特征规模并减少过拟合。BERT 的容量足够大,因此不是非常必要。
所以最后,我对代码做了巨大的改动,特别是简化了数据清洗过程。

对比:
应用数据清洗:私人分数:0.80826,公开分数:0.77609
删除部分数据清洗:私人分数:0.81363,公开分数:0.79416

关于特征工程

  1. 对于文本预处理,只使用了简单的分词方法。我没有手动选择特征,因为模型可以学习每个 token 的重要性。
  2. BERT 模型就像一个特征转换器,将文本数据转换为长度为 768 的向量表示。

关于训练方法

我在本次比赛中使用了 BERT(来自 Transformer 的双向编码器表示)。BERT 是目前最先进的语言模型,它利用 Transformer 学习文本中单词(或子词)之间的上下文关系。我在本次比赛中使用的模型由两部分组成:RoBERTa base,以及在其上构建用于回归的多层感知机。这就是我选择这种方法并坚持到比赛结束的核心思想。

关于集成权重

我随机抽样了 5 折数据,每折包含一部分数据,并在每折上训练一个单独的模型。然后将这 5 个模型的预测结果进行平均。

优化

我使用了 Adam 优化器,因为它计算效率高,且适用于大型数据集和大型参数。此外,我还使用了学习率调度器,根据 epoch 逐渐降低学习率。这具有早期快速学习良好权重,后期进行微调的效果。

防止过拟合

重点使用 权重衰减、Dropout 层和早停 来防止模型过拟合。所有这些都保持了模型相对良好的泛化能力。
具体来说,对于 早停,停止标准将基于每个 epoch 的验证损失。

谢谢大家,很高兴大家帮助新人,我从这次比赛中学到了很多!

同比赛其他方案