返回列表

1st Place Solution - From Embeddings to Matches

432. Shopee - Price Match Guarantee | shopee-product-matching

开始: 2021-03-09 结束: 2021-05-10 商品理解 数据算法赛
第一名方案 - 从嵌入到匹配

第一名方案 - 从嵌入到匹配

作者: YoonSoo (harangdev) | 队友: Limerobot
排名: 第 1 名

恭喜所有的获奖者,感谢主办方提供了这个有趣的数据集,也感谢 Kaggle 组织了这场比赛!同时,非常感谢我的队友 @limerobot,他总是能提出绝妙的想法并且从不放弃。我从他身上学到了很多东西。

标题定为“从嵌入到匹配”,因为我们通过正确利用图像/文本嵌入来搜索匹配项获得了巨大的 CV(交叉验证)/ LB(排行榜)提升。另一方面,单个模型的改进帮助较小,也就是说,当我们有了不错的模型后,“从输入到嵌入”这一步的重要性就降低了。即使每个图像/文本模型的 CV 增加了很多,集成后的 CV 和 LB 也没有增加多少。

我将首先分享我们在公共排行榜上的得分历史。我只写下那些显著提高我们分数的内容。请注意,模型/训练优化也在此处提高了分数。

  • 基线:0.7(仅图像),0.64(仅文本)
  • 拼接 img_emb 和 txt_emb -> 归一化:0.724
  • min20.743
  • 归一化 -> 拼接 img_emb 和 txt_emb:0.753
  • 全数据训练:0.757
  • 联合 comb, img, txt 匹配 & 调整阈值:0.776
  • INB & 增加多样化的文本模型:0.784
  • 在 INB 阶段 1 使用 img, txt, comb emb & 联合调整阈值:0.793

现在我将详细介绍我们的解决方案。

1. 模型

我们使用了来自 timm 的两个 eca_nfnet_l1 作为图像编码器,以及来自 huggingfacexlm-roberta-largexlm-roberta-basecahya/bert-base-indonesian-1.5Gindobenchmark/indobert-large-p1bert-base-multilingual-uncased 作为文本编码器。

我们使用 ArcFace 来训练模型。在从图像/文本编码器进行池化后,我们应用了批归一化和特征归一化来输出嵌入。按照 ArcFace 论文,归一化的嵌入与归一化的权重矩阵相乘以产生余弦值,然后我们应用弧度边距和 softmax。

model

2. 调整 ArcFace

这是我们两人第一次使用 ArcFace,所以起初我们在调整它时遇到了困难。足够大的边距对嵌入的质量很重要,但当我们增加边距时,模型会遇到收敛问题。我们找到了几种克服这个问题的方法,并最终应用了这些选项。

  • 在训练过程中逐渐增加边距
  • 使用大的预热步数
  • 对 cosine head 使用更大的学习率
  • 使用梯度裁剪

图像模型的最佳边距为 0.8~1.0,文本模型为 0.6~0.8。当使用增加边距的方法时,我们从 0.2 的边距开始,增加到图像模型的 1.0 和文本模型的 0.8。

此外,我们尝试了类大小自适应边距,这在 Google 地标识别竞赛方案 (论文链接) 中被引入。图像模型最好将边距设置为 class_size^-0.1,文本模型设置为 class_size^-0.2。然而,由于类别比 Google 地标识别竞赛更平衡,改进并不明显。

对 cosine head 使用更大的学习率和使用梯度裁剪不仅使模型收敛,还稍微提高了 CV 分数。

在全局平均池化之后添加额外的全连接层会损害模型性能,而在特征归一化之前添加批归一化则提高了分数。

3. 结合图像与文本匹配 - 拼接与联合

本次比赛中我们有图像和文本输入,因此很好地

同比赛其他方案