当前位置: 首页 > news >正文

【推荐系统->论文阅读】WideDeep模型

Wide & Deep Learning for Recommender Systems

Abstract

(非线性特征转换transformation1的广义线性模型 被广泛用于回归和分类)

  • 广泛的特征交叉转换来记忆特征交互。
  • 深度神经网络利用较少的特征工程,通过对稀疏特征学习的低维度密集Embedding,可以更好地推广到不可见的特征组合。

在本文提出Wide & Deep模型,jointly trained wide linear modelsand deep neural networks—to combine the benefits of memorization and generalization for recommender systems。

CCS Concepts

  • Computing methodologies计算机方法 -> Machine learning机器学习
  • Neural networks神经网络
  • Supervised learning有监督学习
  • Information systems信息系统 -> Recommender systems推荐系统

1 Introduction

推荐系统可以被视为一个搜索排名系统,其中输入查询是一组用户和上下文信息,输出是一个商品排名列表。给定一个查询,推荐任务是在数据库中找到相关的条目,然后根据某些目标(如点击或购买)对条目进行排名。

  • Memorization:学习经常同时出现的项目或特征,并利用历史数据中可用的相关性。
    • 它与用户直接交互过的物品直接相关
  • Generalization:基于相关性的传递性,探索过去从未或很少出现的新特征组合。
    • 它提高被推荐物品的多样性

在本文中,用于APP推荐,不过也适用一般的推荐系统。

  • 在工业使用上,广义线性模型比如逻辑回归被广泛使用,因为它们简单、可扩展和可解释。在训练时经常使用独热编码(二值化的稀疏特征)。
  • 使用了Embedding的模型,例如FM[5] 或者 深度神经网络,通过为每个查询和项目特征学习一个低维密集的Embedding向量,可以推广到以前从未见过的查询项目特征对,减少了特征工程的负担。

In this paper, we present the Wide & Deep learning frame-work to achieve both memorization and generalization in one model, by jointly training a linear model component and a neural network component as shown in Figure 1.

在这里插入图片描述

论文的主要贡献包括:

  • The Wide & Deep学习框架,用于联合训练具有Embedding的前馈神经网络和具有特征转换的线性模型,用于具有稀疏输入的通用推荐系统。

虽然想法很简单,但我们表明,Wide & Deepframework显著提高了移动应用商店的应用获取率,同时满足训练和服务速度的要求。

2 Recommender System Overview

应用程序推荐系统的概述如图2所示。当用户访问应用商店时,会生成一个查询,它可以包含各种用户和上下文特性。推荐系统会返回一个应用列表(也被称为impressions),用户可以在这些应用上执行某些操作,如点击或购买。这些用户操作以及查询和印象记录在日志中,作为学习者的训练数据。

在这里插入图片描述

由于项目条目巨大和时间限制,第一步要先retrieval,retrieval system返回一个短的项目列表(通常是结合机器学习和人类定义的规则)。

在减少候选池之后,ranking system会对所有项目按分数排名。分数通常是 P ( y ∣ x ) P(y|\bold{x}) P(yx),给定特征x(包括用户特征,如国家、语言等;上下文特征,如设备,一天中的小时等;印象特征,如app年龄,app的历史统计数据等)。在本文中,我们重点研究了使用广深学习框架的排序模型。

3 Wide & Deep Learning

3.1 The Wide Component

The wide component是一个广义线性模型 y = w T x + b y = \bold{w^T x} + b y=wTx+b,如图一(左)所示。y是预测结果, x = [ x 1 , x 2 , . . . , x d ] \bold{x}=[x_1, x_2, ..., x_d] x=[x1,x2,...,xd]是d维度的向量, w = [ w 1 , w 2 , . . . , w d ] \bold{w}=[w_1, w_2, ..., w_d] w=[w1,w2,...,wd]是模型参数,b是偏移。

特征集包括原始输入特征和转换后的特征。最重要的变换之一是cross-product transformation,它被定义为:
ϕ k ( x ) = ∏ i = 1 d x i c k i c k i ∈ { 0 , 1 } \phi_{k}(\mathbf{x})=\prod_{i=1}^{d} x_{i}^{c_{k i}} \quad c_{k i} \in\{0,1\} ϕk(x)=i=1dxickicki{0,1}
其中 c k i c_{k i} cki是布尔变量,如果第i个特征是第k个transformation ϕ k \phi_{k} ϕk的一部分,则为1,否则为0。

举个例子,对于二元特征,当且仅当cross-product transformation(组合特征)(如“AND(gender=female, language=eb)”)全部为1时,组合特征转换(如“AND(gender=female, language=eb)”)为1,否则为0。这捕获了二元特征之间的相互作用,并向广义线性模型添加了非线性。

详细介绍请看2,主要看第2篇文章

