推荐系统 - 排序算法 - 神经网络:WDL
作者:互联网
今天回顾一下Google在2016年提出的模型:WDL(Wide & Deep Learning for Recommender Systems),WDL模型巧妙的将传统的特征工程与深度模型进行了强强联合。WDL一出,一下引爆了深度学习模型在推荐系统的应用,随后沿着WDL的思路相继出了多个模型,如PNN/DeepFM/DCN/xDeepFM等。直到今天,WDL依然作为很多公司落地深度学习模型的首要选择,之后再在上面做各种迭代。
一、推荐系统架构
Google的论文里面不仅介绍了WDL模型,还顺带给我们展示了一下推荐系统的架构。上图是推荐系统的架构图,记录了一次query请求的全过程。一个query请求过来,会先进行检索Retrieval,从上万个候选集里面选出少量的100条数据(一般是规则或者粗排),然后通过ranking进行打分并排序,最后把排好序的结果经过策略/屏控选出10条数据展现给用户,这就是推荐系统里面经典的召回->粗排->精排->策略流程,今天的推荐系统,大多也是这个流程。
二、模型结构
(黄色的圆圈表示原先的稀疏特征;灰色的代表embedding或者组合特征)
上图WDL的模型结构,可以看到包含两个部分。Wide部分是指人工先验的交叉特征,通过LR模型的形式做了直接的预测。右边Deep部分是前向神经网络,属于分组的学习方式。下面分别介绍下这两部分的实现。
3.1 The Wide Component
Wide部分就是通用的线性模型 ,其中 , 分别表示模型参数和输入特征:
记号:
公式(1)中如果第i个特征参与了交叉则为1,否则为0。这样做可以捕获特征之间的交互关系,比如在新闻推荐中,用户信息和新闻类别的交叉,可以刻画用户对新闻的喜好。
3.2 The Deep Component
Deep部分是一个前向的神经网络,对于高维稀疏特征,首先转化为稠密的embedding,embedding的大小一般为10-100,然后Concatenated到一起喂给MLP,每一层的计算方式如下:
//
3.3 WDL联合训练
WDL使用FTRL训练Wide部分,使用AdaGrad训练Deep部分,对于二分类问题,模型预估函数表示为:
//
从上面可以看出WDL的结构并不复杂,但是却非常有效,是特征工程+LR往deep learning迁移的一次很好尝试,同时又保留了传统人工特征组合在模型中的作用。
Google在论文里面介绍了WDL在APP推荐中的具体应用,里面讲的连续特征处理以及高维稀疏特征降维方法一直沿用至今,下面介绍下具体怎么做的。
四、WDL应用实例
Google在论文里面介绍了APP推荐的一个案例,流程如图所示。这里面主要包含三个部分,Data Generation,Model Training和Model Serving,今天Model Serving主要通过tf Serving方式部署,就不再介绍了,后面主要讲一下前面两个。
4.1 Data Generation
关于特征的处理,主要介绍下高维稀疏特征和连续特征,对于取值少的类别特征,直接使用one-hot编码。
- 相同ID空间的高维稀疏特征 比如用户安装的APP类别和当前展现的APP类别,属于相同的ID空间(这属于同一个field, 每个field的embedding是一样的),这类特征应该使用相同的embdding,这样可以减少模型参数和训练时间。
- multi-hot高维稀疏特征 比如用户安装的APP,一个用户可以安装多个,这类特征的处理使用embedding + average/sum pooling的方式,映射到固定维度。
- 多值的可变类别特征 比如用户在多个APP上的使用率(每天点击的概率),这类特征可以使用embedding + weight pooling的方式。
- 连续值处理 和大多数DL模型一样,WDL对于输入特征的尺度和分布非常敏感,连续值特征归一化处理对DL模型的收敛非常关键
4.2 Model Training
图4是APP推荐场景的WDL模型结构,可以看到Wide部分只包含了用户安装过的APP和展现APP的交叉,而年龄、安装的APP数和设备类别等特征都只放在了Deep侧,实验会发现,如果把所有特征也都放在Wide侧,效果反而会变差。
从图4还可以看出,不同的特征是分开做embedding,embdding size可以不同。设想如果所有ID特征学习一个embedding,如果embedding size太小,便不足以客刻画信息本身,最后模型的参数空间就是 m*n ,假设特征空间 m = 1000w, n = 1000 ,那么模型参数就是百亿级别,对于计算和存储的要求太高了。而分组embedding再Concatenated,不仅不会损失信息,而且模型参数可以降低到1亿左右。
五、实验
tensorflow里面可以直接通过调用tf.estimator.DNNLinearCombinedClassifier实现WDL模型的训练和预测,在我们的数据上做了一下测试,训练样本3000万,测试样本1000万,和LR以及MLR两个模型做了对比,实验结果如表1所示。
表1:实验结果对比
从实验结果来看,WDL的AUC相比LR和MLR都有所提升,相比MLR提升0.38%。
六、总结
Google在2016年推出的WDL是推荐系统里面非常经典的模型,里面有关特征交叉,模型融合,分组embedding的思路在今天也不过时,使得DL在推荐系统的应用迈出了一大步。我们部门早期也尝试了将WDL引入到实际业务中,最后效果提升显著,并成为了DL在我们业务中的第一个base model。
标签:Wide,特征,模型,WDL,神经网络,embedding,排序,APP 来源: https://blog.csdn.net/weixin_41332009/article/details/113396037