463. chaii - Hindi and Tamil Question Answering | chaii-hindi-and-tamil-question-answering
[更新] 源代码现已发布于 https://github.com/Zacchaeus14/chaii-4th-place-solution
感谢 Kaggle 和 Google Research 主办了这场精彩的比赛。CV(交叉验证)和 LB(排行榜)真的很难,我简直不敢相信我们进入了获奖名单。感谢我的队友 @zzy。在这里我分享我们的解决方案。请随时留下评论!
最终提交中涉及了 5 个模型:
我们的提交 A 是 125 的集成(Public 0.817,Private 0.767),B 是 2345 的集成(Public 0.812,Private 0.777)。我们发现最好的 Private 提交是 24'5(Public 0.812,Private 0.784)。
我尝试使用普通的 MLM(掩码语言模型)在印地语/泰米尔语维基百科上进行预训练,希望这些数据能覆盖隐藏的测试集。结果没用。我发现 Infoxlm / Rembert / XLM-Roberta 受益于在 SQuAD 2.0 数据集上微调 1-3 个 epoch。然后,我使用 Google API 将数据集翻译成泰米尔语,但翻译后的数据集并没有带来显著的改善。之后,我在 chaii + mlqa + xquad 数据集上训练模型,后两个数据集进行了下采样,训练了 3 个 epoch。验证集的 Jaccard 分数相当不稳定,所以我采用“非零 Jaccard 百分比”作为早停标准。
Xlm-Roberta 和 Infoxlm 共享相同的分词器,而 Rembert 和 Muril 有自己的分词器。我通过将 Token 级别的 Logits 映射回字符,然后以相等的权重平均,来集成具有不同分词器的模型。映射和混合后,我将连续相同的数字替换为 -1e5,最后进行束搜索。
由于训练数据不一致,我制定了各种后处理启发式方法来减少偏差。一些主要方法:
作为一个非母语使用者,检查所有坏例并在谷歌翻译中复制/粘贴可能要花一辈子时间。
感谢纽约大学上海分校教职员工提供的 GPU 资源。