返回列表

10th place late writeup[code available now]

331. Jigsaw Unintended Bias in Toxicity Classification | jigsaw-unintended-bias-in-toxicity-classification

开始: 2019-03-29 结束: 2019-07-18 内容安全 数据算法赛
第10名赛后总结[代码已公开]

第10名赛后总结[代码已公开]

作者:Yuanhao (Grandmaster) | 队友:yangDDD (Master)
比赛:Jigsaw Unintended Bias in Toxicity Classification
排名:第10名

首先,非常感谢我出色的队友 yangDDD。虽然我们参加这次比赛的时间比较晚,但我们成功驾驭了这些“猛兽”(模型)。

1. 模型

BERT

在本次比赛中,我们使用了六个BERT模型,分别是:

  1. BERT-large-uncased(使用比赛数据进一步预训练)
  2. BERT-large-cased(使用比赛数据进一步预训练)
  3. BERT-large-cased(使用uncased数据训练)
  4. BERT-large-wwm-uncased(使用比赛数据进一步预训练)
  5. BERT-large-wwm-cased
  6. BERT-based-uncased(使用比赛数据进一步预训练)

为了增加模型的多样性,我们使用uncased数据训练了BERT-large-cased模型,并将其作为我们的模型之一。

GPT-2

这个模型没有达到我们预期的高分,但它仍然提高了我们集成模型的分数。

RNN

  • Glove 300d 词嵌入
  • Crawl 300d 词嵌入
  • Wordvec 100d 词嵌入
  • 字符级计数向量和基于关键词的特征
  • 3层 RNN + 注意力池化 + 分类器

2. 模型融合

将上述6个BERT模型按权重进行融合:0.25, 0.15, 0.2, 0.2, 0.12, 0.08。

对13个RNN模型进行平均融合。

最后将融合后的BERT、RNN和GPT-2按权重融合:0.88, 0.06, 0.06。

3. 训练方法

Nvidia Apex 和 桶采样

在单块V100 GPU上,BERT-base模型一个epoch的典型训练时间约为2小时。

多任务学习(MTL)自定义损失

我们使用了辅助标签,包括 severe_toxicity(严重毒性)、obscene(淫秽)、identity_attack(身份攻击)、insult(侮辱)和 threat(威胁)。

对于原始的毒性标签,我们使用0.5作为阈值来获取二分类标签,然后计算我们预测结果的二元交叉熵作为 loss1。对于辅助标签,我们直接计算预测结果的二元交叉熵作为 loss2(标签和logits都是[0,1]范围内的浮点数)。最终损失 = loss1 * 0.02 + loss2。我们尝试了很多其他损失函数来拟合评估指标,这个效果最好。

句子截断

如果句子长度超过 Lmax,我们拼接开头的 0.25Lmax 个token和结尾的 0.75Lmax 个token,因为最重要的信息通常存在于尾部和头部。最大长度 Lmax 设置为 220。

BERT层间差异化学习率

我们将BERT编码器最后一层和特定任务分类器的学习率设置为基础学习率,例如 5e-5;对于前面的BERT层,我们将学习率按 0.98 的比率递减。因此,BERT base模型第一层的学习率为 5e-5 * 0.98^12。

梯度累积

对于 BERT-base 和 GPT-2,我们将batch size设为48,累积步数设为3;对于 BERT-large,batch size和累积步数分别为12和20。

同比赛其他方案