使用嵌入来构建一个推荐系统

编译:ronghuaiyang

导读

这是一篇实战型的文章,介绍了一个真实的公司里是如何使用嵌入来做推荐系统的。

使用嵌入来构建一个推荐系统

动机

Drop的生态系统的核心是两个关键实体:我们的成员和合作伙伴品牌。我们在Drop的重点是提供卓越的价值和持续赢得他们的信任。是什么让我们能够确定成员和合作伙伴之间的关系,并同时交付价值?数据!

数据科学和机器学习的团队最近建立了一个推荐系统模型,用来提升“为你推荐”功能应用。使用我们的会员委托我们与他们的交易的数据(我们非常重视保护这些数据),我们能够帮助他们更快的进入到他们喜欢的品牌那里。此外,我们还可以帮助他们发现他们不会接触的品牌,从而丰富他们的购物体验。对我们合作伙伴的影响:通过吸引到的客户和忠诚客户来提升收入。

使用嵌入来构建一个推荐系统

我们这个推荐系统的基本构成

模型的输入是一个“会员足迹”数据集:对于每个成员,我们有一个指定时间范围内所有会话的列表。每个会话都有元数据,其中包括品牌名称。

使用嵌入来构建一个推荐系统

基于会话的两个会员足迹数据

模型的输出是一个“品牌推荐”数据集:对于每个会员,我们有一个n个品牌的排名列表。排名靠前的品牌代表该会员接下来最有可能购物的商店。

使用嵌入来构建一个推荐系统

两个会员的推荐内容样本

团队尝试了几个模型,其中都涉及到学习嵌入来代表我们平台上的成员和品牌。最后,我们决定将序列模型部署到生产环境中,因为它实现了跨关键指标的最佳性能。在我们开始深入研究模型的细节之前,让我们先试着对嵌入是什么以及它们在推荐系统上下文中为什么有意义有直观的认识。

嵌入

什么是嵌入?

嵌入是一种使用学习向量表示实体的方法。简单地说,它是离散对象到连续数字序列的映射。给定足够的数据,我们可以训练一个算法来理解实体之间的关系,并自动学习表示它们的特征。这种自动化方法非常强大,因为它允许我们更容易地扩展。对于Drop这样的平台,随着新实体不断地添加到我们的系统中,能够可扩展是最重要的。

为了帮助理解嵌入,让我们看看如何在我们的平台上表示品牌。

品牌嵌入

品牌嵌入是品牌到连续数字向量的映射。下面是品牌的例子,每一个都映射到一个8维向量:

使用嵌入来构建一个推荐系统

从品牌映射到向量

每个向量对应一个算法已经学会的品牌特征或属性。例如,它可能已经学习了“食物”的概念,并将此信息编码到向量的第一个维度中。在给定的维度中,一个较大的数值表示该品牌强烈地显示了该特征。我们看到Uber Eats(0.96)、Foodora(0.92)和Costco(0.86)就是这样的情况,我们知道这些品牌与食品有关。学习特征的另一个例子可能是“服务”的概念,算法可能将其编码在向量的第二个维度中。请注意Uber Eats(0.98)和Foodora(0.94)的高价值,它们都是外卖服务,Lyft(0.96)是拼车服务。

“食物”和“服务”的概念似乎是描述向量的前两个维度的合理选择。然而,在实践中,很难解释这些学习到的特征实际上代表什么。对于我们的特定用例,这不是一个需要关注的问题,因为所学习的嵌入的好处远远大于可解释性方面的损失。除了可扩展性之外,品牌嵌入的一个主要优势是可以用来比较品牌之间的相似性。这在推荐系统的上下文中是有用的,因为它允许我们仅通过识别与他们之前互动过的品牌相似的品牌就可以向我们的成员提供推荐。

具体来说,考虑到用户过去曾在Uber Eats上点过餐,我们可以通过寻找与Uber Eats相似的品牌来进行推荐。从直觉上看,这意味着要识别嵌入类似Uber Eats的品牌。绘制品牌嵌入的前两个维度,我们将看到彼此相似的品牌更接近,而不同的品牌则相距更远。在这个例子中,最接近Uber的品牌是Foodora,因此也是最相似的。

使用嵌入来构建一个推荐系统

相似的品牌靠的近

会员嵌入

我们可以利用所学的品牌嵌入来为我们的会员找到特征表示。虽然品牌嵌入编码了品牌显示某些属性的程度,但是可以构造成员嵌入来反映成员对这些属性的偏好。给定一个倾向于订购食物的成员,我们可以期望他们的表示编码对“食物”和“服务”等特性的强烈偏好。换句话说,我们希望这个会员在这两个特征上平均得分高。

为了说明这个观点,我们假设这个成员的足迹如下所示,品牌嵌入的前两个维度对应于“食物”和“服务”:

使用嵌入来构建一个推荐系统

会员足迹的样本

表示该成员的一种方法是取其成员足迹对应的品牌嵌入的平均值。例如,为了量化他们对“食物”的偏好,我们可以取嵌入的第一个维度,计算平均值如下:(0.96 + 0.92 + 0.86 + 0.96)/ 4 = 0.93。将相同的方法应用于“服务”维度,该成员的结果表示为向量(0.93 0.62)。考虑到上述成员的经历,这种代表性是有意义的,因为所有四个品牌都是“食品”品牌,除了Costco以外,所有品牌都是“服务”品牌。

