Wide & Deep Learning for Recommender Systems论文笔记

Wide & Deep Learning for Recommender Systems论文笔记

摘要

具有非线性特征变换的广义线性模型广泛应用于具有稀疏输入的大规模回归和分类问题。通过大量的跨产品特征转换来记忆特征交互是有效的和可解释的,而泛化则需要更多的特征工程工作。在特征工程较少的情况下,通过对稀疏特征的低维密集嵌入学习,深层神经网络可以更好地推广到不可见的特征组合。然而,当用户-项目交互稀疏且高阶时,嵌入的深层神经网络会过度泛化和推荐不太相关的项目。

本文提出了广度和深度学习联合训练的广度线性模型和深度神经网络,以结合推荐系统记忆和泛化的优点。

介绍

推荐系统可以看作是一个搜索排名系统,与一般的搜索排序问题类似,推荐系统的一个挑战是既要实现记忆又要实现泛化记忆可以粗略地定义为学习项目或特征的频繁出现,并利用历史数据中可用的相关性。另一方面,泛化是基于相关性的传递性,探索新的特征组合过去从未或很少发生过。基于记忆的推荐通常更具话题性,并且与用户已经执行过操作的项目直接相关。与记忆相比,泛化倾向于提高推荐项目的多样性。

本文主要研究Google Play商店中的应用推荐问题,但该方法应适用于一般的推荐系统。

在本文中,我们提出了一个广度和深度学习框架,通过联合训练一个线性模型组件和一个神经网络组件,在一个模型中实现记忆和泛化,如图1所示。

Wide & Deep Learning for Recommender Systems论文笔记

可以看到模型的结构是,左边是Wide部分,也就是LR线性模型,右侧是Deep部分即DNN, DNN中使用了Embedding层将输入进行映射到连续的Dense Vector从而进行训练。

LR模型

LR逻辑回归模型,一种经典的分类方法。 回归模型的输出是连续的,分类模型的输出是离散的

逻辑回归=线性回归+sigmoid函数(线性回归就是用一条直线来拟合自变量和因变量之间的关系)

Wide & Deep Learning for Recommender Systems论文笔记

如何把回归变成分类?

Wide & Deep Learning for Recommender Systems论文笔记
Wide & Deep Learning for Recommender Systems论文笔记
Wide & Deep Learning for Recommender Systems论文笔记

推荐系统概述

当用户访问app store时,将生成一个查询,其中可以包含各种用户和上下文功能。推荐系统返回一个应用程序列表(也称为印象),用户可以在其中执行某些操作,如点击或购买。这些用户操作以及查询和印象作为学习者的培训数据记录在日志中。

  • 第一步为检索,返回最匹配查询的项的短列表,通常是机器学习模型和人工定义的规则的组合。

  • 第二步为排序, 得分经常是P(Y|X),在特征向量x的条件下用户行为y的概率。

  • 特征向量x包括了用户特征(比如国家、语言、人口统计资料),上下文特征(设备、一天中的小时,一周中的哪一天)、展现特征(app 的存活时间、历史统计数据) 本文专注于排序模型。

Wide & Deep Learning for Recommender Systems论文笔记

WIDE & DEEP LEARNING

The Wide Component

Wide组件是一个泛化的线性模型
y=wTx+by=wTx+b y=wTx+by=wTx+b
y是预测值,x=[x1,x2,…,xd]x=[x1,x2,…,xd]是d维特征向量,w=[w1,w2,…,wd]是模型参数,b是bias。特征集包括原始的输入特征和转换后(cross-product transformation)的特征。

Wide & Deep Learning for Recommender Systems论文笔记

其中cki为一个boolean变量,如果第i个特征是第k个变换ϕk的一部分,那么为1; 否则为0。对于二值特征,一个cross-product transformation(比如:”AND(gender=female, language=en)”)只能当组成特征(“gender=female” 和 “language=en”)都为1时才会为1, 否则为0。这可以捕获二值特征间的交叉,为通用的线性模型添加非线性(显性的)

The Deep Component

Deep组件是一个前馈神经网络(feed-forward NN),。对于类别型特征,原始的输入是特征字符串(比如:language=en)。这些稀疏的,高维的类别型特征会首先被转换成一个低维的、dense的、real-valued的向量,通常叫做embedding vector。embedding的维度通常是O(10)到O(100)的阶。该embedding vectors被随机初始化,接着最小化最终的loss的方式训练得到该值。这些低维的dense embedding vectors接着通过前向传递被feed给神经网络的隐层。特别地,每个隐层都会执行以下的计算:

Wide & Deep Learning for Recommender Systems论文笔记

Joint Training of Wide & Deep Model

