返回列表

4th Place Solution

463. chaii - Hindi and Tamil Question Answering | chaii-hindi-and-tamil-question-answering

开始: 2021-08-11 结束: 2021-11-15 自然语言处理 数据算法赛
第4名解决方案

第4名解决方案

作者: Zacchaeus, zzy
比赛: Chaii - Hindi and Tamil Question Answering

[更新] 源代码现已发布于 https://github.com/Zacchaeus14/chaii-4th-place-solution

感谢 Kaggle 和 Google Research 主办了这场精彩的比赛。CV(交叉验证)和 LB(排行榜)真的很难,我简直不敢相信我们进入了获奖名单。感谢我的队友 @zzy。在这里我分享我们的解决方案。请随时留下评论!

TLDR(太长不看版):

  1. 集成使用不同分词器的模型
  2. 在 SQuAD 数据集上进行微调
  3. 后处理

模型:

最终提交中涉及了 5 个模型:

Zacchaeus:

  • 模型 1. Xlm-Roberta-large 5 折
  • 模型 2. Rembert 5 折
  • 模型 3. Xlm-Roberta-large 3 个随机种子
  • 模型 4. Muril-large 4 个随机种子
  • 模型 4'. Muril-large 5 折

zzy:

  • 模型 5. Infoxlm 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,最后进行束搜索。

后处理:

由于训练数据不一致,我制定了各种后处理启发式方法来减少偏差。一些主要方法:

  1. 递归地去除左右两侧的标点符号。
  2. 如有必要,加回一些标点符号(灵感来自 @nbroad 的笔记本)。
  3. 如果问题专门询问年份,则使用正则表达式从 mm/yyyy/dd 格式的答案中提取年份。

作为一个非母语使用者,检查所有坏例并在谷歌翻译中复制/粘贴可能要花一辈子时间。

其他有趣但无效的尝试:

  1. 第二阶段重排序模型。感谢 @zzy 在这方面的尝试。
  2. SWA(随机权重平均)。
  3. KL Loss(VAULT 论文中提到)。
  4. torchscript 和 ONNX。

致谢

感谢纽约大学上海分校教职员工提供的 GPU 资源。

同比赛其他方案