432. Shopee - Price Match Guarantee | shopee-product-matching
感谢 Kaggle 和主办方举办了这场非常有趣的比赛,比赛设置颇具技巧性,并且为实验和调优提供了很大的空间。一如既往,这是一次伟大的合作成果,也请大家为 @christofhenkel 和 @philippsinger 点赞。在下文中,我们将简要概述我们的解决方案。
最初,虽然按 label_group 进行分割在 LB/CV 一致性方面表现不错,但在比赛后期,随着模型变得更好,特别是引入了集成和后处理方法后,找到一个好的 CV 变得越来越难。
因此,我们关注了三个不同的 KPI:
方法 2 和 3 已知存在泄露问题,因为我们混入了折叠内嵌入,这些嵌入可能比 OOF 嵌入更容易区分。此外,它们会有更好的交叉链接,这为特定的后处理方法增加了额外的泄露。方法 1 没有泄露,但在 5 折验证中,我们评估的行数少于 7k(约占测试集的 10%)。这样无法进行合理的参数调优,而且某些后处理方法在小数据集上表现出色,但在大数据集上会失效(例如总是选择排名第 2 的预测)。因此,我们通常同时查看所有这些验证方法,并主要在方法 3 上调整阈值参数。
在最终提交中,我们使用了基于 Bert 的文本编码器和具有不同主干网络(主要是 nfnet, effnet)的图像编码器。正如许多其他团队一样,我们确实看到在调整训练和主干网络时单模型有一些改进,但在融合模型中,这种效果几乎微乎其微,我们在那里遇到了瓶颈。在主干网络之后,使用了 GeM 和 Avg 池化。Neck 部分由一个用于维度调整的线性层组成,随后是批归一化和 PReLu 激活函数。我们的嵌入长度通常在 1024 左左右,较大的嵌入在 CV/LB 上得分略高。我们还将 Tfidf(字符和词)添加到嵌入组合中,尽管 CV 变化不大,但似乎在 LB 上提高了一些分数。由于 Tfidf 生成非常大的嵌入,且我们在内核中受到 RAM 和 VRAM 的限制,我们使用随机稀疏投影来减少维度。

我们使用 ArcFaceLoss 训练了图像和文本模型。ArcFace margin 需要根据模型进行大量调整,我们也发现 batch size 在训练期间很重要。一些模型似乎对学习率非常敏感,正如其他人报道的那样,梯度裁剪可能也有助于稳定训练。
在我们的集成中,我们将图像嵌入、文本嵌入(基于 bert)和 tfidf 嵌入进行拼接并归一化。针对这些向量,我们计算成对余弦相似度,得到三个矩阵(图像 cossim、bert cossim、tfidf cossim)。我们将这三个矩阵结合,首先对它们进行平方,然后取加权平均值。

虽然在使用适当阈值的情况下,平均后的 cossim 矩阵已经让我们在金牌区获得了非常有竞争力的分数,但我们仍然应用了几个后处理步骤来挤出更多的分数。最大的贡献者是: