返回列表

4th place Solution

361. TensorFlow 2.0 Question Answering | tensorflow2-question-answering

开始: 2019-10-28 结束: 2020-01-22 自然语言处理 数据算法赛
第4名解决方案

第4名解决方案

作者:toxu (Grandmaster) | 比赛排名:第4名

感谢 Kaggle 和主办方举办这次比赛。这是我第一次参加问答类比赛。我很高兴通过在这个领域的研究学到了很多东西。

以下是我的解决方案:

预处理

  • 文本没有进行预处理。
  • 不同的负采样率。尝试了 0.02、0.04 和 0.06。

数据增强

  • TTA(测试时增强)。无效。
  • 通过用相似问题的答案替换原答案。无效。
  • 从其他问答数据集(如 SQuAD 和 HotpotQA)进行转换。无效。

模型

  • 尝试了 XLNet、Bert Large Uncased/Cased、SpanBert Cased、Bert Large WWM。
  • 损失函数和预测方式与 Bert-joint 脚本相同。

所有 Cased 模型的表现都不如其 Uncased 版本。也许我的数据准备脚本有问题。在我的实验中,WWM BERT Large Uncased 表现最好。

知识蒸馏

我认为知识蒸馏是我解决方案的关键部分。

  • 训练了一个组合的 Bert-large 模型,通过将 bert-large 权重和 wwm-bert-large 权重相加,例如 0.8 * wwm-bert-large + 0.2 * bert-large。第1步,学习率 3e-5。
  • 冻结 bert 层,仅微调分类器权重。第2步,学习率 1e-5。
  • 将第一个模型视为教师模型,进行知识蒸馏以获得学生模型。
  • 仅微调学生模型的分类器权重。第3步,学习率 1e-5。

验证

学生模型在开发集上达到了 0.7117955439056357。在公共排行榜和私人排行榜上均为 0.7。

其他工作

我未能在 TF1.0 的 Estimator 框架中实现对抗训练。但如果你使用 PyTorch,这值得一试。

同比赛其他方案