Wide & Deep Learning for Recommender Systems阅读笔记
目录
-
一、论文背景介绍
-
- 1. CRT预估
- 2. 推荐模型的特点
-
二、本篇文章
-
- 1. 引言
- 2. 内容
- 3. 贡献
-
三、Model
-
- 1. Wide 模型
- 2. Deep 模型
- 3. 联合训练
-
-
- 联合训练和集成训练的区别:
-
-
四、系统实现
-
- 1. 数据生成
- 2. 模型训练
- 3. 线上应用
-
五、实验
-
总结
一、论文背景介绍

我们今天讲的论文属于框架中的 排序层。
1. CRT预估
- CTR预估(对每次广告的点击情况做出预测:点击还是不点击)可以广泛应用于个性化推荐、信息检索、在线广告等领域,是互联网广告中最核心的算法之一,预估的准确性与否直接直接影响公司的广告收入。
- CTR预估中的常用模型是LR(逻辑回归),但该线性模型的学习能力有限,需要通过大量特征工程预先分析出有效的特征、特征交叉,从而去间接增强LR的非线性学习能力。
问题: 如何自动发现有效的特征和特征交叉?弥补人工经验的不足?避免大量人工特征工作?
解决: 1. FM:二阶特征自动交叉,局限性是自动交叉的阶数有限。
2. GBDT:进行特征交叉选择
2. 推荐模型的特点
在推荐系统中,模型在训练学习中具有一下特点:
- 包含大量的离散特征,如人口属性,设备分类,用户分类兴趣等。
- 包含大量高维度的稀疏特征。
- 特征交叉或组合对预测效果非常关键。
对于一个基于CTR (点击率) 预估的推荐系统,最重要的是学习到用户点击行为背后隐含的特征交叉。在不同的推荐场景中,低阶特征交叉或者高阶特征交叉可能都会对最终的CTR产生影响。
特征交叉:根据用户信息或物品信息的本身特征或交互作为特征,再通过一系列操作得到的特征称之为特征交叉。(FM的点积就是特征交叉)
google一系列文章认为:高阶的特征交叉(泛化)和低阶的特征交叉(记忆)都非常重要,同时学习到这两种交叉特征的性能要比只考虑其中一种性能好。
Eg. 大雁:翅膀(特点1) >> 飞(特点2);
鹦鹉:翅膀(特点1) >> 飞(特点2);;
企鹅:翅膀(特点1) >> 不会飞(特点2);
问题: 如何高效地提取(高阶)交叉特征?
解决: DNN。
并提出了许多方法:LR, FM, NFM, Wide & Deep 等。
二、本篇文章
1. 引言
- 推荐系统可以被看成一个搜索排序系统,其中输入的query是一个用户和上下文的集合,输出是一个物品列表。推荐认为就是在候选库中找到相关的物品,并且基于目标(点击概率)对物品进行排序。
- 推荐系统与搜索排序系统相同挑战是:满足记忆和泛化两个要求。
记忆:学习物品和特征间的共现率,并利用这种关系发掘历史数据中存在的共现性-----------低阶交叉特征
基于记忆的推荐系统:偏向学习历史数据的样本,推荐用户直接相关的物品–>获得推荐结果的准确性
推荐的内容都是精准内容,用户兴趣收敛,无新鲜感,不利于长久的用户留存;
泛化:基于迁移相关性,探索之前几乎没有出现过的新特征组合。----------高阶交叉特征
基于泛化的推荐系统:偏向推荐长尾物品–>提升推荐结果的多样性
推荐内容过于泛化,用户的精准兴趣无法得到满足,用户流失风险很大。
2. 内容
提出了Wide & Deep Learning 模型框架:考虑到了低阶交叉特征和高阶交叉特征都重要,构建了一个低阶交叉特征和高阶交叉特征组合的模型,旨在结合记忆和泛化的优点。
- 低阶特征可通过特征变换(特征交叉)来记忆特征是有效且可解释的,但泛化需要更多的特征工程工作,即需要学习到更高阶的特征交叉
- 利用较少的特征工程,深度神经网络可以通过稀疏特征学习到的低维稠密向量生成更好的未知特征的组合,但是可能会过拟合导致推荐一些并不太相关的东西,需要低阶特征去约束。

3. 贡献
- 提出了通用于具有稀疏输入的推荐系统的wide&deep框架(同时训练带有嵌入的前馈神经网络和带有特征变换的线形模型)。
- 在Google Play上实施的Wide&Deep推荐系统的实施和评估,Google Play是一个拥有超过10亿活跃用户和超过100万个应用的移动应用商店。
- 开源了基于Tensorflow1的高级API的实现。
虽然这个想法很简单,但是实践表明wide&deep框架显著提高了移动app score 的app下载率,同时满足了训练和服务的速度要求。
三、Model

