463. chaii - Hindi and Tamil Question Answering | chaii-hindi-and-tamil-question-answering
首先,非常感谢比赛主办方和Kaggle。我在这次比赛中投入了大量的时间,确实学到了很多关于QA(问答系统)、多语言模型以及Kaggle本身的知识。
这基本上是我第一次在Kaggle的公共区域展示自己,我很高兴自比赛开始以来取得了以下成就:
最后一个模型可能是我做的唯一新颖的事情,也是我排名这么高的原因。我注意到这些段落的上下文相当长,通过一些研究我发现 BigBird 和 LongFormer 是为长上下文设计的两种架构,不会导致计算时间激增。我还注意到 BigBird 的作者指出,他们在训练模型时从 BERT 检查点进行了“热启动”,这减少了训练步骤,所以我想我也从 XLM-R 或 MuRIL 做同样的尝试(参见第7页“Pretraining and MLM”部分)。由于 MuRIL 基本上与 BERT 相同,所有权重(除了一个模块)都顺利加载到了 BigBird 模型中。让我纠结了一会儿的是位置嵌入(是学习得来的)从 (512, 768) 变为 (4096, 768)(max_seq_length, hidden_size)。我参考了 Longformer 作者的做法,最终将原始位置嵌入平铺8次以使其适应(参见第6页“Position Embeddings”部分)。
我在 TPU v3-8 上使用 Flax 训练了150k步,批次大小为1,训练任务是掩码语言建模(MLM)。我使用了 mc4 的泰米尔语、印地语、泰卢固语、乌尔都语和英语部分,直接输入模型,没有进行清洗。进行全词掩码和数据清洗可能会有显著帮助,但我没时间了。我对 large 尺寸的模型也做了同样的处理,但我只能适应1024的序列长度,而且只训练了90k步,批次大小为1。base 模型在评估集上的 MLM 准确率达到了75%,large 模型达到了71%。
在此基础上,我的 MuRIL Large、XLM-R 和 Muril Large BigBird 模型首先在 SQuAD2 上训练,然后在 XQuAD、MLQA、TyDiQA(泰卢固语)和 chaii 数据集上训练,仅在一个分层的 chaii 折上进行验证。因为我还有计算时间,我在 TPU v3-8 上使用 Flax 轻松快速地完成了所有这些工作。
在 Kaggle GPU 上训练 RemBERT 很痛苦,所以我使用了 Tensorflow 和 Kaggle TPU。这变得很容易,而且我说服自己,拥有一些 Tensorflow 模型提供了模型多样性。我在 SQuAD2 上训练了它,然后是 TyDiQA、MLQA、XQuAD。
这是我获得最高分的最终 Notebook。它很乱,本来没打算作为我的最终提交 😅
我实际上没有通过模型融合得到提交结果。我没有融合不同模型时的最高分是 MuRIL BigBird Large 的6折。我永远无法让23折及时完成,但我计划根据长度在大约10k字符处分割段落。10k以下的使用 XLMR、MuRIL Large、RemBERT 和 MuRIL BigBird Large。10k以上的只使用 MuRIL BigBird Large。有些上下文太长了,特别是以384/128分割时。
对于融合,我尝试了投票,但在完成之前就没时间了。我最终通过平均多个部分之间的重叠并将它们连接起来,将 token logits 转换