返回列表

20th Place Solution; XLM-Rs, xtune, hacky postprocessing

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

开始: 2021-08-11 结束: 2021-11-15 自然语言处理 数据算法赛
第20名方案:XLM-Rs, xtune, 技巧性后处理

第20名方案:XLM-Rs, xtune, 技巧性后处理

作者:soskek | 排名:第20名

感谢 Kaggle、主办方、讨论区以及所有的竞争对手!
因为有你们,我非常享受我的第一次 Kaggle 之旅!

我在 Private LB 上获得了第20名(0.755)。(尽管在 Public LB 上是第9名(0.811)!)
我的方案是集成了9个基于 XLM-RoBERTa-large 的模型(来自5种不同的模型构建方式),并在推理阶段使用了一些技巧性的后处理。

因为我没有详细评估它们,每个模型的构建都很“脏”,可能包含许多无意义(甚至有害)的技巧和差异。请注意,我只是简单地描述了我做了什么以及我的猜测。
起点是著名的 0.792 notebook

交叉验证设置 (CV Setup)

简单地使用了 sklearn 的 model_selection.StratifiedKFold 进行5折划分,标签 y = data['language']。
这用于早停和模型(种子)选择。

架构 (Architecture)

基本上,这是一个标准的抽取式 QA BERT 模型,即通过 transformer 进行编码,并通过线性层预测 (start_index, end_index) 的 logits。
每个短语的分数由 start_logit + end_logit 计算。(如果两者都指向 CLS token 的位置,则代表“无答案”。)

为了增强模型的多样性,我尝试了一些变体:

  • transformer -> linear (基线)
  • transformer -> cat([h_last, h_19, h_15, h_11, h_last_of_CLS]) -> linear -> LeaklyReLU -> [k=3 depthwise conv -> linear] x2 (带残差连接) -> linear (变体 A)
  • transformer -> cat([h_last, h_19, h_15, h_11, h_last_of_CLS]) -> linear -> [new BERTLayer] x 2 -> linear (变体 B)

其中 h_{*} 表示第 * 层在 token 处的输出,h_last_of_CLS 是 CLS token 的最终输出。

我做这些几乎只是为了好玩!我希望它们可能对集成有所帮助。

数据配方 (Data Recipes)

有时会使用一些外部数据,有时则不用。

微调数据:

额外预训练:

微调 (Fine-tuning)

总的来说,我在集成中使用了五种设置。
它们可能有不同的设置:

  • 模型架构。
  • 预训练模型。当进行额外预训练时,初始化自 XLM-RoBERTa-Large。此外,有时会使用两阶段微调。
  • 微调数据集。chaii 数据集 + 一些外部数据。
  • 超参数。可能不太重要。epoch={1, 4}, lr
同比赛其他方案