CTR预估中的WideAndDeep模型

目录

 

CTR预估系统的工作流程为:

以Google APP store为例,预测用户点击或者下载或者购买其中一个APP的概率。

 

Retrival:

Ranking:

WideAndDeep模型:

Wide部分(线性模型,常用LR):

Deep部分(DNN):

模型训练部分:

使用范围:

缺点:


CTR预估系统的工作流程为:

        CTR预估中的WideAndDeep模型

大致分为两步:

  1. Query--查询
  2. 得到Items

也就是所说的Retrieval(召回)+Ranking(排序).

而WindAndDeep模型所做的工作就是Ranking部分。

以Google APP store为例,预测用户点击或者下载或者购买其中一个APP的概率。

Query:当打开APP store的时候,就产生了一个Query,它包含两部分的特征:User features,contextual features。User features 包括性别、年龄等人口统计特征,Contextual features包括设备、时间等上下文特征,这些特征通常一起给定到训练集和测试集中。

Items:App store 根据我们的Query给出的推荐列表,也称为impression(物品画像?)

User Action:根据系统的推荐列表,用户所产生的行为。

Logs:Query+Impression+UserAction 这些操作都被记录下来,作为数据提供给Learner学习。

 

Retrival:

利用机器学习模型和一些人为定义的规则,来返回最匹配的Query的一个小的items集合,这个集合就是最终的推荐列表的候选集。

Ranking:

Retrival(召回)之后,就是Ranking(排序)阶段。Retrival减小了候选items池,Ranking system要做的就是对比当前的Query,对候选集中的所有item进行打分。

WideAndDeep模型:

架构图:

       CTR预估中的WideAndDeep模型

Wide部分(线性模型,常用LR):

主要处理类别型特征,学习一个低纬度的特征,用以提高泛化能力,具有记忆功能。

  • 组合特征(Cross Product Transformations)
  • 离散特征

参数:

  • linear_feature_columns  线性模型的输入特征
  • linear_optimizer  线性模型的优化函数,定义权重的梯度更新算法,默认采用FTRL。所有默认支持的linear_optimizer和dnn_optimier可以在optimizer.py的OPTIMIZER_CLS_NAMES变量中找到相关定义。
  • join_linear_weights  按照代码中的注释,如果join_linear_weights=true,线性模型的权重会存放在一个tf.Variable中,可以加快训练,但是linear_feature_columns中的特征列必须都是sparse feature column并且每个feature column 的combiner必须是“sum”。经过自己线下的对比试验,对模型的预测能力似乎没有太大影响,对训练速度有所提升,最终训练模型时我们保持了默认值

Deep部分(DNN):

  • 连续特征
  • Embedding后的离散特征

参数:

  • dnn_feature_columns  DNN模型的输入特征
  • dnn_optimizer  DNN模型的优化函数,定义各层权重的梯度更新算法,默认采用Adagrad。
  • dnn_hidden_units  每个隐层的神经元数目
  • dnn_activation_units  隐层的**函数,默认采用ReLu
  • dnn_dropout  模型训练中隐层单元的drop_out比例
  • gradient_clip_norm  定义gradient clipping,对梯度的变化范围作出限制,防止gradient vanishing或gradient explosion.wind and deep模型中默认采用tf.clip_by_global_norm
  • embedding_lr_multipliers  embedding_feature_column到float的一个mapping。对指定的embedding feature column在计算梯度时乘以一个常数因子,调整梯度的变化速率。

模型训练部分:

        CTR预估中的WideAndDeep模型

使用范围:

WideAndDeep模型适用于非常稀疏的大规模分类或回归问题。比如推荐系统、search、ranking问题。

输入稀疏通常由离散特征有非常非常多个可能的取值造成的,one-hot之后维度非常大。

缺点:

Wide部分需要人为的特征工程。