432. Shopee - Price Match Guarantee | shopee-product-matching
恭喜所有参赛者!我非常高兴能获得我的第一枚银牌,也很兴奋能成为竞赛专家 :)
我的解决方案没有什么花哨的地方。在阅读了其他分享的解决方案后,我认为唯一值得分享的是我的模型训练方法(这也是我与公共Kernel拉开差距的地方)。
使用了 B6 和 bert-base-multilingual,两者都配备了 ArcFace 层。我遵循了 ArcFace 论文中描述的 BN-512-BN 架构。
然后我对每个嵌入进行了归一化,将它们拼接起来,并对所有 3 个嵌入应用余弦度量的 KNN,取它们的并集作为匹配结果。
我的“后处理技巧”是使用多数投票来合并相似的匹配项(通过 Jaccard 指数衡量)。然而,这个技巧仅让 LB 提升了 +0.001。
| 方法 | Public 分数 | Private 分数 |
|---|---|---|
| bert base multilingual uncased + TTA | 0.636 | 0.629 |
| b6 effnet (noisy student) | 0.696 | 0.688 |
| b6 + bert + concat | 0.750 | 0.739 |
| with 'post processing' | 0.751 | 0.740 |
使用 2 折的 Group KFold,然后用 KNN 获取 CV 分数。之后我使用完整的训练数据重新训练模型,并提交以获取我的 Public LB 分数。
只有在 CV 和 Public LB 都有提升的情况下,我才会接受更改。
首先,我选择了能给我带来最佳 CV/LB 的骨干网络:
我分别对它们取平均值进行集成,然后再进行归一化。
我简单地将文本嵌入(512)和图像嵌入(512)拼接起来,得到一个“文本 + 图像嵌入”(1024)。
我分别对所有 3 个嵌入应用 KNN,然后取并集得到集成的匹配结果。
对于每个预测的匹配项,我试图找到相似的预测匹配项并将它们合并以得到最终的匹配结果。