返回列表

41-th Place Solution

362. Google QUEST Q&A Labeling | google-quest-challenge

开始: 2019-11-22 结束: 2020-02-10 自然语言处理 数据算法赛
第41名方案

第41名方案

数据预处理

NER(命名实体识别):我们预训练了 NER 模型(基于 bert-base),用于将代码块替换为特殊标记 [CODE]。

正则表达式:我们清理了 LaTeX 片段并将其替换为 [MATH] 标记。

截断策略:双向截断(如果序列长度超过 450 个 token,则截断中间部分)。

最大序列长度:450。

模型参数

模型架构:roberta-large。

预训练:是(来自 transformers 库)。

模型设计:孪生双编码器(问题-答案对的点积 -> sigmoid)。

池化策略:[CLS] token。

训练参数

优化器:AdamW(来自 transformers 库)。

最大梯度范数:5。

轮次:5。

Batch 大小:8(1 * 8 累积步数)。

学习率 (LR):2.5e-05。

学习率调度器:线性。

预热步数:50。

随机种子:228 :)

集成参数

融合对象:7 折模型。

折划分策略:GroupKFold。

融合策略:概率平均。

后处理

对于每个目标:

  1. 对数值进行排序(升序)。
  2. 初始化一个锚点值(最小的一个)。
  3. 遍历每个值并计算它与锚点之间的差值。
  4. 如果差值 > TARGET-EPSILON,则将锚点和当前值之间的所有值合并到一个 bin 中。
  5. 更新锚点(设为当前值)。
  6. 从第 3 步重复直到结束。

最后,将 bin 归一化到 (0, 1) 范围。

TARGET-EPSILONs(针对每个目标)通过袋外预测(来自 7 折)进行估算。

其他技巧

SWA(随机权重平均):已实现,但没来得及提交。

类别特征:与双编码器输出拼接。没有提升。

额外数据:添加了一些额外数据以填补部分有缺陷的目标。没有帮助。

组合截断策略:不同的截断策略(左侧、右侧、双侧和中间部分)作为 TT 增强进行了组合。没有帮助。

不同池化策略:平均池化,最后 N 层的平均池化。[CLS] 是最好的。

冻结层:差分冻结、全冻结、仅冻结 n 层等。不冻结效果最好。

可复现性

复现我们实验的所有代码可以在这里找到:

https://github.com/alexeykarnachev/kaggle_google_qa_labeling

同比赛其他方案