362. Google QUEST Q&A Labeling | google-quest-challenge
首先,我想感谢我的队友 @brightertiger、@khyeh0719、@arvissu 和 @qbenrosb00,我们合作得非常愉快。同时也感谢 Google 和 Kaggle 主办了这场精彩的比赛。我将简要总结我们的方法。
我们在训练 BERT 模型之前尝试了一些预处理方法,结果发现 CV(交叉验证)分数和 LB(排行榜)分数与不做预处理的情况相似。为了保持代码整洁,我们在训练 SOTA 模型时没有进行任何预处理。此外,我们使用了文本的头部和尾部作为模型的输入。
和其他团队一样,我们训练了两个 BERT 模型,分别用于问题标签(21个)和回答标签(9个)。
[cls] + title + [sep] + question + [sep][cls] + title + [sep] + question + [sep] + answer + [sep]我们尝试了不同架构的 BERT:
我们发现使用两个 BERT 配合特殊标记在 LB 上取得了最好的结果。因此,我们应用该方法训练了 GPT2 和 RoBERTa。
我们还使用 BERT 的输出作为嵌入来训练 LSTM,并取得了不错的结果:CV: 0.418,LB: 0.396。
我们尝试过的模型总结:
我们用于集成的模型包括 BERT、RoBERTa、GPT2 和 BERT-RNN。我们仅使用了简单的平均法进行集成。
我们仅使用了阈值方法进行后处理,并在 LB 上获得了约 0.004 的提升。我不喜欢后处理方法。然而,在这场比赛中,后处理就是你所需的一切。
def postProcessing(x):
x = np.where(x >= 0.9241, 1.0, x)
x = np.where(x <= 0.0759, 0.0, x)
return x
targets = ['question_conversational',
'question_type_compare',
'question_type_consequence',
'question_type_definition',
'question_type_entity',
'question_type_choice']
sub.loc[:, targets] = postProcessing(sub.loc[:, targets].values)