Wide & Deep Learning for Recommender Systems

Reading time ~1 minute

摘要

具有非线性特征变换的一般线性模型被广泛用于具有稀疏特征输入的大规模回归和分类问题。 通过一个大的特征交叉乘积集合来记忆特征之间的交叉是非常有效并且可解释的,同时也意味着 我们需要做更多特征工程的工作。在使用更少的特征工程的情况下,深度神经网络一般可以通过从 稀疏的特征输入中学习低维的稠密embedding生成不可见的特征拼接。此外,通过Embedding,深度 神经网络可能过泛化,当用户和物品之间的交互非常稀疏并且秩较的情况下, 从而推荐出相关度较低的物品。

在本篇文章中,我们提出Wide&Deep学习模型,将训练一个宽的线性模型和深度神经网络相结合, 从而同时获得深度学习中的记忆和泛化的能力。我在一个具有上亿日活并且超过一百万的app 的商业手机软件Google Play上建立并且评估了我们的系统。 在线的结果显示相比于只使用wide模型和Deep模型的情况下, Wide&Deep明显地提高了app的购买率。当然,我们也有我们在TensorFlow中的模型实验。

介绍

一个推荐系统可以被看成是一个查询排序系统,系统的输入的查询序列是用户和场景信息的集合,输出 是被排序的物品的集合。给出一个Query,推荐系统的任务是找到数据库中相关的物品然后基于特定的 目标,例如购买和点击来对物品进行排序。

在推荐系统中面临的挑战和一般的搜索排序系统所要面对的问题是相同的,也就是我们需要如何实现记忆 和泛化。记忆可以松散地理解为学习物品之间的共同出现次数并且利用用户历史数据中的相关性。 另一反面泛化是基于相关地传递来探索以前从来没有出现或者是出现得很少的特征关联。 基于记忆的推荐通常来说更为热门并且一般来说跟用户的行为特性直接相关。与记忆相比泛化更趋向于 提高推荐结果的多样性。在这篇文章中,我们主要集中精力在Google play当中,但是我们的方法同样适用于 一般化的推荐系统。

对于工业界的大规模线上推荐和排序系统,广义的线性模型,如:逻辑回归等因其简单、可扩展并且可以解释 被大规模地使用。这样的模型通常在使用二进制编码的稀疏特征上进行训练。例如如果一个用户安装了Netflix 二进制特征user_installed_app=netflix的值等于1。记忆可以成功并且高效地利用稀疏特征上的交叉。 例如 AND(user_installed_app=netflix, impression_app=pandora)的值为1,表示这个用户安装了Netflix 然后给这个用户展示了了pandora。这解释了特征共现如何与目标的标签相关联。泛化可以通过使用更细粒度的特征 例如AND(user_installed_category=video, impression_category=music),但是这通常需要人工的特征工程。 特征交叉转换有一个缺陷就是没有办法查询在训练数据中没有出现的特征。

基于Embedding的模型例如因子分解机或者深度神经网络可以通过学习一个低维的稠密嵌入向量将 规律推广到没有出现过的query-item对,从而减少特征工程的工作量。然而,当query-item 的矩阵非常的稀疏并且维度很高的情况下,学习低维度的向量表示是非常困难的,例如具有特定偏好的用户 或者具有比较狭窄的用户兴趣的小众项目。在这种case的情况下,大部query-item的pairs里面基本 没有不会有交互信息,但是稠密的embedding对所有的query-items对会生成一个非0的结果。 因此这就会导致过度的一般化从而推荐出不相关的结果。同时在另外一方面,线性模型的特征交叉 转换可以通过更少的参数记住这些“期望的规则”。

在这篇文章中我们提出了Wide & Deep学习框架通过联合一个线性模型组件和一个深度模型组件 在一个模型里面实现模型的记忆和泛化,具体效果如图1所示。

在这篇文章中我们主要的贡献如下:

  • 对一般的具有稀疏特征的推荐系统我们提出了一种新的Wide & Deep学习框架, 在这种学习框架中我们将特征转换的线性模型和前馈神经网络的深度模型相结合。

  • 我们在Google Play这样具有上亿日活的app上实现并且评估了我们的Wide & Deep推荐系统。

  • 我们在TensorFlow的高阶API上有一个关于Wide & Deep的开源实现。

推荐系统回顾

在图2中给出了一个推荐系统APP的数据架构。当用户访问app store的时候, 在一个Query里面包含用户的场用户变量和场景特征。推荐系统返回一系列用户更有可能点击和购买 的app列表,用户关于这个queries的行为我们会在线上的日志里面记录下来,记录的日志也就是我们 模型训练过程中的数据。

因为在系统里面有上百万的app,在线上查询的时候对查询的性能有要求,没有办法对每一个结果 进行评分。因此,我们现需要执行一个检索操作。检索系统返回一个和Query最匹配的短列表。在 减小了候选池的大小之后,排序系统通过对所有物品进行打分然后对其进行排序。系统对物品的 打分为$p(y|x)$,表示给出用户特征(例如:国家,语言,人口统计特征)、场景特征(例如:设备、 小时,星期)和行为信息(例如:app使用年龄,一个app过去的行为统计历史)$x$的情况下,对用户 行为标签$y$的概率。在这篇文章中,我们主要将注意力集中在如何使用Wide & Deep Learning 构建排序模型。

广度 & 深度学习

广度组件

在模型框架中,广度组件就是一个广义的线性模型,形式为$y=\mathbb{w}^T\mathbb{x}+b$ , 如图1中左边的位置所示,$y$表示预测的结果,$\mathbb{x}=[x_1, x_2,…,x_d]$表示特征$d$ 维度的特征向量,$\mathbb{w}=[w_1, w_2, w_3,…,w_d]$表示参数,并且其中$b$表示偏置量。 特征集合包括原始的特征也包括转换之后的特征。最重要的特征转化就是使用$cross-product transformation$,具体的定义如下:

\[\phi(\mathbb{x}) = \prod_{i=1}^{d} x_i^{c_{k_i}} \;\;\;\;\;\;c_{k_i}\in\{0,1\}\]

##

系统实现

实验结果

相关工作

结论

腾讯广告MVKE实现多目标的用户画像建模

以House Price为例快速构建一个Base Line模型 Continue reading

召回部分代码重构

Published on September 29, 2022

Mind多兴趣召回

Published on September 26, 2022