一、总述

Wide & Deep作为一篇推荐领域的经典论文,不仅具有很高的研读价值,而且在推荐和广告领域得到了极大的推广和应用。该论文的思想归结起来就是两个词:Wide & Deep。Wide模型用来从训练数据中学得出现频率高的特征或者特征组合,也就是论文提到的模型的 memorization能力;Deep模型则用来从训练数据中学得出现频率低或者没出现过的特征组合,也就是论文提到的模型的generalization能力。这两类问题和推荐场景中的exploitation和exploration极为相似,exploitation方法帮助我们在短期内实现较大的收益,风险相对较小;exploration方法帮助我们拓宽推荐范围,从长期来看可能能得到更大的收益,但是风险相对较高。通过将Wide模型和Deep模型进行联合训练,能够实现高效的推荐,特别是对于输入数据稀疏的场景。

二、论文介绍

现在推荐系统的一个难点就是同时实现Memorization以及Generalization,这个难点与搜索排名问题相似。

  • Memorization:
    之前大规模稀疏输入的处理是:通过线性模型 + 特征交叉。通过特征交叉能够带来很好的效果并且可解释性强。但是Generalization(泛化能力)需要更多的人工特征工程。
  • Generalization:
    相比之下,DNN几乎不需要特征工程。通过对低纬度的dense embedding进行组合可以学习到更深层次的隐藏特征。但是,缺点是有点over-generalize(过度泛化)。推荐系统中表现为:会给用户推荐不是那么相关的物品,尤其是user-item矩阵比较稀疏并且是high-rank(高秩矩阵)

而在本文中,介绍了一种新的方法,Wide&Deep,包括两部分,Wide Part和Deep Part。

  • Wide部分:利用了广义线性模型,提高可解释性。 在大规模的在线推荐系统中,logistic regression应用非常广泛,因为其简单、易扩展、可解释性。LR的输入多半是二值化后的one-hot稀疏特征。Memorization可通过在稀疏特征上做特征交叉来实现,例如:user_installed_app=netflix,impression_app=pandora,当user_installed_app与impression_app的取值都为1时,其组合特征AND(user_installed_app=netflix,impression_app=pandora)的值则为1,否则为0。
    缺点:无法学习高阶组合特征,并且需要进行人工特征工程。
  • Deep部分:主要是发现训练集中未出现的高阶组合特征。
    Embedding-based模型可以在很少的特征工程情况下,通过学习一个低维的embedding vector来学习训练集中从未见过的组合特征。例如,FM与DNN。不需要进行复杂的特征工程。
    缺点:当query-item矩阵是稀疏并且是high-rank的时候(比如user有特殊的爱好,或item比较小众),很难非常效率的学习出低维度的表示。这种情况下,大部分的query-item都没有什么关系。但是dense embedding会导致几乎所有的query-item预测值都是非0的,这就导致了推荐过度泛化,会推荐一些不那么相关的物品。

Wide&Deep结合以上两者的优点,平衡Memorization和Generalization。相比于wide-only和deep-only的模型,Wide&Deep提升显著。

三、推荐系统

推荐系统可以看成是一个search ranking问题,根据query得到items候选列表,然后对items通过ranking算法排序,得到最终的推荐列表。Wide&Deep模型是用来解决ranking问题的。推荐系统示意图如下:

推荐系统会返回一个apps列表,这些列表中包含了user actions,例如点击或者购买。
本文是在Google APP store上的推荐,主要流程为:

  • Query: 当我们打开APP Store的时候,就产生了一次Query,它包含两部分的特征:user features, contextual features。user features 包括性别、年龄,国家,语言等人口统计特征,contextual features包括设备、时间(hour of the day, day of the week)等上下文特征。
  • Items: APP store接着展示给我们一系列的app,这些app就是推荐系统针对我们的Query给出的推荐。这个也被叫做impression。
  • User Actions: 针对推荐给你的任何一个APP,我们都可以点击、下载、购买等操作。也就是说推荐给你的APP,你产生了某种行为。
  • Logs: Logs = Query + Impression + UserAction查询、展示列表、操作会被记录到logs中作为训练数据给Learner来学习。
  • Retrieval:针对这一次Query,来给出推荐列表。暴力做法:给数据库中所有的APP都打一个分数,然后按照分数从高到低返回前N个(比如说前100个)。机器学习方法:利用机器学习模型和一些人为定义的规则,来返回最匹配当前Query的一个小的items集合,这个集合就是最终的推荐列表的候选集。
  • Ranking:前面Learner学习到了一个Model,利用这个Model对Retrieval给出的候选集APP打分!并按照打分从高到低来排序,并返回前10个APP作为最终的推荐结果展示给用户。

