(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

题目:用Uber Eats进行食物发现:使用图谱学习提出建议

原文链接:https://eng.uber.com/uber-eats-graph-learning/

 

Uber Eats应用程序作为门户网站,连接全球36个国家/地区的500多个城市的320,000多名餐厅合作伙伴。 为了使用户体验更加无缝和易于导航,我们预先向用户展示了他们可能喜欢的菜肴,餐厅和美食。 为此,我们之前开发了ML模型,以更好地理解查询,并在Uber Eats搜索和推荐系统中进行多目标优化,并在Uber Eats搜索和表面食物选项中进行推荐。

 

现有研究[1]显示了图学习方法对推荐任务的有效性。 将这一想法应用于Uber Eats,我们开发了图学习技术,以展示最有可能吸引单个用户的食物。 此方法可提高平台上我们的餐饮推荐的质量和相关性。

 

简单的聊一聊图学习

为了最好地了解我们如何使我们的Uber Eats建议更加准确,这有助于了解图形学习的工作原理。 通过学习节点的表示,可以对结构为图的数据执行许多机器学习任务。 我们从图学到的表示可以对图的结构属性进行编码,并且可以轻松地用于上述机器学习任务。 例如,为了代表我们的Uber Eats模型中的食者,我们不仅使用订单历史记录来提供订单建议,还使用过去的Uber Eats的订单记录、相似的用户来进行推荐。

 

具体来说,为了获得具有此类属性的表示形式,我们为图中的每个节点(用户,餐厅和食品)计算一个向量,以使节点向量相似度近似于图中两个节点之间的连接强度。 我们的目标是找到一个从节点到其向量表示形式(编码函数)的映射,以使图中结构相似的节点具有相似的表示形式。

 

对于我们的Uber Eats用例,我们选择了基于图神经网络(GNN)的方法来获取编码功能。 这种方法虽然最初是在1990年代末和2000年代初提出的[2,3],但最近已被研究界广泛用于各种任务[6,7,8],并且已被证明特别有效。 问题[1]。

 

GNN背后的基本思想包括使用神经网络以受限于一定深度的递归方式聚合相邻节点的表示,从而获得节点的表示,如下图1所示:

 

(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

假设我们将递归的深度限制为2,以获得图1中节点A的表示,我们首先从A开始执行广度优先搜索。接下来,我们在从A删除的两个步骤中获得节点的特征x 。通过聚合/池化功能对特征进行聚合,例如,通过取平均值并通过与学习的权重矩阵W(图中的PROJ W)进行矩阵乘法投影来获得一跳处节点邻域的表示。 与A的距离。

 

节点的邻域表示与node自身特征乘以权重矩阵B(图1中的PROJ B)进行矩阵乘法投影,并且这种组合形成了与节点A距离为一的节点的表示h。 递归地聚合和投影以得到节点A的表示,然后在递归的每个步骤中,使用新的矩阵W和B(图1中的W1和B1表示第1层,W2和B2表示第2层)。 以这种方式获得表示的主要优势在于,它既捕获节点A的属性,又捕获有关其邻域的结构信息,汇总有关节点A连接到的节点的信息,如下图2所示:

(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

 

图1 2的解释: 假设要得到A节点的embedding

  1. 先用A节点特征来初始化A的embedding 命名为hv(k-1),再和一个学习好(或者初始化)的Bk进行矩阵相乘;
  2. 把A节点的邻域节点BCD的embedding通过聚合函数(Uber用的是取平均),然后再和学习好(或者初始化)的Wk进行矩阵相乘
  3. 把 1 2 中得到的两个embedding相加,再过一个**函数,就得到了A的embedding

 

然后,我们使用节点表示法来预测两个节点之间存在连接的概率,并用loss来进行优化模型,从而使图中实际连接的两个节点的概率最大化,并使断开节点的概率最小。

 

GNN只需要不依赖于图的大小的固定数量的参数,从而使学习可扩展到大型图,尤其是遇到这种情况:需要计算一个特定节点的embedding,而且要对邻域节点进行采样。 此外,借助于其基本特征和连接关系,可以为新添加的节点引入表示。 GNN的这些功能支持有关Uber Eats的建议,该建议每天都会增加新用户,餐厅和菜肴。

 

在Uber上通过图学习进行菜和餐厅推荐

Uber Eats应用程序内有多个推荐界面,如下图3所示:

(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

在主供稿上,我们根据用户偏好为餐厅和菜单项生成推荐轮播。 浏览餐厅菜单时,我们还会针对该餐厅生成个性化的建议,以适合用户的口味。 这些建议是由经过过订单和用户偏好培训的推荐系统做出的。

 

Uber Eats推荐系统可以分为两个阶段:召回和精排。

 

候选者生成组件以可缩放的方式生成相关候选者,换句话说,是菜肴和饭店。 我们需要使此阶段具有高度可扩展性,以便能够在平台上对大量且不断增长的菜肴和餐厅选择进行预过滤。 可以根据地理位置等因素进行预过滤,因此我们不建议超出交付范围的用户使用餐厅。 菜肴和餐厅候选者也需要与给定的用户相关,以确保我们不会过滤掉他们想要的物品。

 

该系统的第二个组件是个性化排序器,它是一个成熟的ML模型,它基于其他上下文信息(例如用户的时间,日期和时间,当他们打开时的当前位置)对预先过滤的菜肴和餐厅候选者进行排名 Uber Eats应用程序。 该模型可以学习捕获的重复订购模式的示例包括在一周的特定日期订购某些类型的食物,或在午餐和晚餐时订购不同类型的菜肴。

 

为了使用GNN改善Uber Eats的建议,我们创建了两个两部分图:一个将用户和菜品表示为节点,边表示用户订购特定菜品的次数,第二个图将用户和餐厅表示为节点,代表用户从特定餐厅点餐的次数。

 

我们选择GraphSAGE [4],这是GNN的一种特殊风格,其中聚合函数是投影后的最大值或均值池,因为它具有强大的可伸缩性,因此是我们建模的起点。 在该GNN中,节点信息和邻居信息的组合是通过级联进行获得。 此外,GraphSAGE采用一种采样策略来限制与我们要获取表示形式的节点之间在一跳和两跳距离处采样的节点数量,从而有可能将学习扩展到具有数十亿个节点的图,并提供更好的建议 。

 

为了将GraphSAGE应用于我们的二部图,我们必须以几种方式对其进行修改。 首先,由于每种节点类型可能具有不同的特征,因此我们需要向GNN添加一个额外的投影层。 该层将输入要素投影到具有相同大小的矢量中,具体取决于输入节点的类型(用户,餐厅或菜肴)。 例如,由于菜肴可以通过菜品名称/图像的嵌入进行表达,并且餐厅可以具有与其菜单和美食产品相关的基本特征,因此其特征尺寸不同,但是投影层需要对其进行投射 在相同大小的空间中。

 

此外,GraphSAGE仅考虑具有二进制边的图,但是在我们的情况下,需要对边进行加权以包括有关用户从餐厅或特定菜肴点菜的次数以及用户对菜肴的评分等信息。 这些是非常重要的信号。 对于此问题,我们引入了一些新概念来增加边缘的权重。 最有影响力的变化是采用hinge loss,这种损失比使用二进制边缘更适合于相对于用户的商品排名。

(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

给定用户u至少点餐一次,该图中存在它们之间的加权边。 如果我们对这对节点预测的分数,高于我们对同一节点u和未与之连接的随机选择的节点n(用户从未订购过的菜)的预测分数, 两个预测分数的差值应该大于我们的设定值。

 

这种损失的问题是,高权重的边缘和低权重的边缘可以互换使用,考虑到用户订购一次的菜肴和用户订购十次的菜肴之间的差异,这种做法效果不佳。 因此,我们在损失中引入了low-rank positives的概念。

 

(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

 

(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

上面的图4,展示了一个loss公式应该如何计算的实际例子。给定2个正样本<u,v>、<u,l>,其中u是一样的用户,u和l之间的权重比u和v的小,我们在loss公式中添加了第二段计算loss的公式来确保具有更大权重的边的node要比更小的node排序更高(设置了更小的默认值,这个默认值要比第一个loss公式中的小vc),这两个超参数控制了loss中两个公式的占比。

 

最后,我们还在汇总和采样函数中使用了权重。

 

一旦我们使用训练好的GNN获得了节点的表示,就可以使用节点表示之间的距离来近似它们之间的相似性。 具体来说,我们将user和item的点乘和余弦相似度作为特征,并对它们进行了离线和在线测试以确定其准确性。

 

为了评估嵌入对于我们的推荐任务有多大用处,我们使用了四个月的历史数据(直到特定的分割日期)对模型进行了训练。 然后,我们使用拆分日期后十天内的订单数据测试了推荐菜肴和餐厅的模型性能。 具体来说,我们计算了用户与城市中所有菜肴和餐厅的余弦相似度,并计算了用户订购的菜肴和餐厅的排名。 在实验过程中,我们发现在Precision @ K和NDCG等指标上,与现有生产模型相比,性能提高了20%以上。

 

通过使用图学习训练的嵌入获得的改进性能使我们确信,可以将其添加为Uber Eats推荐系统的个性化排名模型中的特征。 当我们使用图学习的嵌入相似性功能训练个性化排名模型时,与现有的生产基线模型相比,AUC增长了12%,从而为用户提供了更好的建议。

 

此外,通过分析该功能对我们的预测的影响,我们发现图学习相似性功能到目前为止是推荐模型中最具影响力的功能。 这使我们充满信心,图学习的嵌入比我们系统中的任何现有功能捕获的信息更多,如下图5所示:

 

(翻译)用Uber Eats进行食物发现:使用图谱学习提出建议

 

鉴于离线结果,我们很乐意通过在线实验推出新模型。 我们在旧金山进行了A / B测试,与以前的生产模型相比,利用图学习功能时,参与度和点击率得到了显着改善,表明我们的模型预测的表面菜肴对Uber Eats用户更具吸引力 。