442. Bristol-Myers Squibb – Molecular Translation | bms-molecular-translation
感谢 Kaggle 和比赛主办方举办这次比赛。也要感谢我的队友 @haochensui。我们在这次比赛中花了一个月的时间,在前两周,我们在 10% 的数据上进行实验。在最后两周,我们租用了几台 V100 和 3090,并切换到更大的图像尺寸。
我们的方案非常简单,主要由 4 个模型组成,外加一些早期模型用于 rdkit 后处理。我们使用了来自 https://www.kaggle.com/yasufuminakama/inchi-preprocess-2 的分词器。感谢这出色的工作。
CNN -> 编码器 -> 解码器。
我们使用 resnest101 和 efficientnetv2_m 作为我们的 CNN 骨干网络,并在 Transformer 编码器中使用 6 层,在解码器中使用 9 层。我们将来自 CNN 的嵌入投影到 512 个通道,以匹配 Transformer 的维度。在编码器中,我们将正弦位置嵌入注入到 Key 和 Query 之前的每一层,这与 DETR 非常相似。在解码器中,我们使用 T5 中的相对位置嵌入。
由于 GPU 限制,我们没有从头开始训练大规模模型。我们首先在 416x416 图像上训练模型,然后增加图像分辨率并对模型进行微调。我们保留了 2% 的数据(约 4.8 万张)用于验证。
我们在这里还进行了伪标签,发现它非常有用。我们使用了一个 0.64 CV / 0.78 LB 的提交结果(416 和 640 尺寸上的 efv2 的 rdkit 集成)来生成伪标签,并从中选择了大约 130 万个样本。我们将这些样本与训练样本连接起来。
efficientnetv2_m: 416(10 epochs) -> 640(5 epochs) -> 704(5 epochs + 伪标签)
-> 384x768 (5 epochs + 伪标签)
resnest101: 416(10 epochs) -> 640(5 epochs + 伪标签)
-> 384x768 (5 epochs + 伪标签)
| 模型 | 尺寸 | CV(无归一化) | LB(有归一化) |
|---|---|---|---|
| efficientnetv2-m | 416 | 0.99 | 1.18 |
| efficientnetv2-m | 640 | 0.74 | 0.9 |
| efficientnetv2-m | 706 | 0.65 | 0.67 |
| efficientnetv2-m | 384x768 | 0.68 | 0.67 |
| resnest101 | 640 | 0.71 | 0.66 |
| resnest101 | 384x768 | 0.74 | 0.67 |
我们使用 4 个 LB 分数为 0.66-0.67 的模型进行分步 logit 集成,并使用大小为 3 的束搜索。我们不是选择最大似然的预测,而是通过 rdkit 选择预测。我们从 rdkit 中选择第一个有效的预测。通过这种方式,我们在 CV 上获得了大约 0.02 的提升。这 4 个模型的集成在 LB 上达到了 0.56。其 CV 分数应该在 0.45 左右。
除此之外,我们根据 rdkit 将早期的提交结果(分数 >0.65)与 0.56 的结果合并,得到了 0.55 的分数。
最后,我们在提交结果中选择了 3500 个无效预测,并进行了大小为 32 的束搜索。这将 LB 分数降低到了 0.54。