返回列表

48th Place Silver - Simple Baseline

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

开始: 2021-03-09 结束: 2021-05-10 商品理解 数据算法赛
第48名 银牌 - 简单基线

第48名 银牌 - 简单基线

作者:Gerwyn | 排名:48th | 奖牌:银牌

恭喜所有参赛者!我非常高兴能获得我的第一枚银牌,也很兴奋能成为竞赛专家 :)

我的解决方案没有什么花哨的地方。在阅读了其他分享的解决方案后,我认为唯一值得分享的是我的模型训练方法(这也是我与公共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 的骨干网络:

  • Bert base multilingual uncased(在 XLM-Roberta 和 bert base 中胜出)
  • B6 Noisy Student Version(在 B0-B6 AA/RA/NS 变体中胜出)
  1. “预训练” -> 我首先冻结骨干网络层,然后训练嵌入/ArcFace 层几个 epoch,之后“微调”时解冻所有层再训练几个 epoch。
  2. 冻结 b6 骨干网络的所有 Batch Norm 层。
  3. GeM 池化层对 b6 有效,而池化层对 bert 没有帮助。
  4. 图像增强方法参考自 这里
  5. Label Smoothing 有帮助,但影响很小。

推理

  • 快照集成(Snapshot ensemble,bert 3次,b6 2次)。
  • 文本输入的 TTA。我为原始标题和一个清理后的变体(unidecode,移除英语/印尼语停用词等)生成了嵌入。

我分别对它们取平均值进行集成,然后再进行归一化。

我简单地将文本嵌入(512)和图像嵌入(512)拼接起来,得到一个“文本 + 图像嵌入”(1024)。

我分别对所有 3 个嵌入应用 KNN,然后取并集得到集成的匹配结果。

“后处理技巧”

对于每个预测的匹配项,我试图找到相似的预测匹配项并将它们合并以得到最终的匹配结果。

  • 使用 Jaccard 指数作为相似度分数,我收集了所有 Jaccard 指数 >= 阈值的匹配项,然后只保留出现次数 >= 2 的 'posting ids'。
  • 我根据集成匹配项的长度使用了不同的阈值。
同比赛其他方案