Recommender system = Retrieval system + Ranking system
Retrieval system:对当前Query构造候选item集。
Ranking system:对候选item集中的item进行打分,减小候选item集数量。得分score表示成P(y|x), 表示的是一个条件概率。y是label,表示user可以采取的action,比如点击或者购买。x表示输入,特征包括:
User features(eg.country, language, demographics)
Contextual features(eg.device, hour of the day, day of the week)
Impression features(eg.app age, historical statistics of an app)

注:Wide&Deep Model主要是进行Ranking部分。

四、Wide&Deep模型介绍

  • 左边是wide模型(memorization):
    这个应该是这篇模型中最值得思考的地方,Wide的特征用了两个one-hot的特征:user_installed_app和impression_app 交叉得到一个特征,比如user_installed_app=youtube&impression_app=netflix。
    简单阐述下这个特征交叉的意义,假如训练数据中有很多user_installed_app=youtube&impression_app=netflix 这样的交叉特征,且这个特征出现时用户很大概率安装了netflix;那么当在线预测时,一个用户出现user_installed_app=youtube&impression_app=netflix 这样的交叉特征时,那么很大概率推荐netflix就会获得很好的下载安装率。
    这个特征很好的解释了Wide部分的"记忆”作用,这样的特征对模型有本质性贡献,我们不希望复杂模型在训练过程削弱这个特征,可以直接放入Wide部分。

其使用基础的线形模型,包括基础特征 x和交叉特征(包括raw input 原始特征和cross-product transformation 组合特征),组合特征公式如下:
其中i表示输入x的第i维特征,cki表示这个第i维度特征是否要参与第k个组合特征的构造。
主要是category特征进行one-hot编码后进行交叉组合,例如,AND(gender=female, language=en)。

  • 右边是deep模型(generalization),使用深度神经网络进行训练,对于输入的high-dimensional categorical features,先将其转为为low-dimensional and dense real-valued embedding vectors,再输入到神经网络中进行训练。整个模型公式可以表示为:

    对于分类特征,原始输入是特征字符串(例如“language = en”)。 首先将这些稀疏高维分类特征中的每一个转换成低维且密集的实值向量,通常称为embedding vector。embedding vector传给隐藏层进行前向训练。隐藏层的激活函数通常使用ReLU。

五、实验

模型主要在Google Play上进行实验,通过对于用户进行应用推荐的安装情况来检验模型的优劣。实验构建的模型结构如下所示:

数据处理:

  • Categorical Features(种类特征)map 成id
    过滤掉出现次数少于设定阈值的离散特征取值,然后把这些全部map成一个ID。离散特征取值少,就直接编号。多的话可能要Hash。
  • Continuous Features(连续特征)
    对于连续型特征,先使用累计分布概率将其标准化到[0, 1],再离散化到 nq 个分位数上。从上图可以看出论文十分注重用户已安装的应用和推荐的应用之间的联系,并将其作为一个重要的交叉特征输入到wide模型中。

训练

  • Wide Part: Cross Product Transformation(组合特征)
  • Deep Part: Continuous Features + embedding(Categorical Features)
  • 训练方法是用mini-batch stochastic optimization
  • Wide组件是用FTRL(Follow-the-regularized-leader) + L1正则化学习。
  • Deep组件是用AdaGrad来学习。

Wide部分采用Ftrl+L1正则化训练,目的是为了让Wide部分参数稀疏化,可以回忆下Wide部分的特征,user_installed_app&impression_app,假设应用的数量有100万,那么总参数数量有1万亿!,模型将会非常庞大,而且考虑到训练数据也很稀疏,可以采用这个优化器方法进行训练减少模型参数。
Deep部分采用场景深度网络训练优化器如SGD或者Adam都成。

Embedding维度大小的建议:
Wide&Deep的作者指出,从经验上来讲Embedding层的维度大小可以用如下公式:

其中n是原始维度上特征不同取值的个数;K是一个常数,通常小于10.

主要实验结果如下所示:

六、代码实现(出自某位大佬)

代码连接:https://github.com/ZiyaoGeng/Recommender-System-with-TF2.0

