463. chaii - Hindi and Tamil Question Answering | chaii-hindi-and-tamil-question-answering
感谢 Kaggle 和 Google 主办这场激动人心的比赛。它让我有机会更熟悉多语言 NLP,并探索了各种实现精确阅读理解的技术。
我使用了本地 5 折交叉验证(5-fold CV)来做决策,就像我们在其他比赛中通常做的那样,因为我以为这会让我的流程更简单。
实际上,我认为这个选择并不好,因为公共 LB(Leaderboard)数据集已经足够大,而“相信 CV”的风格让我在整个比赛期间都没能进入奖牌区(这让我真的很紧张!!!)。
像大多数其他参赛者一样,我使用 Adam 优化器训练了 xlm-roberta-large-squad2 和 muril-large-cased。我的 xlm-roberta-large-squad2 的主要超参数如下:
在使用 xlm-roberta-large-squad2 的预训练分词器进行分词后,我经常看到包含括号和数字的标记(例如 "99)")。我尝试在预处理阶段将括号(例如 "(")和数字(例如 "19")分开,以提高模型性能。此外,我将印地语和泰米尔语的数字(如 ०, १, ௦ 和 ௧)替换为相应的 ASCII 数字,以简化训练任务。
这些预处理带来的分数提升在后处理之后可以忽略不计。然而,我决定继续使用它们,以使我的解决方案与其他人的更不同,并最大化发生巨大排名变动的机会。
受 Hard EM 的启发,我尝试为多次出现的 answer_text 选择更好的 answer_start。如果存在其他片段的分数大于或等于 0.8 *(所有片段候选者中的最大分数,包括非 answer_text 的文本),我将 answer_text 第一次出现对应的原始 answer_start 替换为其他位置。当 answer_text 由数字组成且被其他数字包围时,我也修改了 answer_start。如果我没记错的话,这种重新标记使 CV 和私有 LB 提高了 0.005。
对上述过程训练的 5 折 xlm-roberta-large-squad2 模型进行平均,在使用 nbroad 的后处理提交时,公共 LB 和私有 LB 分别达到了 0.773 和 0.738。
正如其他顶级团队在他们的解决方案中提到的那样,当没有其他类型的字符时,将印地语和泰米尔语数字替换为 ASCII 数字效果很好。结合原始后处理、这种印地语/泰米尔语数字处理以及其他微小的修改,我的 LB 分数提高了 0.01(公共 LB = 0.779,私有 LB = 0.750)。
我怀疑其成功结果来自于某种程度上损坏的数据集准备过程,因为所有 133 个仅包含数字的答案文本都仅由 ASCII 数字组成,这很奇怪,而我们在其他答案文本中经常看到印地语和泰米尔语数字。我猜这是在某个时候将数据集 CSV 导入 Google 电子表格时发生了从印地语/泰米尔语数字到 ASCII 数字的转换(令人惊讶的是,Google 电子表格会自动进行此转换 :o)。
我以文本方式而不是标记方式或字符方式聚合了基础模型的预测结果,因为我没有足够的时间探索很酷的集成方法。实现文本聚合很容易。
我通过 Optuna 进行超参数搜索获得的以下权重实现了我最好的私有 LB 分数(0.770):