第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,这值得一试。