使用点积度量相似度

现在我们有两组嵌入,其中对应的维度表示相同的特征。要了解一个成员对给定品牌的喜爱程度,我们只需量化其嵌入之间的相似性。一种方法是计算它们的点积。回想一下,给定两个n维向量a和b,其中:

使用嵌入来构建一个推荐系统

它们的点积定义为:

使用嵌入来构建一个推荐系统

直观地说,对应特征的值越高,成员识别品牌的可能性就越大。下面是一些具体的例子,展示了我们之前计算过的会员嵌入与Uber Eats和Costco品牌嵌入之间的点积:

使用嵌入来构建一个推荐系统

计算点积

根据得到的dot产品,我们可以得出这样的结论,会员更喜欢优步而不是Costco。将嵌入中的成员叠加起来,我们可以看到它确实更接近Uber Eats,而不是Costco。

使用嵌入来构建一个推荐系统

在相同的空间中映射品牌和成员嵌入

序列模型

介绍

如前所述,我们在生产中部署了一个序列模型,以便为我们的成员提供品牌推荐。简而言之,我们的模型利用了会话数据的顺序特性,并将生成建议视为一个序列预测任务。具体地说,给定一个成员之前购物过的品牌序列,该模型预测该成员最有可能与之交互的下一个品牌。在这个框架下,我们的模型是使用一个神经网络来实现的,它的目标是学习嵌入来代表我们平台上的品牌。

训练

训练过程的目标是使用我们的成员足迹数据集作为输入来学习一组品牌嵌入。回想一下,对于每个成员,这个数据集包含一个序列,表示他们以前购买过的品牌。算法的任务是预测每个成员序列中的下一个品牌。显式地,对于以下序列:

使用嵌入来构建一个推荐系统

该算法对以下每一个子序列进行预测:

使用嵌入来构建一个推荐系统

为了让算法学习,我们需要一种方法让它知道它在执行任务时的表现。具体来说,它需要知道什么时候的预测是错误的,这样它就可以对迄今为止所学到的品牌嵌入做出适当的调整。这就引出了损失函数的概念,它是一种量化算法在给定学习任务的情况下表现好坏的方法。


从概念上讲,对于我们的序列预测任务,我们想要的只是算法为与下一个交互的成员的品牌计算一个比没有交互的更高的分数。前者被称为“positive”例子(即:实际发生了什么),后者被称为“negative”例子。理想情况下,我们希望算法始终将positive样本的排名高于negative样本。为了推广这类排名,我们选择了Bayesian个性化排名损失函数来训练我们的模型:

使用嵌入来构建一个推荐系统

回想一下sigmoid函数,当x大时sigmoid(x)接近1,当x小时接近0。因此,当正样本的得分大于负样本的得分时,损失最小化(即:算法运行良好)。当损失较大时,我们需要通过调整品牌嵌入值来纠正算法的错误。

推理

使用我们的序列模型进行预测很容易。考虑到以下会员足迹,我们的目标是预测下一个最有可能与之互动的品牌:

使用嵌入来构建一个推荐系统

一旦了解了品牌嵌入,我们只需将成员表示为与他们之前交互过的品牌相对应的嵌入的平均值(回想一下“member embeddings”)。然后,我们在我们的平台上获取每个品牌的学习嵌入,并用派生的成员嵌入计算它们的点积(回想一下“用点积度量相似性”)。从这一点开始,它就变成了一个排名练习,其中得分最高的品牌代表该成员最有可能与之互动的下一个品牌。注意,我们为平台上的每个成员执行这些计算。


可视化品牌嵌入

为了可视化序列模型学习到的品牌嵌入,我们需要将8维向量映射到更低的维度空间,以便可以绘制它们。实现这一点的一种方法是使用降维技术,比如t-SNE。

为了进一步了解,我们突出显示了以下集群:

使用嵌入来构建一个推荐系统

加拿大人,旅行和宠物集群

产生的影响

使用我们的会员委托给我们的数据,我们能够通过优化他们在我们平台上的体验来提供价值。通过展示相关品牌,我们可以帮助他们更快地获得积分,从而让他们更接近于兑换下一个奖励。对于我们的合作伙伴来说,附加值是一个不断增长的消费者群体,具有强大的品牌亲和力。

在公司内部,学习到的品牌嵌入已经成为Drop各种计划不可或缺的一部分。他们正在利用的一些领域包括我们的产品入驻流程,有针对性的营销沟通,以及为我们的业务开发团队生成领导。

未来的方向

虽然我们的现有模型取得了显著的成绩,但我们的团队很高兴能探讨进一步加强我们的推荐系统的想法。一些最初的想法围绕着使用时间信息作为模型的输入,以及利用我们通过Drop应用程序从成员那里收到的显式反馈(例如:点击推荐人提供的内容)。也有可能利用与品牌和产品相关的文本和图像数据来构建混合推荐模型。

英文原文:https://drop.engineering/building-a-recommender-system-using-embeddings-de5a30e655aa

使用嵌入来构建一个推荐系统


分享到:


相關文章: