返回列表

46th place solution

487. H&M Personalized Fashion Recommendations | h-and-m-personalized-fashion-recommendations

开始: 2022-02-07 结束: 2022-05-09 商品推荐 数据算法赛
第46名解决方案

第46名解决方案 (Item2Vec/Transformer)

作者: nadare (Master) | 比赛排名: 第46名

简介

感谢 H&M、Kaggle 以及我的竞争对手们带来了这场激动人心的比赛。这篇文章是对我解决方案的简要总结。由于是通过谷歌翻译翻译成英文的,我想可能有一些地方连接不畅,如果您有任何问题,请随时提问。

概览

这次,我使用神经网络设计了双塔模型(2-tower model)。双塔模型通过两个部分提供高性能推荐:使用轻量级模型筛选候选者的检索部分,以及使用高精度模型进行预测的排序部分。具体来说,预测/学习的流程如下。

  • 第一阶段(检索部分) 公开榜:0.02137 私有榜:0.02296
    使用 Item2Vec 缩小预测日期前后出现的文章数量的排名范围。(1)
    基于规则提取过去有历史记录且最近与其他用户有互动的项目。(2)

  • 第二阶段(排序部分) 公开榜:0.2779 私有榜:0.02846
    使用 Transformer 对 (1) 和 (2) 进行重排序。

解决方案

模型将在以下三个部分进行说明。

  • 检索/排序通用的嵌入部分
  • 检索部分
  • 排序部分

嵌入部分

在嵌入部分,预计算的图像/自然语言模型嵌入与使用 gensim 的 word2vec 初始化的类别嵌入通过 DCNV2 混合。各嵌入的获取方式如下。

  • 图像

    • swin_large_patch4_window12_384_in22k + TruncatedSVD (1024 维)
    • EfficientNetV2L + TruncatedSVD (1024 维)
  • 自然语言

    • ELECTRA LARGE(通过拼接 detail_desc 和 category name 输入)
    • Sentence-T5 st5-11b(通过拼接 detail_desc 和 category name 输入)
    • BERT Tokenizer + Tf-Idf + PCA (128 维)
  • 类别

  • 通过 gensim 实现的 Word2vec

  • 表格数据

    • 价格
    • 总数量(同一天相同产品合并为一条记录)
    • 该用户的互动次数
    • 与其他日期相比的价格统计

由于这些特征是在实现其他效果更好的方法之前引入的,我们没有验证个别效果,但我感觉它们并不是很有效。

检索部分

在检索部分,我通过搜索向量缩小了范围,该向量采用了文章嵌入的加权平均值与产品嵌入的余弦相似度。

模型

目标嵌入
我将文章的嵌入放入几个全连接层并进行转换。

查询嵌入
我对文章的嵌入使用了按时间等加权的加权平均。关于如何增加权重,权重是通过 (1/2) ^ relu (edge_feature) 计算的,其中以经过时间等特征作为 edge_feature,然后计算加权平均。

我也考虑过使用自注意力的 Transformer,但在这部分没有意义。

损失函数

我们计算了 SupervisedContrastiveLoss,将有互动的设为1,无互动的负样本设为0。同时,我使用了 AdaCos。边界参数为0。

当边界参数大于0时,所有余弦相似度都会负向发散。另外,我监控了正常情况下的余弦相似度,最终大约是0.3。在排名方面,4096个样本中的正确样本大约排在第600位,我感觉这个任务很难。

子采样

批次按10岁年龄段对用户进行分段,确保同年龄同一天的目标在同一个批次中,并按时间顺序训练。在训练期间,我从按10岁分段的组中最近一周文章出现次数最多的前10,000篇中最多采样4096篇文章。采样使用了

同比赛其他方案