数据集采用的是:Criteo,下载链接为:(https://pan.baidu.com/s/1sYsY88APFTNldcZ2n3sKlA):96f2

5.Wide Deep Learning for Recommender Systems论文详细解读和代码实现相关推荐

  1. Google推荐系统Wide Deep Learning for Recommender Systems论文翻译解读

    Wide & Deep Learning for Recommender Systems 推荐系统中的Wide & Deep Learning 摘要 Generalized linea ...

  2. 论文笔记 【Wide Deep Learning for Recommender Systems】

    标题 * 表示未完成 论文原文传送门 文章提出了 m e m o r i z a t i o n a n d g e n e r a l i z a t i o n memorization\ and ...

  3. Wide Deep Learning for Recommender Systems【论文记录】

    特点在于联合学习,将线性模型和神经网络联合在一起共同学习 线性模型作用于所给的特征,直接记忆专家给的有效特征 神经网络作用于所有特征,挖掘新特征,进行泛化 也就是结合 人为发现的规则和机器探索的联系 ...

  4. Data Poisoning Attacks to Deep Learning Based Recommender Systems论文解读

    1 摘要 在这项工作中,作者对基于深度学习的推荐系统的数据中毒攻击进行了首次系统研究.攻击者的目标是操纵推荐系统,以便向许多用户推荐攻击者选择的目标项目.为了实现这一目标,作者将精心设计的评分注入到推 ...

  5. 【翻译】Wide Deep Learning for Recommender Systems--推荐系统的广泛深度学习

    摘要 通过将稀疏数据的非线性转化特征应用在广义线性模型中被广泛应用于大规模的回归和分类问题.通过广泛的使用交叉特征转化,使得特征交互的记忆性是有效的,并且具有可解释性,而然不得不做许多的特征工作.相对 ...

  6. 【RS-Attack】Data Poisoning Attacks to Deep Learning Based Recommender Systems NDSS‘21

    Data Poisoning Attacks to Deep Learning Based Recommender Systems NDSS'21 首个在基于深度学习的推荐系统中进行投毒攻击的研究.文 ...

  7. #论文 《Wide Deep Learning for Recommender System》翻译

    只是为了深化个人理解,翻译了一下梗概.不追求信达雅,只翻译大意. 概要: 使用非线性特征的广义线性模型(GLM)广泛应用在大规模,输入变量稀疏的回归和分类问题中.其中,通过关于交叉特征的wide模型, ...

  8. 4.Product-based Neural Networks for User Response Prediction论文详细解读和代码实现

    一.前言 现在推荐系统,网络搜索和在线广告的数据大多是分类的,并包含多个字段,有一个典型的方法将他们转化成高维稀疏二进制特征表示就是通过one-hot编码.对于这些高维稀疏的特征,传统模型可能会限制它 ...

  9. 基于Wide Deep Learning的推荐系统

    我们先来看下Google Inc的paper:Wide & Deep Learning for Recommender Systems. 一.介绍 推荐系统可以看成是一个搜索排序系统,其中输入 ...

最新文章

  1. transactionscope 中的异步 处理 异常_协程中的取消和异常 | 异常处理详解
  2. 手动封装element-ui里面的button组件
  3. Leetcode--300. 最长上升子序列
  4. Mybatis中SQL注入攻击的3种方式,真是防不胜防!
  5. java明星游戏_#IT明星不是梦#Java14不得不知的5个新功能
  6. 动态加载执行 JS 文件、对话框 confirm 方法
  7. 别嘲笑老同志了!网络诈骗,19岁小鲜肉最容易中招
  8. 解决ASP.NET 安装完成报错500
  9. 基于iTextSharp库的PDF文件拆分、合并(C#)
  10. 拆弹实验-phase_4
  11. 分摊的意思_十年分摊是什么意思
  12. 第十三章 相关方管理 权利利益方格 凸显模式 相关方立方体 相关方登记册 相关方参与评估矩阵
  13. 苹果电脑如何修改服务器文件在哪里设置,电脑服务器修改mac地址
  14. 简单的网页登录注册页面
  15. 【开源】港中文多媒体实验室开源目标跟踪工具箱MMTracking
  16. 服务器遇到一个意外的情况,阻止它完成请求
  17. 音频文件格式有哪些?误删音频文件如何恢复?
  18. Golang 学习二十五(UDP 编程)
  19. 用jquery合并(去重)html表格中相同内容
  20. SQL SERVER 数据库安装注意事项

热门文章

  1. html设置行的水平对齐
  2. SQLServer 自定义函数 日期计算月初/月末/年初/年末/季初/季末
  3. 电脑控制手机教你实现多个手机同时自动安装卸载软件
  4. (转)Android兼容8.0后APP图标变为原生小机器人图标
  5. 深入 AXI4总线 (四):RAM 读取实战
  6. 为什么理想电流源的等效内阻是无限大
  7. Pinta 1.0发布
  8. 【求职】搜狗 C++反向面经
  9. 计算机映像缺失磁盘如何修复,重装Win10系统找不到硬盘的解决方法
  10. ERP如何为企业带来效益?