打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Wide & Deep Learning for Recommender Systems

最近google又有一篇论文在微博广为流传:Wide & Deep Learning for Recommender Systems,论文将传统的线性模型如LR称作广度模型,将DNN称作深度模型,并评价了各自的优缺点:

广度模型:通过特征叉乘对原始特征做非线性变换,输入为高维度的稀疏向量。通过大量的特征叉乘产生特征相互作用的“记忆(Memorization)”,高效且可解释,但要泛化需要更多的特征工程。

深度模型:只需要少量的特征工程,深度神经网络通过embedding的方法,使用低维稠密特征输入,可以更好地泛化训练样本中未出现过的特征组合。但当user-item交互矩阵稀疏且高阶时,容易出现“过泛化(over-generalize)”导致推荐的item相关性差。

论文将广度模型和深度模型整合在一起,统一训练,可以将两种模型的优点结合起来,即既有Memorization也有Generalization。

 

推荐系统可以看做一个搜索排序系统,输入query是一个user及其上下文信息,输出是排好序的item列表。

Memorization的含义:学习item或特征的频繁共现,利用历史数据的相关性。推荐系统推荐的item通常具有局域性,和user的历史行为数据直接相关。

Generalization的含义:基于相关性的传递性,探索新的特征组合。推荐系统能带来更好的多样性。

 

工业界LR模型的广泛使用是因为其简单、可扩展、易解释,通常使用二值稀疏特征,one-hot编码的形式。比如某一维度特征“user_installed_app=netflix”为1,如果用户安装了Netflix,否则为0。通过叉乘可以实现Memorization,比如user_installed_app=netflix和impression_app=pandora做叉乘,表示为AND(user_installed_app=netflix, impression_app=pandora"),其值为1,如果用户安装了Netflix且之后推荐的app为Pandora,否则为0。通过粗粒度的特征可以引入一定的泛化,比如AND(user_installed_category=video, impression_category=music),但对于从来没在训练样本中出现过的组合就很难泛化了。

 

而基于Embedding的模型,比如FM或DNN,对每一个query和item特征都生成一个低维稠密向量,这样可以泛化从未出现过的query-item特征对。但当query-item矩阵非常稀疏和高阶时,很难学出有效的低维表示,在这种情况下,大部分query-item都没有历史交互,但稠密的向量表示导致所有的query-item对都有非0的预测值,导致了over-generalize和推荐相关性差。

 

推荐系统的候选集通常较大,第一步是检索,缩小候选集,通常是模型的组合或人为的规则,第二步才是排序模型,即给候选集的每一个item打分,分数通常为概率p(y|x),其中y为用户行为标签(点击、购买等),x为特征向量,包括用户特征(比如国家、语言、人口属性)、上下文特征(比如小时、星期几),推荐物品特征(比如app上线时间、app历史统计信息)。本论文就是通过广度深度学习框架来训练排序模型。

 

广度部分:

就是LR,特征包括原始特征和组合特征,实值特征都做了离散化,不再详述。

深度部分:

采用前向神经网络

对于高维稀疏的类别特征,每一维都转换成一个维度相同的embedding向量,embedding向量的维度比原始的维度低的多,从而达到降维目的。举个例子,比如原始类别特征为city,假设维度为100维,分别是"city=beijing","city=shanghai","city=tianjin",“city=chongqing”...,设定embedding向量为3维,通过训练"city=beijing"变成了[0.1,0.33,0.2],"city=shanghai"变成了[0.9,0.8,0.45],...

embedding向量和其余的实值特征连起来一起作为NN的输入向量。

embedding向量一开始随机初始化,和NN一起训练生成。具体的训练方法论文没细说,应该是按照这篇经典论文的方法:A Neural Probabilistic Language Model

 

最终LR和DNN是一起联合训练(joint training),而不是组合(ensemble)。联合训练的方式见论文Figure 1,一看便知。

论文讨论了joint training和ensemble的区别,ensemble是模型分开训练,预测的时候组合。而joint training是一起训练,当做一个模型。ensemble训练模型较大,LR要用尽可能多的特征组合来保证效果,而joint training中的LR可以只用少量的特征组合,只要能弥补DNN的缺陷就行,模型会更小。

我的理解是DNN尽量用出现频次高的特征,这样embedding才能训练充分,提高泛化能力;LR覆盖低频特征组合,保证长尾效果。

 

优化算法是梯度反向传播,mini-batch的随机优化。LR部分用FTRL,DNN部分用AdaGrad。

 

网络结构和参数见Figure 4:embedding维度为32,DNN的输入层大概1200维,DNN共有3层ReLU中间隐层,输出单元为sigmod函数,和LR共享。

 

训练样本规模为5000亿,每次用新数据训练时,可以保留上次模型的embedding向量和LR模型参数,缩短训练时间。

线上预测时,采用多线程并行计算,保证10ms的延迟。

 

实验结果:

基线为之前的LR模型,实验路为Wide & Deep model,特征都一样,但没有提及是否按照前面讨论的wide部分缩减了模型规模。AUC从0.726提高到了0.728,线上效果(app购买率)提高了3.9%。还对比了只用Wide & Deep model中的Deep部分做预测,AUC反而还降低了,只有0.722,但线上还是有2.9%的提升。按论文的说法,AUC提升不明显而线上效果明显,一个可能的原因是offline数据是固定的,而线上系统生成了更好的探索性的推荐结果。感觉解释的有点牵强。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【算法】深度学习在CTR预估/推荐系统中的应用探索
深度学习尝鲜-DeepFM模型原理
综述:机器学习在CTR中的应用
CTR预估模型演变及学习笔记
【用户需求】爱奇艺个性化推荐排序实践
推荐系统排序优化迭代的一些经验 | 脑洞 | 框架 结构 混沌 邪
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服