返回列表

10th Place Solution

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

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

第10名方案

作者: drehero | 排名: 第10名

数据

在我的最终提交中,我只使用了在 MLQAxquad 和比赛数据上训练的模型。
我尝试了一些数据增强实验,但没能提高我的分数。

模型

我的最终提交是以下微调模型的集成:

  • XLM-Roberta(在 SQuAD 2.0 上预训练)和
  • MuRIL

训练

我将外部数据 + 比赛数据分成了 5 折(5 folds),并在五个折上训练了这两个模型。

在训练期间,我使用了早停法:在每个 epoch 之后,我检查了折外(oof)分割上的 Jaccard 相似度,然后使用了 JS 最高时的 epoch 权重(通常是在第二个 epoch 之后)。

我使用 Kaggle TPU 进行训练。

集成

首先,我通过对 xlm-rob 和 muril 的 5 个折取平均值进行集成。然后,根据起始和结束 logits 的总和,确定了两个模型的前 n 个预测字符串。

为了获得最终预测,我使用了以下算法:

对于每个模型:
1. 将前 n 个后处理后的预测字符串存储在一个列表中。
2. 根据预测字符串的分数(分数是起始和结束字符 logit 的总和)对列表进行排序(从低到高)。
3. 通过简单地取其在列表中的索引,为每个预测字符串分配一个新的分数。

对于每个预测字符串:
1. 将来自每个模型的新分数相加。
2. 选择总和最大的字符串作为最终预测。

我也尝试过将 token logits 映射回字符,但使用上述算法取得了更好的结果。

实现

我使用了 tensorflow 并在此处上传了我的代码:GitHub 仓库链接

其他

我也训练了 RemBert,但不幸的是我无法集成所有三个模型,因为在提交期间我总是遇到“Notebook Exceeded Allowed Compute”(Notebook 超出允许计算量)错误。

致谢

感谢社区。你们在讨论和 Notebooks 中分享了许多有趣的想法,我从你们那里学到了很多。以下 Notebooks 对我特别有帮助:

同比赛其他方案