Wide组件和Deep组件组合在一起,对它们的输入日志进行一个加权求和来做为预测,它会被feed给一个常见的logistic loss function来进行联合训练。

注意,**联合训练(joint training)集成训练(ensemble)**有明显的区别。

这也暗示了模型的size:对于一个ensemble,由于训练是不联合的(disjoint),每个单独的模型size通常需要更大些(例如:更多的特征和转换)来达到合理的精度。相比之下,对于联合训练(joint training)来说,wide组件只需要补充deep组件的缺点,使用一小部分的cross-product特征转换即可,而非使用一个full-size的wide模型。

一个Wide&Deep模型的联合训练,通过对梯度进行反向传播算法、SGD优化来完成。训练中使用FTRL算法和L1正则做为Wide组件的优化器,对Deep组件使用AdaGrad。

对于一个logistic regression问题,模型的预测为:

Wide & Deep Learning for Recommender Systems论文笔记
Wide & Deep Learning for Recommender Systems论文笔记

SYSTEM IMPLEMENTATION

apps推荐的实现包括三个阶段:数据生成模型培训模型服务

Wide & Deep Learning for Recommender Systems论文笔记

Data Generation

在这部分,选取一个时间周期内用户和APP数据作为训练数据

Label:应用下载,当应用被下载,则为1,否则为0

Vocabularies:将类别特征映射为整数ID,连续的实数特征先映射到CDF,然后在做离散化

通过将特征值x映射到其累积分布函数P(X <= x),将连续的实值特征归一化为[0,1],将其分成nq个分位数。 对于第i个分位数中的值,归一化值是(i-1)/(nq-1)。 在数据生成期间计算分位数边界。

Model Training

Wide & Deep Learning for Recommender Systems论文笔记
连续特征并没有做embedding,但是类别特征做了embedding?

何时需要做embedding

比如,用户装了陌陌这个app,其实它意味着用户相关的信息量是很大的,对吧?肯定不止一维!若不做embedding,我们用0/1来表示是否安装,这样表示太粗糙了,很多信息未挖掘出来,泛化能力差。但若用了10维的embedding,不同的维度代表不同的含义,就很好。

而年龄这类特征,已经不能再分解了,它已经是***最细粒度***了。所以这些连续特征未做embedding。也可以认为,它已是一维embedding,然后与其他embedding 拼接成一个长向量。

连续归一化后,为什么还要分段处理?

这样做是粗粒化,为了增加泛化能力。

在训练过程中,我们输入的隐层获取训练数据和 vocabularies,生成稀疏和密集的特征并与 label 进行拼接。wide 部分包含用户展示和安装 APP 的 cross-product transformation,deep 部分,每个分类特征都是一个 32 维的向量进行学习。我们将所有 embedding 和密集的特征连接在一起,形成一个约为 1200 维的密集向量。然后将连接的向量输入3个 ReLU 层,最后输入到逻辑输出单元。

在这部分需要注意的点是,如果每一次都重新训练的话,时间成本很高,所以为了解决这个问题,当新的训练数据来的时候,我们使用热启动,**方法是从之前的模型中读取 embeddings 和线性模型的权重来初始化新模型。**同时,我们会使用之前的模型进行及安装检查,保证在接入实时流的时候不会出现问题。

Model Serving

利用接收到的数据,对每个应用程序进行评分。

为了在10毫秒的时间内满足每个请求,我们使用多线程并行来优化性能,方法是并行运行较小的批,而不是在一个批处理推断步骤中对所有候选应用进行评分。

实验结果

从应用程序获取和服务性能两个方面对系统进行了评估

App Acquisitions

进行了为期三周的A/B在线测试,抽取1%用户使用之前的wide模型(logistic regression + 很多cross-product feature transformations),1%用户使用新提出的wide & deep模型,1%用户只使用deep 模型(FNN + embeding特征和连续特征),其中实验结果如下:

Wide & Deep Learning for Recommender Systems论文笔记
从实验上看,离线的AUC,深度学习的不如linear model,wide&deep最好,在线的效果更加突出。

Serving Performance

Wide & Deep Learning for Recommender Systems论文笔记

实验结果表明, 使用多线程可有效缓解服务延迟。

结论

  • 记忆和泛化对于推荐系统都很重要。
  • wide线性模型可以通过交叉积特征变换有效地记忆稀疏特征的交互
  • 深度神经网络可以通过低维嵌入将其推广到以前未发现的特征交互。
  • 在线实验结果表明,广度和深度模型比广度和深度模型在应用程序获取方面有显著改善。

参考资料:CTR预估 论文精读(六)–Wide & Deep Learning for Recommender Systems
Wide Deep learning for recommender ststem
深度模型(八):Wide And Deep