推荐系统 - wide&deep模型

1 简介

Google于2016年在 DLRS 上发表了一篇文章 《Wide & Deep Learning for Recommender Systems》;这里的Wide & Deep模型将 宽度模型与深度神经网络 进行联合训练,结合了 记忆与泛化 的能力。该模型在Google Play的推荐场景中有具体应用,有效地增加了Google Play的软件安装量。目前Wide & Deep模型已经开源,并且在TensorFlow上提供了高级API。

2 模型结构

  • 在Wide & Deep模型中包括两部分,分别为 Wide模型和Deep模型。对应下图左右两边。Wide & Deep模型的思想来源是,根据人脑有不断记忆并泛化的过程,这里将 宽线性模型(Wide Model,用于记忆)深度神经网络模型(Deep Model,用于泛化) 相结合,汲取各自优势形成了Wide & Deep模型,以用于推荐排序。
  • Wide & Deep模型旨在使得训练得到的模型能够同时获得 记忆(Memorization)和泛化(Generalization) 能力;
    (1)记忆(Memorization)即从历史数据中发现item或特征之间的相关性。“记忆能力”可以被理解为模型直接学习并利用历史数据中物品或特征的“共现频率”的能力,由于这类模型的结构简单,原始数据往往可以直接影响推荐结果,产生类似于“如果点击过A,就推荐B”这类规则式的推荐,这就相当于模型直接记住了数据的分布特点,并利用这些记忆进行推荐。像逻辑回归这类简单模型,如果发现这样的“强特征”,则其相应的权重就会在模型训练过程中被调整得非常大,这样就实现了对这个特征的直接记忆。
    (2)泛化(Generalization)即相关性的传递,探索并发现在历史数据中很少或者没有出现过的新的交叉特征。这里通过Embedding的方法,使用低维稠密特征输入,可以更好地泛化训练样本中未出现过的交叉特征。“泛化能力”可以被理解为模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。
Wide & Deep模型结构.png
2.1 Wide模型
  • 记忆(Memorization)主要是学习特征的共性/相关性,根据已有用户对物品的行为产生相关物品。我们通过Wide模型来学习记忆。wide模型就是一个广义线性模型:
    y = \boldsymbol{w}^T\boldsymbol{x}+b

其中,特征 \boldsymbol{x} = (x_1, x_2, ..., x_d) 是一个 d 维的向量; \boldsymbol{w} = (w_1, w_2, ..., w_d) 为模型的参数。最终在y的基础上增加sigmoid函数作为最终的输出,这其实就是一个 逻辑回归(LR)

  • Wide模型的输入特征包括 原始的输入特征和转换后的特征。一个重要的转换是,特征交叉转换(Cross-Product Transformation),它可以定义成下面这样:
    \phi_k(\boldsymbol{x}) = \prod_{i=1}^d {\boldsymbol{x}_i^{c_{ki}}}, c_{ki} \in \{0,1\}

其中,c_{ki}为一个boolean变量,如果第i个特征是第k个变换 \phi_k 的一部分那么为1,否则为0;例如,对于一个二值特征,一个特征交叉变换(如 AND(性别=男,语言=英语))只能当组成特征(“性别=男”,和“语言=英语”)都为1时才会为1,否则为0。

2.2 Deep模型
  • 泛化(Generalization)可以被理解为相关性的传递(Transitivity),是指算法可以学会特征背后的规律,对于新的交叉特征也能给出合适的输出值,可以提高推荐结果的多样性。我们通过Deep模型来学习Generalization。
  • Deep模型是一个前馈神经网络。对于类别特征,原始的输入是特征字符串(比如“语言=英语”)。这些稀疏的、高维的类别特征首先被转换成一个低维的、稠密的、实数值的向量。泛化往往会通过学习低维的 Embedding向量来探索过去从未或很少出现的新的特征交叉,通常的Embedding模型有 Factorization Machines(FM)和 Deep Neural Network(DNN)。
  • 为了达到泛化,我们会引入新的小颗粒特征,例如类别特征(安装了视频类目的应用,展示的是音乐类目的应用等),将这些高维稀疏的类别特征映射为低维稠密的向量后,与其他连续特征(用户年龄、应用安装数等)拼接在一起,输入MLP中;
  • 首先,Embedding向量被随机初始化,然后在训练过程中通过最小化损失函数来优化模型。每一个隐含层的计算如下:
    \boldsymbol{a}^{(l+1)} = f(\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l)} + b^{(l)})
    其中,f是激活函数,使用Relu激活函数。基于Embedding的深度模型的输入是:类别特征(产生Embedding)+ 连续特征。
2.3 模型联合训练

联合训练指的是Wide模型和Deep模型组合在一起,在训练时进行加权求和,并且通常采用logistic作为损失函数来进行训练。Wide & Deep模型如下:
P(Y=1|X) = \sigma(\boldsymbol{w}_{wide}^T[X, \phi(X)] + \boldsymbol{w}_{deep}^T \boldsymbol{a}^{(l_f)} + b)

3 Wide & Deep系统实现

