463. chaii - Hindi and Tamil Question Answering | chaii-hindi-and-tamil-question-answering
我要感谢 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 分数无影响。主要挑战之一是 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