推荐系统CTR实战——Wide & Deep

时间:2024-04-11 18:09:21

Ref:https://fuhailin.github.io/Wide-Deep/

Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中。wide and deep 模型的核心思想是结合线性模型的记忆能力(memorization)和 DNN 模型的泛化能力(generalization),在训练过程中同时优化 2 个模型的参数,从而达到整体模型的预测能力最优。

Wide & Deep模型结构如下:
推荐系统CTR实战——Wide & Deep

Wide & Deep Network
最左边的线性模型和最右边的深度模型联手结盟打造出中间的wide and deep。

Wide & Deep的主要特点:
本文提出Wide & Deep模型,旨在使得训练得到的模型能够同时获得记忆(memorization)和泛化(generalization)能力:

  • 记忆(memorization)即从历史数据中发现item或者特征之间的相关性;哪些特征更重要——Wide部分
  • 泛化(generalization)即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合;——Deep部分
    在推荐系统中,记忆体现的准确性,而泛化体现的是新颖性。

Wide部分

wide部分就是一个广义线性模型,输入主要由两部分,一部分是原始特征,另一部分是交互特征。我们可以通过cross-product transformation的形式来构造K组交互特征:

推荐系统CTR实战——Wide & Deep

Wide Models 可以简单理解成一个逻辑回归,先将input的特征通过Wx+b得到一个score,再通过sigmoid函数得到probablity。

线性模型的好处,是输入信息能对最终结果产生直接影响,称为记忆能力。

宏观上分析比如要预测一个店铺下个月每一天的销量,那么之前每天的销量均值(可以是按星期几groupby之后的星期几的销量均值),可见这个均值是对要预估的值有强指代作用(强相关性的),会对最终结果产生直接影响的,因为以往销量比较高的店铺,下个月的销量大概率应该也不错。

Deep部分

Deep部分就是一个DNN的模型,每一层计算如下:

推荐系统CTR实战——Wide & Deep

Deep Models: 相比于wide models 有更强的表达能力,能对特征与特征之间做交叉,就是对不同特征维度的做四则运算(树模型中先按特征a划分成两个子节点,再按特征b划分成四个孙子节点,这也是两个特征之间的交叉)。

深度学习模型的好处,是能挖掘更深层次的信息,有更好的表达能力,就是泛化能力。

Deep 部分对应的特征并不直接作用于结果,而是以一种非线性的形态作用于结果。比如天气状况对销量的影响,是非线性的,所以需要非线性模型来表达特征。

联合训练

Wide & Deep模型采用的是联合训练的形式,而非集成。二者的区别就是联合训练公用一个损失函数,然后同时更新各个部分的参数,而集成方法是独立训练N个模型,然后进行融合。因此,模型的输出为:

推荐系统CTR实战——Wide & Deep

使用Wide and Deep模型的App推荐系统架构

当一个用户访问app商店时,此时会产生一个请求,请求到达推荐系统后,推荐系统为该用户返回推荐的apps列表。

推荐系统CTR实战——Wide & Deep


在实际的推荐系统中,通常将推荐的过程分为两个部分,即上图中的Retrieval和Ranking,Retrieval负责从数据库中检索出与用户相关的一些apps,Ranking负责对这些检索出的apps打分,最终,按照分数的高低返回相应的列表给用户。

模型的训练之前,最重要的工作是训练数据的准备以及特征的选择,在apps推荐中,可以使用到的数据包括用户和曝光数据。
每一条样本对应了一条曝光数据,同时,样本的标签为1表示安装,0则表示未安装。

Continuous Feature:两种处理方式:也可以两种方式一起用。

  • (1) 先对连续型变量做scaling归一化到区间[0,1],然后直接拼接上其他特征;
  • (2) 对连续型特征做离散化,变成类别性特征(Categorical Features) 然后去做embedding,最后拼接起来。

Categorical Features:通过Embedding 映射成向量

Embedding:比如Device Class 手机类别可以是 苹果、三星、华为、小米, Embedding 就是将这个特征的不同取值映射成一个稠密向量(通常是先随机映射成一个稠密向量,然后通过训练不断更新这个稠密向量,使之能够表达手机的不同类别苹果、小米等)。更形象的理解比如手机类别共12种 那么 其中一种比如小米的onehot 就是[0,0,0,1,0,0,0...]一个1*12维的输入向量,然后通过一个12*100(这个矩阵也成为Embeddng Matrix嵌入矩阵)的全连接得到输出1*100维的稠密向量,就完成了小米的embedding。这个Embedding Matrix 通过训练不断更新矩阵参数。 

推荐系统CTR实战——Wide & Deep

TensorFlow官方实现代码

https://github.com/tensorflow/models/tree/master/official/wide_deep

References:

  1. Cheng H T, Koc L, Harmsen J, et al. Wide & Deep Learning for Recommender Systems[J]. 2016:7-10.
  2. Wide and Deep,双剑合璧
  3. [Wide & Deep | Ryan_Fan’s Blog]http://blog.leanote.com/post/ryan_fan/wide-and-deep-Model