返回列表

12th Place Solution - top of the silver...

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

开始: 2021-08-11 结束: 2021-11-15 自然语言处理 数据算法赛
第12名方案 - 银牌榜首...

第12名方案 - 银牌榜首...

作者:hiromu
发布时间:2021-11-16

首先,我要感谢 Kaggle 和竞赛主办方。这场比赛非常有趣,因为训练数据非常少,而且鼓励我们使用外部数据。

我的方案非常简单。只有两个关键点 —— 字符级集成 & 后处理。

机器资源

Colab pro+ & kaggle notebook

实验跟踪

W&B(https://wandb.ai/site)

模型

我训练了三个模型。

  • XLM-RoBERTa
模型: deepset/xlm-roberta-large-squad2
数据: 竞赛数据集 + MLQA + XQUAD
折数: 5折
最大长度 (max_length): 384
步长 (stride): 128
轮数: 2
学习率: 2.0e-5
  • MuRIL
模型: google/muril-large-cased
数据: 竞赛数据集 + MLQA + XQUAD
折数: 5折
最大长度 (max_length): 384
步长: 128
轮数: 2
学习率: 2.0e-5
印地语模型: roberta-large-wechsel-hindi
泰米尔语模型: roberta-large-wechsel-tamil
印地语数据: 竞赛数据集 + MLQA + XQUAD
泰米尔语数据: 竞赛数据集 + 翻译后的 SQuAD2.0
折数: 5折
最大长度 (max_length): 400
步长: 135
轮数: 3
学习率: 2.0e-5

结果

模型 CV Public LB Private LB
XLM-RoBERTa 0.7060 0.778 0.738
MuRIL 0.7038 0.760 0.743
RoBERTa 0.7481 & 0.5907 0.763 0.735

MuRIL 很强💪

字符级集成

因为分词器不同,无法简单地平均上述三个模型的输出。所以我利用偏移量将 token 概率扩展为字符概率。
起初,我尝试集成 XLM-RoBERTa & MuRIL。Public LB 得分为 0.782(+0.004 提升),但 Private LB 得分为 0.754(+0.011 提升)!!

后处理

在最后一个周末,我检查了模型是如何得出错误答案的。
我发现有些预测结果由梵文数字组成,而不是阿拉伯数字。
例如) 答案文本: 1945, 预测结果: १९४५
我的后处理函数如下。

def postprocess_v3(pred, context, language):
    if language == "hindi":
        bad_starts = [".", ",", "(", ")", "-", "–", ";", "।"]
        bad_endings = ["...", ",", "(", ")", "-", "–", ";", "।"]
    elif language == "tamil":
        bad_starts = [".", ",", "(", ")", "-", "–", ";"]
        bad_endings = ["...", ",", "(", ")", "-", "–", ";", "."]

    tamil_ad = "கி.பி"
    tamil_bc =