思想来源:
根据人脑有不断记忆并且泛化的过程,这里将宽线性模型(Wide Model,用于记忆)和深度神经网络模型(Deep Model,用于泛化)相结合,汲取各自优势形成了Wide & Deep模型,以用于推荐排序。
1. Wide 模型
记忆(Memorization)主要是学习特征的共性/相关性,根据已有用户对物品的行为产生相关物品。我们通过 Wide 模型来学习记忆。
Wide 模型是一个广义线性模型:
y=\boldsymbol{w}^T\boldsymbol{x}+b
Wide 模型的输入特征包括原始的输入特征和转换后的特征。一个重要的转换是,特征交叉转换,它可以定义成下面这样:
\phi_k(\boldsymbol{x})=\prod_{i=1}^d x_{i}^{c_{ki}},c_{ki}\in\{0,1\}

Eg. Wide 模型可以对一些特例进行 “记忆”。
炸鸡和鸡排饭字符串接近,但记忆告诉它是个负例,就是会不推荐,而是将炸鸡和鸡肉华夫饼是正例。

2. Deep 模型
泛化(Generalization),可以被理解为相关性的传递,是指算法可以学会特征背后的规律,对于新的交叉特征也能给出合适的输出值,可以提高推荐结果的多样性。我们通过 Deep 模型来学习泛化。
Deep部分就是个前馈网络模型,为了达到泛化,我们会引入新的小颗粒特征,例如类别特征(安装了视频类目的应用,展示(曝光)的是音乐类目的应用等),将这些高维稀疏的类别特征(人口学特征、设备类别)映射为低维稠密向量后,与其他连续特征(用户年龄、应用安装数等)拼接在一起(embedding层),再将其作为第一个隐藏层的输入,根据最终的loss来反向训练更新,隐藏层的激活函数通常使用ReLU。前馈部分表示如下:
\boldsymbol{a}^{(l+1)}=f(\boldsymbol{W}^{(l)}\boldsymbol{a}^{(l)}+{b}^{(l)})
基于Embedding 的深度模型的输入是,类别特征(产生Embedding)+连续特征
Eg. 泛化后炸鸡和汉堡接近,故会推荐汉堡。

3. 联合训练
联合训练指的是 Wide 模型和 Deep 模型组合在一起,在训练时进行加权求和,并且通常采用logistic 作为损失函数来进行训练。
联合训练和集成训练的区别:
集成训练:每个独立的模型会单独训练,相互独立,只有在预测时才会组合在一起,因此每个单独的模型需要更多的特征(增加特征或特征转换)来达到合理的精度。
联合训练:会同时优化所有参数,通过将Wide 模型和Deep 模型在训练时进行加权求和的方式进行。Wide 模型只需要补充Deep 模型的不足,使用一小部分的特征交叉转换即可,而非使用一个全连接的Wide 模型。
最终模型的预测如下:
P(Y=1∣\boldsymbol{x})=σ(\boldsymbol{w}_{wide}^T [\boldsymbol{x},\phi(\boldsymbol{x})]+\boldsymbol{w}_{deep}^T \boldsymbol{a}^{(lf)}+b)
- 在训练模型时通过对梯度执行后向传播算法,Wide 和 Deep 同时分别训练自己的参数。
- 训练方法采用了小批量随机优化(Mini-Batch Stochastic Optimization),其中,Wide 使用FTRL(Follow-The-Regularized-Leader)+L1正则化学习;Deep 使用AdaGrad学习。
- 这样可使得Wide 模型中的组合特征能够记住那些稀疏的、特定的规则;Deep 模型通过Embedding 来泛化推荐一些相似的物品。

四、系统实现
推荐系统框架:


1. 数据生成
以一段时间内的用户和 曝光的APP 数据作为训练数据。曝光的 app 被下载,label 为1,否则为0。
字典生成器:表,存储分类特征字符串和对应ID的映射表。其中,在对离散型特征进行处理时可以去掉出现频次较少的特征,以减少计算的复杂度。
2. 模型训练

训练数据有500万个样本,输入层会同时产生稀疏特征或稠密特征。当新的训练数据来临时,我们用的时热启动方式,也就是从之前的模型中读取Embeddings 以及线性模型的权重来初始化一个新模型,而不是全部推倒重新训练。
3. 线上应用
当模型被训练和验证后,我们会将它加载到模型服务器上。模型被部署之后,对于每一次请求,服务器会从app 检索系统收到app候选集以及用户特征标签数据(用于对每一个app打分),然后通过模型计算得分并排序,展示给用户。
五、实验
数据:google play stores
模型:Wide & Deep Learning Model
评估:app acquisitions and serving performance

为解决服务器对每个请求做出答复的延迟问题,采用多线程并行来优化。
总结
模型优缺点分析:
优点:
- 简单有效。结构简单易于理解,效果优异。目前仍在工业界广泛使用,也证明了该模型的有效性。
- 结构新颖。使用不同于以往的线性模型与DNN串行连接的方式,而将线性模型与DNN并行连接,同时兼顾模型的记忆与泛化。
缺点:
- Wide侧的特征工程仍无法避免。
