返回列表

13th Place Solution

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

开始: 2021-08-11 结束: 2021-11-15 自然语言处理 数据算法赛
第13名解决方案
作者:Trushant Kalyanpur | 比赛排名:第13名

第13名解决方案

我要感谢 Kaggle 和 Chaii(Challenge in AI for India)设立了这项有趣的多语言问答挑战赛。

事实证明,我们有几个解决方案本可以让我们获得金牌名次,但比赛有时候就是这样!

致谢

非常感谢 @kishalmandal@abhishek@nbroad 提供的精彩内核和模型,我们可以加以利用。

还要感谢我出色的队友 @khyeh0719@maxjeblick 对我们解决方案的贡献。这是团队努力的结果!

外部数据集

最终流程中的模型混合使用了基线数据集,以及比赛早期在数据集页面公布的 MLQA 和 Squad 数据集:https://www.kaggle.com/c/chaii-hindi-and-tamil-question-answering/discussion/264581

模型

以下所有模型均使用 doc_stride=135, max_length=400 进行训练

模型 LB 分数 备注 使用折数
deepset/xlm-roberta-large-squad2 0.792 5折 公开模型 5
deepset/xlm-roberta-large-squad2 0.781 10折 Tez 模型 本地训练 3
google/rembert 0.777 5折 本地训练 4
google/muril-base-cased 0.772 5折 本地训练 4

除了上述模型外,我们还尝试了各种不同的架构,包括但不限于 electra, muril-base, multilingual BERT, span BERT, tamillion, indic-bert,但对于本任务而言,它们的效果都不如表中的架构。

在比赛中,我们发现 CV(交叉验证)与 LB(排行榜)之间的相关性非常低。高 CV 分数在 LB 上表现不佳,而那些不错但不算太差的 CV 结果却在 LB 上取得了更高的分数。我怀疑这是由于数据集中的噪声造成的,同时也因为私有数据集更干净,且有多个标注者对数据进行标注。

加速计算

  • model.half() - 使用 FP16 稍微提升速度,且对 LB 分数无影响。
  • 对相同架构重用特征。
  • Torchscript/jit - 实验导致内存不足(OOM)。
  • 尝试使用 joblib 和 multiprocessing 进行并行计算 - 所有实验在训练集上有效,但在测试集上内存不足。也许是因为测试集的上下文更长?

集成策略

主要挑战之一是 5 小时的内核运行限制。由于架构不同,且 max_len/doc_stride 可能不同,很明显我们需要一种好的方法来集成模型。平均 logits 仅适用于相同架构且使用相同 doc_stride/max len 的情况。

我查阅了相关的最佳实践,包括 TensorFlow Question Answering Challenge 中的顶级解决方案:https://www.kaggle.com/c/tensorflow2-question-answering/discussion/128832。我在解决方案描述中看到了多数/硬投票,决定实现一个非常简单的投票算法,结果显著提升了 LB 分数。

投票

投票器将经过清理的预测结果(经过基本后处理后)作为输入。我们在最终流程中有 4 种架构,第一阶段根据每种架构的最佳答案检查 4 个候选预测中的多数票。如果没有多数票,投票池将扩展到所有架构中的前 N 个预测。我们发现从每种架构中取前 2

同比赛其他方案