数据处理与可视化
这里是DLRM模型数据集预处理模块:
args.ln_emb = ln_emb.tolist()
m_spa = args.arch_sparse_feature_size
ln_emb = np.asarray(ln_emb)
num_fea = ln_emb.size + 1 # num sparse + num dense features
m_den_out = ln_bot[ln_bot.size - 1]
Sparse fea = 26, Dense fea = 13,有26个稀疏的类别,密集的数据有13个类别;
其中ln_bot=[ 13 512 256 64 16],m_den_out = 16(最后一个输出维度)。Dense数据进入的维度是13,出来的维度是16.
下面是查看了1,2,3....服装的会话数量百分比:
上面是特征类别的频数:
结果展示
下面分别是使用MMR,ItemCF,DLRM模型方法得到的结果,其中使用DLRM模型的得分为0.17369,算是比较好的,排名当时在850。
模型算法描述
经过多次尝试不同模型和方法:比如MMR,ItemCF,DLRM等等,由于DLRM取得的分数和排名较好,所以我这里对DLRM进行说明。
概述
DLRM是深度学习推荐模型的实现,用于个性化推荐。DLRM通过结合协同过滤和基于预测分析的方法的原理,在其他模型的基础上取得了进展,这使得它能够有效地处理生产规模的数据,并提供最先进的结果。
DLRM是Facebook在2019年提出的用于处理CTR问题的算法模型,与传统的CTR模型并没有太大的差别,文章本身更注重的是工业界对于深度模型的落地,在文中介绍了很多深度学习在实际落地过程中的细节,包括如何高效训练。在此我们更多的是关注模型本身,尝试揭开DLRM模型的本质。在DLRM模型中,突出解决两个问题:
第一,如何处理离散特征。CTR的训练样本中包含了大量的离散的类别特征,这样的数据是不能直接放入到深度学习模型中,在DLRM中,通过Embedding层将离散的特征转化成稠密的特征;
第二,如何做特征交叉。特征交叉对于CTR问题的求解具有重要的作用,在DLRM模型中,模仿着FM算法中的做法,对向量两两做点积。
模型结构
dense feature和sparse indices嵌入的向量必须相同。dense用MLP来处理成一个向量,sparse indice用embdding_lookup嵌入到相同维度的向量。
模型图如下:
设计的推荐系统架构如上图所示。整个模型主要包含:特征工程(包含 spare 和 dense 特征),用于特征建模 Embedding 和 Embedding Lookup,用于特征转换的 NNs,用于特征交互的 Interactions 以及最后的预测 NNs。
特征表示Embedding
在实际的推荐场景中,用户和商品通常都有丰富的特征信息。用户的特征通常用性别,年龄,居住地等。如何将这些类别特征转为模型可以处理的向量。做法是将这些类别特征编码为one-hot 的向量,然后通过 embedding lookup 来得到其表示。
特征交互Interaction
在得到特征的表示后,我们通过内积等简单操作实现模型的预测:
但是,如果我们能够抓住的描述特征关联性,那么模型的预测能力可能会进一步提升。例如,经典的FM:
模型预测NNs
有了特征的表示及其交互之后,我们可以将其送入到MLP 中,并利用 Sigmoid 函数预测最终的点击概率。
模型并行
在工业界的大规模数据下,模型并行是必不可少的一个步骤。DLRM 模型的主要参数来自于特征的 embedding,后面特征交互和模型预测部分的参数其实很少。假设我们有一亿个用户,如果对其 ID 进行 embedding,那么 embedding matrix 就会有一亿行,这是一个非常大的参数矩阵。
对于特征embedding 部分,这里采用的是模型并行,将一个大的embedding 矩阵放到多个设备上,然后更新相应的特征 embedding。
对于特征交互和模型预测部分,这里的参数量相对较少而且用户/商品的数量无关,本文采用的是数据并行的方式。在多个设备上计算梯度,然后将梯度合并来更新模型。
总结:
其实随着信息量越来越大,推荐系统也变得越来越重要,因为我们不可能看到信息的全部。更多时候我们看到的东西全都是推荐系统展示给我们的。这样一个直接的影响就是,推荐系统或多或少都在影响着我们对世界的认知。推荐系统是能在几乎所有产品中存在的载体,它几乎可以无延时地以用户需求为导向,来满足用户。其代表的意义和效率,远远超过传统模式。
在这次比赛中,我学会了运用课堂所学的知识去实践,比较完全基于统计的方法ItemCF。也接触了学习接触了一些深度学习,比如一些知识点和推荐算法模型等等。这次比赛花费了很多心血,结果也是令人满意的,对机器学习这一领域接触也更深了,拓宽了视野,促使我成长!