3.1 App推荐系统
App推荐系统.png
  • 当一个用户访问App商量时生成一个query,它包含着许多用户特征和上下文特征。推荐系统会返回一个App列表,用户在此之上会执行特定的动作(点击或购买)。这些用户行为会伴随着请求和曝光,以日志的形式记录下来;
  • 由于数据库中有超过百万的App,而在线服务耗时通常来说,每一个query为10ms;因此,对每一个App进行评分比较困难。因此,当我们收到一个query时,第一步先进行检索(Retrieval)。检索系统会返回一个最匹配query的物品短列表(通常使用机器学习模型和人工定义规则来检索)
  • 通过检索得到候选池后,排序系统(Ranking System)会对所有候选池中的物品进行评分和排序。得分通常是 p(y|X)。一个用户的特征X对应动作标签y,其中特征包括用户特征(比如国家、语言、人口属性信息)、上下文特征(比如设备、天的小时、周的天)、曝光特征(比如App的历史统计信息)。本节只关注 在排序系统中使用Wide & Deep模型
3.2 系统流程
image.png
  • app推荐系统主要流程包括:
    1. 训练数据生成;(a)样本的label要根据实际的业务需求来定,比如在App商店中想要提高App的下载率,那么就以这次展示的 item 用户有没有下载作为label,使得模型以下载作为目标进行优化;(b)特征处理包括连续特征归一化。在对离散特征进行处理时,可以去掉出现频次较少的特征,以减小计算的复杂度;
    2. 模型训练;
      最终实验使用的模型如下:
      (a)Wide模型仅包含了用户安装App和曝光App的特征交叉转换;
      (b)Deep部分的输入是全量的特征向量;对于Deep模型,会为每一个类别特征学习到一个32维的Embedding向量。我们将所有Embeddings连接起来形成稠密特征,产生一个接近1200维的稠密向量。
      (c)连接后的向量输入到3个Relu层,最终采用Logistic作为输出单元;
      (d)训练数据有500万个样本,输入层同时产生稀疏特征或稠密特征。当新的训练数据来临的时候,我们用的数热启动的方式,也就是从之前的模型中读取Embeddings以及线性模型的权重来初始化一个新模型,而不是从头开始重新训练。
基于Wide & Deep模型的App推荐.png
  1. 模型服务部署;为了在10ms的级别服务于每个请求,我们使用多线程并行来优化性能,将App候选集分为多个小批次,并行化预测得分。
  • 在实际的推荐系统中,通常将推荐的过程分为两部分:Retrieval 和 Ranking
    (1)Retrieval 部分负责从数据库中检索出与用户相关的一些App;
    (2)Ranking 部分负责对这些检索出的App打分,并最终按照分数的高低向用户返回相应的列表;

TensorFlow代码实现

数据集说明

https://archive.ics.uci.edu/ml/datasets/Census+Income

  • 预测收入范围:>50k 或者 <=50k (二分类问题)
Attribute Information:

# label
Listing of attributes:
>50K, <=50K.

# 用到的特征
age: continuous.
workclass: Private, Self-emp-not-inc, Self-emp-inc, Federal-gov, Local-gov, State-gov, Without-pay, Never-worked.
fnlwgt: continuous.
education: Bachelors, Some-college, 11th, HS-grad, Prof-school, Assoc-acdm, Assoc-voc, 9th, 7th-8th, 12th, Masters, 1st-4th, 10th, Doctorate, 5th-6th, Preschool.
education-num: continuous.
marital-status: Married-civ-spouse, Divorced, Never-married, Separated, Widowed, Married-spouse-absent, Married-AF-spouse.
occupation: Tech-support, Craft-repair, Other-service, Sales, Exec-managerial, Prof-specialty, Handlers-cleaners, Machine-op-inspct, Adm-clerical, Farming-fishing, Transport-moving, Priv-house-serv, Protective-serv, Armed-Forces.
relationship: Wife, Own-child, Husband, Not-in-family, Other-relative, Unmarried.
race: White, Asian-Pac-Islander, Amer-Indian-Eskimo, Other, Black.
sex: Female, Male.
capital-gain: continuous.
capital-loss: continuous.
hours-per-week: continuous.
native-country: United-States, Cambodia, England, Puerto-Rico, Canada, Germany, Outlying-US(Guam-USVI-etc), India, Japan, Greece, South, China, Cuba, Iran, Honduras, Philippines, Italy, Poland, Jamaica, Vietnam, Mexico, Portugal, Ireland, France, Dominican-Republic, Laos, Ecuador, Taiwan, Haiti, Columbia, Hungary, Guatemala, Nicaragua, Scotland, Thailand, Yugoslavia, El-Salvador, Trinadad&Tobago, Peru, Hong, Holand-Netherlands.

代码说明

https://github.com/baidu-research/tensorflow-allreduce/blob/master/tensorflow/examples/learn/wide_n_deep_tutorial.py


  • 输出结果
model directory = models
accuracy: 0.85172904
accuracy_baseline: 0.76377374
auc: 0.9047877
auc_precision_recall: 0.76719904
average_loss: 0.32222852
global_step: 20000
label/mean: 0.23622628
loss: 32.18529
precision: 0.74487007
prediction/mean: 0.2416372
recall: 0.56630266

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351