使用深度学习来做推荐系统,举个例子给你看

用一个完整的例子告诉你,推荐系统是什么样的一个东西,深度学习该怎么用在里面。

作者:Marcel Kurovski

编译:ronghuaiyang

导读

用一个完整的例子告诉你,推荐系统是什么样的一个东西,深度学习该怎么用在里面。

使用深度学习来做推荐系统,举个例子给你看

找到一辆符合你喜好的车是一项非常耗时的任务,可能会让你发疯。另一方面,在我们的平台上大约有150万辆汽车,不断变化的车辆描述和仍在探索的用户可能也会让我们成为疯狂的解决方案提供商。在这种情况下,根据用户的偏好来匹配汽车是很有挑战性的,当你找到匹配的汽车时,你的完美汽车可能已经不见了。

使用深度学习来做推荐系统,举个例子给你看

来自Amazon,NetflixSpotify的推荐样本

即使你还没有搜索过汽车,你也可能在其他领域遇到过类似的问题,比如新闻、消费产品或娱乐。在Spotify上,在你开始享受音乐之前,你不喜欢明确地列出你的音乐品味。你也不想搜索整个IMDB来在Netflix上找到你下一部最喜欢的电视剧。可能性的绝对数量造成了选择的负担。我们不能在做决定之前手工收集所有的信息。我们希望决策支持是顺畅的、个性化的,特别是我们希望它是自动的。

人们倾向于归咎于“信息超载”,即大量信息侵入我们的大脑,需要快速准确的处理。但还有另一种观点。2008年,纽约大学教授Clay Shirky说:“这不是信息过载,而是筛选失败。“在mobile.de,这就突现出我们试图达到的目标:提高我们的筛选水平来帮助你从信息过载中逃离,帮助你迅速找到合适的车,不需要任何的麻烦。

为了做到这一点,我们使用了一个“推荐系统”,从数十亿的互动和数百个特征中推断出用户的偏好,从而得出个性化的推荐。下图显示了这一推理:我们使用通过数字化变得强大的技术来解决作为数字化副产品的感知信息过载问题。

使用深度学习来做推荐系统,举个例子给你看

一点背景知识

在我们深入讨论细节之前,我们需要先做好准备,澄清一些基本词汇:

推荐系统的三个基本数据源是usersitems和它们之间的interaction,交互可以是“隐式”的,也可以是“显式”的。隐式交互在没有表达偏好或忽略意图的情况下发生,而显式交互则有意地反映偏好。例如,点击特定的汽车广告或为它们做书签,主要是一种隐含的信号,因为用户的主要意图不是对它们进行评级,例如在亚马逊(Amazon)购买的产品上加星。不过,我们可以放心地假设,你对你联系的经销商的汽车有强烈的偏好。我们将一组用户U和一组条目I之间的交互存储在评级矩阵R中,如下所示这个矩阵有m行表示用户,n列表示项目。每个条目(i, j)包含特定的交互。这里我们区分视图、书签和邮件。

使用深度学习来做推荐系统,举个例子给你看

根据反馈的类型,这些矩阵是一元的,这意味着我们只有一个表示反馈的正值,比如“1”。所有未观察到的反馈都会使条目为空。我们曾经将已知的矩阵项表示为额定值。此外,这些矩阵通常非常稀疏,这意味着很大一部分(通常为> 95%)的矩阵是空的。猜猜亚马逊提供了多少产品,而你点击或购买的产品又有多少。

除了关于交互的信息,我们还有关于交互实体(用户和物品)的数据。物品带有某些特征,分析用户-物品交互可以让我们根据用户对这些特征的偏好得出结论。例如,我们可以推断出用户最喜欢的汽车制造商。还可能有一些特定于用户的特征,比如用户的设备或年龄。我们可以利用这些信息来改进我们的建议。

但是推荐的真正目的是什么呢?推荐系统的基本目标是根据之前的交互和特征来预测未来的用户—物品交互。参考上面的图片,我们想量化问号,看看用户接下来最有可能看到哪辆车。这个目标被表示为建议的“相关性”,只是许多类似于可信度、多样性或健壮性的目标之一。可扩展性是另一个重要的面向生产的目标,它迫使我们快速(在几十或几百毫秒内)向许多用户提供建议。如果你需要在等待的时候喝杯咖啡,完美的推荐并不重要。

使用深度学习来做推荐系统,举个例子给你看

