Graph Convolutional Neural Networks for Web-Scale Recommender Systems

基于图卷积神经网络的web规模推荐系统

摘要

        图结构数据的深度神经网络的最新进展,给推荐系统基准测试带来了先进的性能。然而,如何使这些方法切实可行并可扩展到具有数十亿条目和数亿用户的网络推荐任务中仍然是一个挑战。在这里,我们描述了一个我们在Pinterest开发并部署的大规模深度推荐引擎。我们开发了一种数据高效的图卷积网络(GCN)算法PinSage,它结合了高效的随机游动和图卷积来生成包含图结构和节点特征信息的节点(即项目)的嵌入。与现有的GCN方法相比,我们开发了一种基于高效随机游动的新方法来构造卷积,并设计了一种新的训练策略,该策略依赖于越来越难的训练实例来提高模型的鲁棒性和收敛性。我们在Pinterest上部署了PinSage,用75亿个例子训练它,这个图有30亿个节点代表大头针和板子,还有180亿个边。根据离线指标、用户研究和A/B测试,PinSage比类似的深度学习和基于图形的替代品产生更高质量的推荐。据我们所知,这是迄今为止深度图嵌入的最大应用,并为基于图卷积架构的新一代网络推荐系统铺平了道路。


1.引言

        深度学习方法在推荐系统应用中扮演着越来越重要的角色,它被用于学习有用的图像、文本甚至个人用户的低维嵌入。

        近年来,这一领域有了重大的发展——特别是能够学习图结构数据的新型深度学习方法开发,这是推荐应用程序的基础(例如,利用用户到商品的交互图和社交图)。

        在这些最新进展中,最突出的是深度学习架构的成功,即图卷积网络(Graph Convolutional Networks, GCNs)。GCNs背后的核心思想是学习如何使用神经网络从局部图邻域聚合迭代出特征信息(如图一所示)。在这里,一个单一的“卷积”操作从节点的单跳图邻域转换和聚合特征信息,并且通过叠加多个这样的卷积,信息可以在图的远端传播。与纯粹基于内容的深度模型(例如,循环神经网络)不同,GCNs利用了内容信息和图结构。基于GCN的方法已经在无数的推荐系统基准测试中建立了一个新的标准。然而,这些在基准测试任务上的收获还没有转化为在实际生产环境中的收获。

        目前主要的挑战是将基于GCN节点嵌入的训练和推理扩展到具有数十亿节点和数百亿边的图。扩展GCNs是很困难的,因为在大数据环境中工作时,它们设计的许多核心假设都被违反了。例如,所有现有的基于GCN的推荐系统都需要在训练过程中对全图进行拉普拉斯操作——当底层图有数十亿个节点且其结构不断演化时,这个假设是不可行的。

Graph Convolutional Neural Networks for Web-Scale Recommender Systems_第1张图片

图一  使用双层深度卷积的模型架构概述

目前的工作。在这里,我们展示了一个高度可扩展的GCN框架,我们在Pinterest开发并部署。我们的框架是一个名为PinSage的基于随机游走的GCN,它运行在一个具有30亿个节点和180亿个边的庞大图上——这个图比GCNs的典型应用程序大10,000倍。PinSage利用几个关键的见解来大幅提高GCNs的可伸缩性:

        动态卷积:传统的GCN算法通过将特征矩阵乘以全图Laplacian的幂来执行图的卷积。相比之下,我们的PinSage算法通过对节点周围的邻域进行采样,并从这个采样的邻域动态地构建一个计算图,从而执行高效的局部卷积这些动态构造的计算图(如图一所示)指定了如何围绕特定节点执行局部卷积,并减少了在训练期间对整个图进行操作的需要。

        小批量构建生产者-消费者架构:我们开发了一个生产者-消费者架构来构建小批量,以确保在模型训练期间GPU利用率最大化。大内存、CPU约束的生产者高效地对节点网络邻居进行采样,并获取必要的特征来定义局部卷积,而GPU约束的TensorFlow模型使用这些预定义的计算图来高效地运行随机梯度下降。

        高效的MapReduce推理:给定一个完全训练过的GCN模型,我们设计了一个高效的MapReduce通道,可以分发训练过的模型,为数十亿个节点生成嵌入,同时最小化重复计算

除了这些在可扩展性方面的基本进步,我们还引入了新的训练技术和算法创新。这些创新提高了PinSage学习的表示的质量,在下游推荐系统任务中显著提高了性能:

        通过随机漫步构造卷积:取节点的全邻域来执行卷积(如图一所示)将产生巨大的计算图,因此我们求助于抽样。然而,随机抽样是次优的,因此我们提出了一种利用短期随机游走对计算图进行抽样的新方法。另一个好处是,这样做后每个节点都有一个重要分数,我们在池化/聚合步骤中使用这个分数。

        重要汇聚:图卷积的核心部分是图中局部邻域特征信息的聚合。我们引入了一种基于随机游走相似度度量的方法来衡量节点特征在该聚合中的重要性,从而在离线评估指标中提高了46%的性能。

        训练:我们设计了一个训练过程,在这个过程中,给算法提供越来越难的例子,结果获得了12%的性能增长。

        Pinterest是一个很受欢迎的内容发现和管理应用程序,用户可以与pin互动,pin是在线内容(例如,他们想做的食谱,或者他们想购买的衣服)的视觉书签。用户将这些pin集成板块,其中包含类似pin的集合。总之,Pinterest是世界上最大的用户管理的图片图表,有超过20亿枚独特的pin收集到超过10亿个的板块中。

        我们表明,与其他可扩展的基于内容的深度推荐算法相比,我们的方法在项与项的推荐任务(即相关pin推荐)以及 "主页 "推荐任务中都实现了最先进的性能。在离线排名指标中,我们比表现最好的基线提高了40%以上;在头对头的人工评估中,我们的推荐在大约60%的时间里被优先考虑;A/B测试显示,在各种设置中,用户参与度提高了30%到100%。

        据我们所知,这是迄今为止深度图嵌入的最大应用,并为基于图卷积架构的新一代推荐系统铺平了道路。


2.相关工作

        图数据的神经网络概念首先在Gori et al.(2005)中提出,并在Scarselli et al.(2009)中进一步阐述。然而,这些在图上进行深度学习的初始方法需要运行昂贵的神经“消息传递”算法来收敛,而在大型图上的代价则高得令人望而却步。门控图序列神经网络解决了一些限制,它采用了现代循环神经结构,但该方法仍然计算昂贵,主要用于节点小于10,000的图。

      最近,依靠 "图卷积 "或图卷积网络(GCNs)概念的方法激增。这种方法起源于Bruna等人(2013)的工作,他们开发了一个基于谱图推理的图卷积版本。在这项工作之后,许多作者提出了对这些频谱卷积的改进、扩展和近似,导致在节点分类、链接预测以及推荐系统任务(例如,MovieLens基准)等基准上取得了新的最先进的成果。这些方法一直优于基于矩阵分解或随机行走的技术(如node2vec和DeepWalk),它们的成功导致了将基于GCN的方法应用于从推荐系统到药物设计等应用的兴趣大增。Hamilton等人(2017b)和Bronstein等人(2017)对最近的进展进行了全面调查。

        然而,尽管GCN算法取得了成功,但之前的工作还没有成功地将其应用于具有数十亿个节点和边的生产规模数据——这一限制主要是因为传统GCN方法需要在训练期间对整个图进行拉普拉斯运算。在这里,我们填补了这一空白,并展示了GCN可以在涉及数十亿个节点/项目的生产规模推荐系统设置中进行扩展。我们的工作还展示了GCN在现实环境中对推荐性能的实质性影响。

        在算法设计方面,我们的工作与Hamilton et al.(2017a)的GraphSAGE算法以及Chen et al.(2018)密切相关的后续工作关系最为密切。GraphSAGE是GCN的一种归纳变体,我们对其进行了修改,以避免对整个图进行拉普拉斯运算。通过消除整个图形存储在GPU内存中的限制,使用低延迟随机游动在生产者-消费者体系结构中对图形邻域进行采样,我们从根本上改进了GraphSAGE。我们还引入了许多新的训练技术来提高性能,并引入了MapReduce推理管道来扩展到具有数十亿节点的图。

        最后,还要注意,这里不能应用像node2vec[17]和DeepWalk[26]这样的图嵌入方法。首先,这些都是无监督的方法。其次,它们不能包含节点特征信息。第三,它们直接学习节点的嵌入,因此模型参数的数量与图的大小成线性关系,这对于我们的设置是禁止的。


3.方法

        在本节中,我们将介绍PinSage体系结构和训练的技术细节,以及使用经过培训的PinSage模型高效生成嵌入的MapReduce模型。

        为了生成一个节点(即一个项目)的嵌入,我们应用了多个卷积模块,这些模块从节点的本地图邻域(如图一所示)聚合特征信息(例如,视觉、文本特征)。每个模块都会学习如何从一个小的图形邻域中聚合信息,通过堆叠多个这样的模块,我们的方法可以获得关于本地网络拓扑结构的信息。重要的是,这些局部卷积模块的参数是在所有节点上共享的,这使得我们的方法的参数复杂性与输入图的大小无关。

3.1 问题设置

        Pinterest是一个内容发现应用程序,用户可以在其中与PIN交互,PIN是在线内容(例如,他们想要烹饪的食谱或他们想要购买的衣服)的可视书签。用户将这些pins到板中,板中包含用户认为与主题相关的管脚集合。Pinterest图形总共包含20亿个pins、10亿个板块和180多亿条边(即pins与相应板块的成员关系)。

        我们的任务是生成高质量的pins嵌入或表示,以用于推荐(例如,通过最近的邻居查找相关的pins推荐,或用于下游的重新排名系统)。为了学习这些嵌入,我们将Pinterest环境建模为一个由两个互不相干的集合I(包含pins)和C(包含板块)中的节点组成的二方图。然而,请注意,我们的方法也是自然可推广的,I被看作是一个项目集,而C则是一个用户定义的背景或集合的集合。

        除了图形结构之外,我们还假设pins/items uI与实值属性有关,Xu∈ Rd.一般来说,这些属性可以指定项目的元数据或内容信息,在Pinterest的情况下,我们发现Pin与富文本和图像功能都有关联。我们的目标是利用这些输入属性以及二部图的结构来生成高质量的嵌入。然后,这些嵌入被用于通过最近的邻居查找的推荐系统候选人生成(即,给定一个pins,找到相关的pins)或作为机器学习系统的特征,用于对候选人进行排名。

        为了便于说明和通用性,当我们描述PinSage算法时,我们只需引用V=I∪C和不明确区分pins和板块的节点(除非严格必要),尽可能使用更通用的术语“节点”。

3.2 模型架构

        我们使用局部卷积模块为节点生成嵌入。我们从输入节点特征开始,然后学习神经网络,通过变换和聚合图上的特征来计算节点嵌入(如图一所示)。

前向传播算法。我们考虑生成嵌入的任务,节点uZu,它依赖于节点的输入特征和该节点周围的图形结构。

Graph Convolutional Neural Networks for Web-Scale Recommender Systems_第2张图片

        我们的PinSage算法的核心是局部卷积运算,在这里我们学习如何从U的邻域聚合信息(如图一所示)。该过程在算法1卷积中有详细说明。基本思想是,我们转换表示形式Zv,∀v∈ N(u)的邻域通过密集的神经网络,然后在得到的向量集(第1行)上应用聚合器/池函数(例如,元素平均值或加权和,表示为γ)。这个聚合步骤提供了一个向量表示的局部邻域N(u)。然后,我们将聚集的邻域向量NU与U的当前表示连接起来,并通过另一个密集的神经网络层(第2行)变换连接的向量。从经验上看,当使用串联操作而不是[21]中的平均操作时,我们观察到显著的性能提升。此外,第3行中的规范化使训练更稳定,并且对规范化嵌入执行近似最近邻搜索更有效(第3.5节)。该算法的输出是一个U的表示,它包含了关于自身及其局部图邻域的信息。

基于重要性的邻域。我们方法的一个重要创新是我们如何定义节点邻域N(u),也就是说,我们如何选择算法1中的邻域集合来进行卷积。以前的GCN方法只是检查k-hop图的邻域,而在PinSage中,我们定义了基于重要性的邻域,其中节点u的邻域被定义为对节点u施加最大影响的T个节点。具体来说,我们模拟从节点u开始的随机行走,并计算随机行走所访问的节点的L1归一化访问计数[14]。

        这种基于重要性的邻域定义有两方面的优势。首先,选择一个固定数量的节点进行聚合,使我们能够在训练期间控制算法的内存占用[18]。其次,它允许算法1在聚合邻居的向量表示时考虑到邻居的重要性。特别是,我们在算法1中把γ作为一个加权平均数来实现,其权重根据L1归一化的访问次数来定义。我们把这种新方法称为重要性集合。

堆叠卷积。每次我们应用卷积操作(算法1),我们都会得到一个新的节点的表示,我们可以将多个这样的卷积堆叠在一起,以便获得更多关于节点周围的局部图结构的信息。特别是,我们使用多层卷积,其中第k层卷积的输入取决于第k-1层输出的表示(图1),初始(即 "第0层")表示等于输入节点特征。请注意,算法1中的模型参数(Q、q、W和w)是各节点共享的,但各层之间有所不同。

         算法2详细说明了堆叠卷积如何为迷你批节点集M生成嵌入。我们首先计算每个节点的邻域,然后应用K卷积迭代来生成目标节点的K层表示。最后卷积层的输出再通过一个完全连接的神经网络来生成最终的输出嵌入zu,∀u∈M。

   我们随后学习的模型的全套参数是:每个卷积层的权重和偏置参数(Q(k),q(k),W(k),w(k),∀k∈{1,...,K})以及最终密集神经网络层的参数G1、G2和g。算法1中第1行的输出尺寸(即Q的列空间尺寸)在所有层都被设置为m。为了简单起见,我们将所有卷积层的输出维度(即算法1第3行的输出)设置为相等,我们用d表示这个尺寸参数。模型的最终输出维度(应用算法2第18行后)也设置为d。

3.3 模型训练

        我们使用最大边际排名损失函数,以监督的方式训练PinSage。在这个设置中,我们假设我们可以获得一组有标签的物品L,其中集合中的物品对(q,i)∈L被假设为是相关的--即我们假设如果(q,i)∈L,那么物品i是查询物品q的一个好的推荐候选人。

        我们首先详细描述了我们基于边际的损失函数。随后,我们概述了我们开发的几种技术,这些技术导致了PinSage的计算效率和快速收敛率,使我们能够在十亿个节点图和数十亿个训练实例上进行训练。最后,我们描述了我们的课程训练方案,它提高了建议的整体质量。

损失函数。为了训练模型的参数,我们使用一个基于最大边际的损失函数。其基本思想是,我们希望最大限度地提高正面例子的内积,即查询项目和相应相关项目的嵌入。同时,我们要确保负面例子的内积--即查询项目的嵌入与不相关项目之间的内积--小于正面样本的内积,并有一定的预设幅度。因此,单对节点嵌入(zq,zi):(q,i)∈L的损失函数为

其中Pn(q)表示项目q的负面例子的分布,∆表示边际超参数。我们将在下面解释负面样本的抽样。 


Graph Convolutional Neural Networks for Web-Scale Recommender Systems_第3张图片

对推荐系统和图神经网络感兴趣的网友可以关注我的微信公众号“BoH工作室”,以后会陆续分享一些推荐系统和图神经网络的学习心得,欢迎大家关注并一起探讨。

你可能感兴趣的:(论文,推荐系统,gcn)