深度学习在58同城智能推荐系统中的应用实践

FM 模型能够解决大规模稀疏数据下的特征组合问题, FM 模型公式如下图所示,公式前半部分其实就是 LR Logistic Regression ),后半部分是两两特征的交叉形式(以二阶形式为例)。例如特征 Xi Xj 的交叉后变成一个新特征,特征值为 Xi*Xj ,特征权重为 Wij ,这里的 Wij 又可以表示为两个 K 维向量 Vi Vj 的乘积, FM 模型在训练过程中能够自动学习出向量 Vi Vj ,向量 Vi 称之为特征 Xi 的隐向量。这里的 K FM 模型的参数,我们可以任意指定,针对 500W 维的用户 ID 类特征,若 K 设置为 10 ,则可以得到每个用户 ID 对应的 10 维隐向量。由此可见, FM 是一种有效的 embedding  模型,它能将高维稀疏特征转化为稠密特征。


我们的应用中,我们先使用分布式 FM DiFacto )训练出模型,得到每个特征的权重和隐向量,然后针对每个特征类别( Field ,例如用户 ID 类特征)将特征权重和隐向量拼接起来,构成一个稠密的特征向量,输入到神经网络,这就是 FNN ,详细网络结构如下图所示。我们在 2017 1 月份在详情页相关推荐场景实验并上线了 FNN 模型,上线后相比 base 模型,帖子点击率有 5% 左右的提升。 FNN 的开源代码是使用 Theano 实现的,我们使用 TensorFlow 重新进行了实现,离线使用分布式 TensorFlow 进行训练,线上预测部分使用 Java 自主实现了神经网络的前向计算。




2. Wide&Deep
       Wide&Deep 模型是 Google 2016 6 月发表的《 Wide&Deep Learning for RecommenderSystems 》文章中提出的,目前被各大公司广泛使用。顾名思义,它是将 Wide 模型和 Deep 模型相结合。模型框架如下图所示:左边是 Deep 部分,首先将各类离散特征进行 One-Hot 编码并输入 embedding 层得到稠密向量,然后与连续特征拼接在一起得到特征向量作为神经网络的输入;右边 Wide 部分我们使用原始特征(离散特征的 One-Hot 编码)和人工交叉特征作为输入;将两个模型的输出相结合即可得到最终的结果。


我们直接应用了 TensorFlow Wide&Deep 的开源实现,离线使用分布式 TensorFlow 进行训练,相比 base 模型,离线 AUC 0.026 的提高。值得一提的是,与 FNN 需要借助 FM 模型预训练来做稀疏特征的 embedding 不同, Wide&Deep 模型内部自主实现了 embedding ,稀疏特征对应的 embedding 稠密向量可以在整个网络训练过程中自动学习得到。

我们从 Wide&Deep 的模型结构可以看到, Deep 部分其实就是自动学习出了高阶特征,然后输入给 LR ,而 Wide 部分需要依赖传统的人工特征工程,会使用原始离散特征和低阶交叉特征(例如二阶交叉)。我们可以理解为 Wide&Deep 模型将多阶特征的使用进行了拆分, Deep 部分是用于生成更高阶的复杂特征,而 Wide 部分是使用较简单的低阶特征。

在深度学习之前,我们常用的是使用 GBDT 模型自动生成高阶特征,这一方法在 Facebook 提出 GBDT+LR 模型后被工业界广泛使用,它使用 GBDT 模型将每个样本映射到 GBDT 各棵树的叶子节点上,并拼接成一个稀疏向量,然后作为 LR 模型的输入特征。之后在 Kaggle 竞赛中,参赛者将 GBDT 生成的高阶特征输入到 FM 模型,取得了良好的效果, GBDT+FM 模型也逐渐被工业界使用,下图是 GBDT+LR/FM 的模型框架图。

Wide&Deep 模型使用了 Deep 部分的更高阶复杂特征和 Wide 部分的人工特征工程得到的低阶特征, GBDT 生成的高阶特征可以理解为介于二者之间,因此我们可以将 GBDT 生成的高阶特征也输入到 Wide&Deep 模型当中。我们使用 XGBoost GBDT )生成了高阶特征,然后输入到 Wide 模型构成了 XGBoost+Wide&Deep 模型,相比 Wide&Deep 模型,离线 AUC 0.018 的提升。我们也尝试了将 GBDT 高阶特征向量继续输入给 Deep 模型,离线 AUC 能有千分之一左右的提升,模型结构如下图所示。