在推荐系统中实现这些目标的标准技术是协同过滤(CF)。CF使用物品或用户之间的相似性来找到合适的物品进行推荐。在基于模型的CF中,我们使用矩阵分解来寻找表示用户和物品的密集矩阵,然后这些用这些用户和物品重新构造原始的评级矩阵。因此,我们为用户和物品提供了低维度的表示,我们可以利用这些表示进行预测。因子分解增加了稀疏矩阵的信息密度。在车辆推荐实验中,我们分析了10万用户和近170万辆车之间的大约800万个评分。这相当于10万次互动中有5次。从这些稀疏的信息中获得深刻的见解是相当具有挑战性的。

但“稀疏性”只是一个问题,另一个问题是,我们通常不知道该向初次访问的用户推荐什么。例如,请参见上图中的第四个用户,他没有与我们的任何汽车进行交互。这就是所谓的“冷启动”问题。为了应对这一挑战,基于内容的过滤 (CBF)技术得到了发展,它利用了用户和物品的特征。这使得推荐系统对缺失的交互信号不那么敏感。但是推断用户对物品特征的偏好仍然需要它们,我们稍后将对此进行探讨。一般来说,关于用户和物品的上下文信息给了我们一些线索,但仍然有一些依赖关系。

然而,将交互和基于内容的信息结合起来可能会更加强大。我们称结合不同技术的推荐:混合推荐

我们知道了推荐系统的基本词汇,但由于这是关于深度学习的,我们需要更深入。

深度学习来做车辆推荐

使用深度学习来改进车辆推荐,我们有两个基本目标:

  1. 提高推荐的相关性
  2. 可扩展的方式提供推荐

我们必须根据观察到的交互和用户/物品特征来估计偏好。让我们提炼任务:

给定一个用户u和一个条目i,我们计算一个作为首选项的代理的分数。这意味着高分反映了高偏好,反之亦然。这个分数允许我们根据给定用户的相关性对一组物品进行排序。分数可以是用户与某项交互的概率。因此,我们的目标是预测用户—物品交互的概率。为了计算这个概率,我们使用一个只有一个输出单元的深度神经网络。该单元使用sigmoid函数进行激活,生成区间(0,1)的输出值,因此我们可以将网络输出解释为概率,并将其用于排序。然后,该网络被训练来区分偏好和忽视。因此,我们用1标记所有正的user-item组合,用0标记负的user-item组合。因此,学习任务表现为二分类任务。出色地完成这项任务可以提升我们各项推荐的相关性。

使用一种简单的方法,我们计算所有可能的用户—项目组合的这些概率。基于此,我们将选择k个最高概率的物品,并将它们作为个性化推荐呈现给用户。由于推荐场景中有大量的用户和物品,这实际上是不可行的。我们需要找到一种计算成本低、速度快的方法,将物品的搜索库缩小到每个用户的候选集,这些候选集仍然包含可能相关的项目。因此,我们使用近似最近邻搜索来提升我们的深度学习方法。我们在用户和物品的密集表示上执行搜索,这要求我们在第一步中创建它们。在此基础上,利用近似近邻搜索可以快速地找到合适的候选对象,从而使系统具有良好的可扩展性。

传统的技术,如CF或CBF,使用线性技术计算这些分数,而这些线性技术无法预测潜在的非线性模式。为了捕捉这些非线性,我们建立了更复杂的学习模型。最终,我们希望实现相同的目标,但是“只是”更改底层模型。该模型将近似最近邻搜索生成的候选与二值分类相结合进行排序。

用户和物品表示(特征值的集合)提供了实值、高维和高度稀疏的向量。首先,我们需要解决以下任务:

  1. 嵌入
  2. 候选物品的生成
  3. 排序

我们在整个模型中解决所有这些任务。但这只是我们方法的一部分,另一部分是我们如何处理数据。因此,在继续使用模型之前,我们需要先将数据对齐。

数据和一个关于用户偏好挖掘的小故事

在第一步中,我们选择用户和物品共同的特征。我们将这些特性分为连续特征(如车辆价格或里程)和类别特性(如颜色和车辆类型)。我们进一步定义了训练和测试模型的时间段。现在,我们获取在这些时间内发生的所有事件,以及当时有效的相应物品特征。

通过这样做,我们可以专注于每个用户的事件和相关物品。这允许我们将用户首选项确定为关联物品特征的组合。通过计算用户查看的所有车辆的均值和标准差,我们可以了解用户喜欢的价格范围,以及用户如何在价格和里程之间进行权衡。我们可以使用贝叶斯方法来构建这些用户表示,从而为用户设计出与汽车相同的特征。尽管它们涉及相同的概念,但用户表示是随机的,而车辆表示是确定的。例如,下图显示了一个概要文件,其中用户查看了五辆车。其中两个是黑色的,两个是灰色的,一个是红色的。这显示了对颜色的偏好,这反映在概率分布上。对于像价格这样的连续特征,我们也可以这样做。取与用户交互的车辆的平均值和方差,我们就可以估计出用户喜欢的价格范围。汽车可以是黑色、白色或灰色,而且只有一个价格。