重点关注这句话:This means that 𝜙𝑘 with 𝑐⃗=[0,1,1,0] will return 1(true) for all 𝑥⃗ that represents a white dog, does not matter if the dog is male or female or whether it is fed. And will return 0 for anything that is either not a dog or not white.

就可以很好地理解cross-product transformation了。

3.2 The Deep Component

The deep component是一个前馈神经网络,如图一(右)所示。对于分类特征,原始输入是特征字符串(例如," language=en ")。这些稀疏、高维的分类特征首先被转换成一个低维、密集的实值的向量,通常被称为Embedding向量。Embedding的维度通常在O(10)~O(100)数量级。

对Embedding向量进行随机初始化,然后对Embedding向量的值进行训练,使模型训练时的最终损失函数最小。这些低维密度的Embedding向量在前向通道中被输入到神经网络的隐藏层中。具体来说,每个隐层计算:

a ( l + 1 ) = f ( W ( l ) a ( l ) + b ( l ) ) a^{(l+1)}=f\left(W^{(l)} a^{(l)}+b^{(l)}\right) a(l+1)=f(W(l)a(l)+b(l))

其中l是层数,f是激活函数,通常是修正线性单元(ReLUs)。 a ( l ) , b ( l ) a^{(l)},b^{(l)} a(l)b(l) w ( l ) w^{(l)} w(l)是第l层的激活,偏移量和模型权重。

3.3 Joint Training of Wide & Deep Model

通过加权和 wide部分和deep部分的输出的对数概率,作为预测结果。然后喂给一个共同的逻辑斯蒂损失函数,用于联合训练。

注意,joint training(联合训练)和ensemble(集成)是有区别的。

  • ensemble:个体模型在相互不认识的情况下单独训练,它们的预测只在推理时组合,而不是在训练时组合。
    • 对于ensemble来说,由于训练是不相交的,每个单独的模型大小通常需要更大(例如,有更多的特征和转换),以达到合理的精度,使ensemble工作
  • joint training:通过在训练时,同时考虑wide和deep部分以及它们总和的权重来优化所有参数。
    • 对于joint training,wide部分只需要用少量的cross product feature转换来补充deep部分的弱点,而不是全尺寸wide模型。

采用 mini-batch stochastic optimization(小批量随机优化方法),通过back propagating反向传播,利用output输出,对模型的wide和deep两部分的梯度来实现wide和deep模型的联合训练。

在实验中,我们使用Follow-the-regularized-leader (FTRL)算法[3],其中L1正则化作为模型Wide部分的优化器,AdaGrad[1]作为模型Deep部分的优化器。

组合模型如图1(中间)所示。对于一个逻辑回归问题,模型的预测为:
P ( Y = 1 ∣ x ) = σ ( w w i d e T [ x , ϕ ( x ) ] + w d e e p T a ( l f ) + b ) P(Y=1 \mid \mathbf{x})=\sigma\left(\mathbf{w}_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{d e e p}^{T} a^{\left(l_{f}\right)}+b\right) P(Y=1x)=σ(wwideT[x,ϕ(x)]+wdeepTa(lf)+b)
其中T是二元类别标签, σ ( ⋅ ) \sigma(\cdot) σ()是sigmoid函数, ϕ ( x ) \phi(\bold{x}) ϕ(x)是初始特征x的cross product transformations,b是偏移量。 w w i d e \bold{w}_{wide} wwide是所有wide模型的权重向量, w d e e p \bold{w}_{deep} wdeep是应用于最后激活 a l f a^{l_f} alf的权重。

4 System Implementation

app推荐管道的实现包括三个阶段:数据生成、模型训练和如图3(位于4.3)所示的模型服务。

4.1 Data Generation

vocabularies:词汇表是将分类特性字符串映射到整数id的表,

4.2 Model Training

我们在实验中使用的模型结构如图4所示。

在这里插入图片描述

在训练过程中,我们的输入层 接收 训练数据和词汇表,并生成稀疏和密集的特征和标签。

  • wide部分包括user installed app和impression apps的cross-product transformation。
  • 在模型的deep部分,为每个类别特征学习了一个32维的Embedding向量。我们将所有的Embedding与稠密特征连接在一起,得到一个大约1200维的密集向量。连接后的向量被送入3个ReLU层,最后进入逻辑输出单元。

The Wide & Deep models的训练样本超过5000亿个。每当一组新的训练数据到达时,模型就需要重新训练。然而,每次从头开始重新训练的计算成本很高,而且会延迟从 数据到达 到 为更新的模型服务的时间。为了解决这一挑战,我们实现了一个热启动系统,该系统用之前模型的Embedding和线性模型的权重初始化一个新模型。

在将模型加载到模型服务器之前,要对模型进行一次dry run,以确保它在服务实时流量时不会造成问题。我们通过经验验证模型质量,以检查之前的模型是否健全。

