返回列表

5th Place Solution

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

开始: 2021-03-09 结束: 2021-05-10 商品理解 数据算法赛
第5名解决方案

第5名解决方案

作者:Ahmet Erdem | 比赛:Shopee - Price Match Guarantee

恭喜所有奖牌获得者,感谢我的队友 @tereka@allvor,这是一次很棒的组队经历。我将分享我们团队的解决方案。我们基本上有两个核心代码,它们非常相似但不完全相同。它们的得分也几乎相同,但由于时间限制,我们没能将它们结合起来。我将首先解释我主要工作的代码,然后说明与 @tereka 的代码的区别。

交叉验证方案 (CV Scheme)

我们将数据分成了2折。第一折用于训练表征学习模型,第二折用于评估它们。我们还在第二折上使用 GroupKFold 训练了第二阶段模型。

表征学习

从一开始,我就尝试训练一个模型,可以在同一空间中生成图像和文本的向量表示。我认为这种方法可以产生很好的正则化效果。我做到了,但这对我们的验证分数没有显著提升。因此我们放弃了这个想法,专注于为图像和标题建立独立的模型。

我们训练了英文 Distilbert 和印尼文 Distilbert 模型来获取标题向量。对于图像向量,我们在尺寸 384 上训练了 ViT 和 Swin Transformers,使用了相对较重的数据增强,以及在尺寸 512 上训练了 EffNet B4。我们通过向量拼接来集成这些模型。

加权数据库增强

我们匹配向量并获取每个 posting ID 最接近的匹配项。我们将向量表示更新为它们自身与其最近匹配项的加权平均值。权重基于匹配项的余弦距离。如果某个匹配项距离向量较远,则该向量保持不变。我相信这种方法利用每个 posting 至少有一个匹配项的信息,对向量的正则化非常有效。

匹配

我们使用 cuML 的 NearestNeighbors 来匹配向量,并使用阈值进行过滤。

第二阶段模型

我们为匹配的唯一对提取了一些特征,并将其输入到在 GPU 上运行的 XGB 模型中。特征包括 "img_dist"、"text_dist"、"dist"、"dist_rank"、"cos_sim"、"cos_sim2"。基本上是向量距离、它们在每个 posting ID 内的排名、以及两个具有不同参数的 TFIDF 余弦相似度。

由于测试集大小大于我们单折数据的大小,由于误报匹配的可能性更高,某些特征在测试集上的分布会有所不同。因此,我们在百分比排名特征上训练了另一个 XGB 模型,并与前一个模型进行了集成。

误报特征

由于测试集和训练集没有匹配项,可以使用训练集来确定 posting 产生误报(FP)的难易程度。我们使用来自训练集的最近匹配距离作为特征。这种方法显著提高了我们的 CV 分数,但对我来说 LB 提升相对较小,对 @tereka 的代码则没有提升。我认为这同样是由于训练集和测试集之间的大小差异造成的。

层次聚类

一旦我们从 XGB 模型获得了匹配概率预测,就可以使用阈值来匹配 posting。但我们做了一些更复杂的事情。我们按匹配概率对所有对进行排序,并从最可能的匹配开始匹配。概率高于 0.8 的每个匹配项会合并它们的簇。如果没有簇的 posting 匹配概率高于 0.7,则可以将其匹配到一个簇。如果没有簇的 posting 彼此之间的匹配概率高于 0.3,则可以将它们相互匹配。这种方法允许拥有高置信度的簇和许多不太置信的对。

除了上述内容,@tereka 还有一些不同的图像模型和用于标题 char2grams 的 MLP 模型。有一个日语视频解释了我们的解决方案:https://youtu.be/vtI8P-ttPrk?t=1915

同比赛其他方案