使用深度学习来做推荐系统,举个例子给你看

我们现在可以基于用户过去的交互创建一个表示。

由于设置了用户和物品集合,我们需要针对交互本身。我们选择了一种二分类方法来简化这个问题。因此,我们将所有观察到的交互作用都标记为1来表示偏好。由于我们缺乏负反馈信号,我们用一种称为“负采样”的技术,从正样本中人为地生成它们。结果,我们观察到的带正号的相互作用和带负号的相互作用是一样多的。现在,我们准备做得更深入一点。

偏好预测模型

整个网络由三个子网组成,如下图所示:UserNetItemNetRankNet。这些网络被联合起来共同训练。然后,我们将它们分割为能够在生产中提供建议的整体架构。

使用深度学习来做推荐系统,举个例子给你看

1. 嵌入

UserNetItemNet 将稀疏的用户和物品表示为密集的嵌入eᵤ 和 eᵢ。因此,它们通过压缩信息来极大地降低了维度。虽然嵌入式失去了人类的可读性,但是我们从后一个过程中受益,因为它们的内存效率更高。由于表示形式不同(随机用户和确定的物品),但涉及相同的特征,所以我们使用单独的网络。

通过这些方便的用户和物品表示,我们开始为给定用户分配好的物品(嵌入)。这个过程分为两部分,包括从整个语料库生成一个物品子集,并对这些候选物品进行排序.

2. 候选物品生成

为了快速找到可能与用户相关的候选物品,我们使用近似最近邻搜索。从用户嵌入查询开始,我们可以有效地获取特定距离度量的T个最近的物品,例如余弦或欧式距离。这些几何上相似的候选物品为我们提供了一个很好的选择。我们使用此技术是因为对所有可用物品进行排序在计算上过于复杂。近似最近邻搜索成为可扩展性的关键。

有很多实现,包括Yahoo提供的Locally Optimized Product Quantizations(LOPQ)或Spotify提供的Approximate Nearest Neighbor Oh Yeah (ANNOY)。

3. 排序

由于我们现在为用户提供了T个候选物品,所以我们可以使用RankNet为每个候选项打分。最后,我们只是按分数递减的方式对候选项进行排序,然后选出最有希望的候选物品。然后将这些物品作为推荐,并取得了显著的成功。

使用深度学习来做推荐系统,举个例子给你看

上面的步骤描述了推理过程。训练模型非常类似,只是没有额外的候选项的生成。

结果

大量的数据预处理、高强度的建模和一些花哨的TensorFlow调试最终取得了成功,并取得了显著的效果。为了比较我们的方法,我们使用不同的传统方法作为基准,并用网格搜索确定正确的参数。我们推荐LightFM作为不同传统推荐技术的轻量级实现。这让我们能够专注于深度学习部分。

我们选择了纯CF和混合推荐器,结合CF和CBF作为基线。我们使用mean average precision @k (MAP@k)来测量相关性。

我们使用不同的k查看评估,而k=5最接近我们在mobile.de中的用例。在这种情况下,深度学习推荐器的性能比传统CF高出近143%。我们还将强大的混合推荐器提高了73%。查看下图中的总体结果,有人可能会说,MAP@5的约1.05%看起来不是很好,但有两点值得注意。首先,考虑到数据的巨大稀疏性、我们对小时间跨度和有限用户子集的限制,绝对值的范围被人为地保持在较低的水平。其次,重要的一点是相对增长,这相当于推荐相关性翻倍了。

使用深度学习来做推荐系统,举个例子给你看

但相关性只是硬币的一面。尽管还有许多其他目标,但是这里特别关注的是“可扩展性”。由于有了候选项集合,我们能够在几十毫秒内生成相关的推荐,并扩展到数百万用户和物品—尽管不断更新的车辆特征使这一点变得困难。

结论

我们看到,深度学习是实现更好的个性化服务的伟大工具。在mobile.de,我们目前正在将我们的方法投入生产,以帮助我们的客户快速找到他们理想的汽车。使用TensorFlow service,可以方便地为生产中的模型提供服务,并顺利地修改它们。我们还考虑将该模型用于其他目的,比如改进搜索结果,利用用户信息提高搜索结果的相关性。用阿兰·图灵的话来说:“我们只能看到前方很短的距离,但我们可以看到很多需要做的事情。“

英文原文:https://ebaytech.berlin/deep-learning-for-recommender-systems-48c786a20e1a

本文为专栏文章,来自:AI公园,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/66256.html 。

(0)
上一篇 2019-09-16 21:07
下一篇 2019-09-17 21:35

相关文章

关注我们
关注我们
分享本页
返回顶部