4.3 Model Serving

在这里插入图片描述

一旦模型经过训练和验证,我们就将其加载到model servers中。对于每个请求,the servers从app retrieval system和user feature接收一组候选应用程序,对每个应用程序进行评分。然后,对应用程序进行从高分到低分的排序,并按照这个顺序向用户展示应用程序。分数是通过在Wide & Deep模型上运行一个向前推理传递来计算的。

为了在10毫秒量级上处理每个请求,我们使用多线程并行优化性能,通过并行运行更小的批处理,而不是在单个批推理步骤中为所有候选应用程序打分。

5 Experiment Results

为了评估宽深度学习在真实推荐系统中的有效性,我们进行了现场实验,并从应用程序获取和服务性能两个方面评估了该系统。

6 Related Work

将wide linear model+cross-product feature transformations以及deep neural networks+dense embeddings相结合的想法是受到了以前工作的启发,比如factorization machines[5],它通过factorizing the interactions between two variables as a dot product between two low-dimensional embedding vectors 来为线性模型增加generalization。在本文中,我们通过神经网络学习Embedding之间高度非线性的相互作用,而不是点积 来扩展模型能力。

  • 在语言模型中,joint training of recurrent neural net-works (RNNs) + maximum entropy models with n-gram features可以有效减少RNN的复杂度,通过learning direct weights between inputs and outputs [4].
  • 在计算机视觉中,deep residual learning[2]被用于降低训练深度模型的难度和通过跳过一层或多层的短路连接提高准确性。

神经网络与图模型的联合训练也已被人类姿态估计[6]应用。在这项工作中,我们探索了前馈神经网络和线性模型的联合训练,通过与稀疏特征和输出单元之间的直接联系。用于具有稀疏输入数据的一般推荐和排序问题。

在推荐系统文献中,collaborative deep learning已经被探索,如结合深度学习 内容信息和协同过滤(CF),获得ratings matrix[7]。

之前也有关于手机应用推荐系统的研究,比如AppJoy在用户的应用使用记录[8]上使用CF。与之前基于CF或基于内容的方法不同,我们联合训练了应用推荐系统的用户数据和impression数据的Wide & Deep模型。

7 Conclusion

memorization和generalization对推荐系统都很重要。

  • wide linear models可以利用cross-product feature transformations有效记忆稀疏特征交互
  • 而deep neural networks可以通过低维Embedding 推广到以前未见过的特征交互。

我们提出了Wide & Deep learning框架来结合这两种模型的优点。

我的总结

  1. 这是我完完整整看完一篇推荐系统论文的第一篇。文章的逻辑很清晰,暂时没看代码。
  2. wide部分使用了cross-product transformation技术,deep部分使用了embedding+神经网络技术。
  3. Wide & Deep模型的出现启发于factorization machines[5]。

参考文献


  1. 非线性转换概念与知识点:https://blog.csdn.net/qq_22717679/article/details/51179198 https://www.cnblogs.com/FlameBlog/p/14715271.html ↩︎

  2. 1 https://zhuanlan.zhihu.com/p/395608710 2 https://datascience.stackexchange.com/questions/57435/how-is-the-cross-product-transformation-defined-for-binary-features ↩︎

相关文章:

  • 【Node】cookie、sessionStorage、localStorage 与 身份认证
  • 把setting.xml放在conf和.m2目录的区别
  • OpenCV图像加载、显示与保存
  • Vulhub靶场搭建与使用
  • 80-Java的Map集合:概述、API、遍历方式
  • vue中什么是$nextTick?
  • java springboot儿童医药评价系统网站python
  • 12.springboot中使用自定义Filter
  • 【JS缓存技术】-本地存储
  • 目标检测——关键点检测学习记录(五):物体关键点检测
  • Android开发学习——3.平台版本、SDK版本、API级别
  • python数据分析(2)
  • tsx 文件中的 行删除
  • Visual C++基础 - 使用OLE/COM操作Excel类
  • 夜出行动物
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 77. Combinations
  • CAP理论的例子讲解
  • CentOS 7 防火墙操作
  • java取消线程实例
  • MySQL的数据类型
  • Node项目之评分系统(二)- 数据库设计
  • python 学习笔记 - Queue Pipes,进程间通讯
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 工程优化暨babel升级小记
  • 基于HAProxy的高性能缓存服务器nuster
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 数据仓库的几种建模方法
  • 系统认识JavaScript正则表达式
  • 学习Vue.js的五个小例子
  • 译有关态射的一切
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (09)Hive——CTE 公共表达式
  • (1)(1.13) SiK无线电高级配置(六)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (三)uboot源码分析
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一)认识微服务
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)VC++中ondraw在什么时候调用的
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET gRPC 和RESTful简单对比
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET导入Excel数据
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @ConfigurationProperties注解对数据的自动封装