我们可以看到, Wide&Deep 模型的 Wide 部分的输入依赖人工特征工程,并非是一个端到端的学习过程。华为诺亚方舟实验室在 2017 3 月发表的文章《 DeepFM: A Factorization-Machine basedNeural Network for CTR Prediction 》中提出了 DeepFM 模型, DeepFM 的结构中包含了 FM 部分以及 DNN 部分,分别负责低阶特征和高阶特征的提取,实现了端到端的学习过程,我们正在尝试该模型。
3. CNN+DNN
        在我们的部分推荐场景中帖子图片比较大,例如优质高清的房源大图对用户会有较强的吸引,因此我们考虑将图像特征引入到排序模型当中,例如将帖子图像转化成一个特征向量输入到排序模型。腾讯 2015 年在 IJCIA 上发表的文章《 Image Feature Learning for Cold StartProblem in Display Advertising 》中就提出了该思路,它首先利用 CNN  对图像进行特征抽取得到特征向量,然后输入到 LR  等常见模型。针对深度图像特征的应用,阿里广告团队在 2016 9 月于 Multimedia 会议上发表的文章《 Deep CTR Prediction in Display Advertising 》中提出了全新的端到端的思路( DeepCTR 模型),模型结构是一部分利用CNN抽取出图像特征,一部分使用一个全连接层对连续和离散特征做embedding,两者拼接在一起输入神经网络进行训练。但在我们的场景下,每天有数百万的发帖,样本中图片数量大, DeepCTR 模型离线训练受 CNN 限制会很缓慢,并且线上预测时 CNN 部分也有较大的性能压力。因此我们转变了一下思路,尝试了下图所示的 CNN+DNN 模型,在这个模型中,我们使用 CNN 图像分类模型来做预训练,生成了每张图片的特征向量,然后将图像特征、离散特征、连续特征一起输入至 Wide&Deep 中的 Deep 模型。在我们的场景下,该模型离线 AUC 相比 base 模型有 0.01 的提升。

4. DNN召回模型
近些年在推荐排序上涌现出了很多深度学习模型,在推荐召回上的深度模型相对偏少,比较有名的是 YouTube 2016 9 月在 RecSys 上发表的文章《 Deep Neural Networks for YouTube Recommendations 》中提出的 DNN 召回模型(后文称作 YouTube DNN 召回模型)。我们也引入了该模型,模型结构如下图所示。

YouTube DNN 召回模型将推荐当做一个超大规模的多分类问题,用户点击过的帖子即为一个分类,模型就是预测用户 U 在时刻 t 和当前上下文 C 下对帖子 i 的点击概率 P(Wt=i|U,C) ,模型输出层是一个 softmax ,类别数量即帖子数量。模型会将用户历史浏览记录做 embedding 处理,并与用户人口属性特征、上下文特征等一起作为神经网络的输入。
在训练出来的模型中,最后一层隐藏层与输出层帖子结点之间的连接权重可以当做帖子的向量,例如图中的帖子 V1 的向量就是 (w1, w2, w3) ,这样每个帖子都会得到一个向量。最后一层隐藏层的输出可以当做用户的向量,当线上推荐服务收到请求时,将特征向量输入网络,最后一层隐藏层的输出结果便是用户向量,如图中的向量 (x1,x2,x3) ,这样推荐逻辑就变成计算与用户向量最相近的 K 个帖子向量。
在我们的应用中,我们借助 Facebook  人工智能实验室( FAIR )提出的最邻近搜索( nearest neighbor search )算法 FAISS Facebook AI similarity search )实现了用户向量的最近邻帖子向量的实时计算,当推荐服务接收到推荐请求时便实时计算用户感兴趣的帖子候选集合。该召回模型上线后,相比 base 召回模型,我们的点击率有 1% 左右的稳定提升。 YouTube DNN 召回模型相比传统协同过滤模型,可以引入更多的特征,有更多的优化空间,后续我们将继续调优该模型,提高推荐效果。
原文链接: https://mp.weixin.qq.com/s/qCpCHueEK7Nja-cPmlCaCg
作者:詹坤林  58架构师

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值