《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》翻译

发布于 2023-10-01  1.15k 次阅读


abstract

近期在面向图结构数据的深度神经网络方面取得的进展,已经在推荐系统基准测试中实现了最先进的性能。然而,将这些方法应用于拥有数十亿个项目和数亿用户的网络规模的推荐任务,仍然面临挑战。

在这里,我们描述了一个我们在Pinterest开发和部署的大规模深度推荐引擎。我们开发了一种数据高效的图卷积网络(GCN)算法PinSage,该算法结合了高效的随机游走和图卷积,以生成节点(即项目)的嵌入,这些嵌入既包括图结构信息,又包括节点特征信息。与先前的GCN方法相比,我们基于高效的随机游走开发了一种新颖的卷积结构,并设计了一种依赖于越来越难的训练样本来提高模型鲁棒性和收敛性的新型训练策略。

我们在Pinterest上部署了PinSage,并在一个包含30亿个代表标签和板块的节点和180亿条边的图上进行了训练,共使用了75亿个示例。根据离线指标、用户研究和A/B测试,PinSage生成的推荐质量高于可比较的深度学习和基于图的替代方法。据我们所知,这是迄今为止最大规模的深度图嵌入应用,为基于图卷积架构的新一代网络规模推荐系统铺平了道路。

INTRODUCTION

深度学习方法在推荐系统应用中发挥着越来越关键的作用,用于学习有用的低维嵌入,包括图像、文本甚至个体用户。使用深度模型学习的表示可以用来补充或甚至替代传统的推荐算法,如协同过滤。这些学习到的表示具有很高的实用性,因为它们可以在各种推荐任务中重复使用。例如,使用深度模型学习的项目嵌入可以用于项目之间的推荐,还可以用于推荐主题集合(例如播放列表或“动态内容”)。

近年来,在这个领域取得了重大进展,尤其是开发了能够在图结构数据上学习的新深度学习方法,这对于推荐应用非常重要(例如,利用用户与项目的交互图以及社交图)

image-20231001104356707

在这些最新进展中,最突出的是被称为图卷积网络(GCN)的深度学习架构[19, 21, 24, 29]的成功。GCN的核心思想是使用神经网络学习如何从局部图邻域迭代地聚合特征信息(见图1)。这里的单一“卷积”操作会从节点的一跳图邻域中转换和聚合特征信息,并通过堆叠多个这样的卷积操作,信息可以传播到图的远处。与纯粹基于内容的深度模型(例如循环神经网络[3])不同,GCN既利用内容信息又利用图结构信息。基于GCN的方法已经在无数的推荐系统基准上树立了新的标准(参见[19]进行调查)。然而,尽管在基准任务上取得了成功,但这些成果尚未在实际生产环境中取得突破。

主要挑战在于将基于GCN的节点嵌入的训练和推断扩展到具有数十亿个节点和数百亿条边的图形。扩展GCN很困难,因为在处理大数据环境时,其设计基础的许多核心假设都被违反了。例如,所有现有的基于GCN的推荐系统在训练期间都需要操作完整的图拉普拉斯矩阵,这是一个在底层图具有数十亿个节点且结构不断演变的情况下是不可行的假设。

本研究介绍了我们在Pinterest开发并投入生产的高度可扩展的GCN(图卷积网络)框架。我们的框架是一个基于随机游走的GCN,被称为PinSage,它在一个庞大的图上运行,该图具有30亿个节点和180亿条边,比通常的GCN应用大约大了倍。PinSage利用了几个关键的见解,极大地提高了GCN的可扩展性:

  • 即时卷积:传统的GCN算法通过将特征矩阵与完整图拉普拉斯的幂相乘来执行图卷积。相比之下,我们的PinSage算法通过对节点周围的邻域进行采样并动态构建一个计算图来执行高效的局部卷积。这些动态构建的计算图(图1)指定了如何在特定节点周围执行局部卷积,并减轻了在训练期间操作整个图的需要。

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

    cpu处理提供数据作为生产者,gpu消费数据

  • 高效的MapReduce推断:在获得完全训练的GCN模型后,我们设计了一个高效的MapReduce管道,可以将训练好的模型分发到生成数十亿个节点的嵌入,同时最小化重复计算。

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

  • 通过随机游走构建卷积:使用完整节点邻域来执行卷积(见图1)将导致巨大的计算图,因此我们采用了采样。然而,随机采样并不是最优的,我们开发了一种使用短随机游走来采样计算图的新技术。额外的好处是现在每个节点都有一个重要性分数,在汇聚/聚合步骤中使用。
  • 重要性汇聚:图卷积的核心组成部分是从图中的局部邻域聚合特征信息。我们引入了一种基于随机游走相似性度量来衡量节点特征在此汇聚中的重要性的方法,从而在离线评估指标中实现了46%的性能提升。
  • 课程训练:我们设计了一个课程训练方案,让算法在训练过程中接受越来越难的示例,从而实现了12%的性能提升。

我们已经在Pinterest的各种推荐任务中部署了PinSage,Pinterest是一个热门的内容发现和策展应用,用户可以与"pins"(即在线内容的可视标签,如他们想要烹饪的食谱或想要购买的衣物)进行交互。用户将这些pins组织成包含类似pins的收藏夹。总的来说,Pinterest是世界上最大的用户策划的图像图,包括超过20亿个独特的pins,分布在超过10亿个boards中。

通过广泛的离线指标、受控用户研究和A/B测试,我们展示了与其他可扩展的深度基于内容的推荐算法相比,我们的方法在物品-物品推荐任务(例如相关-pin推荐)以及“主页内容推荐”任务中实现了最先进的性能。在离线排名指标中,我们的性能优于最佳基线超过40%,在面对面的人类评估中,我们的推荐在大约60%的时间内被首选,而A/B测试在各种设置下显示出用户参与度的30%到100%的提高。

据我们所知,这是有史以来最大规模的深度图嵌入应用,为基于图卷积架构的新一代推荐系统铺平了道路。

我们的工作建立在最近深度学习方法在图结构数据上取得的一系列进展的基础之上。

神经网络用于图数据的概念首次在Gori等人的工作(2005)[15]中概述,并在Scarselli等人的工作(2009)[27]中进一步阐述。然而,这些最初的图上深度学习方法需要运行昂贵的神经“消息传递”算法以收敛,并且在大型图上成本过高。一些局限性得到了Gated Graph Sequence Neural Networks [22](采用了现代循环神经网络架构)的改进,但该方法仍然计算成本高昂,并且主要用于节点数小于10,000的图。

最近,出现了一系列依赖于“图卷积”或图卷积网络(GCNs)概念的方法。这个方法源于Bruna等人(2013)的工作,该工作基于谱图论开发了一种图卷积的版本[7]。在此工作的基础上,一些作者提出了对这些谱卷积的改进、扩展和近似方法,导致了在节点分类、链接预测以及推荐系统任务(例如MovieLens基准[24])等基准上取得了新的最先进结果。这些方法在一致性上胜过了基于矩阵分解或随机游走的技术(例如node2vec [17]和DeepWalk [26]),它们的成功引发了人们对将基于GCN的方法应用于从推荐系统[24]到药物设计[20,31]等各种应用的浓厚兴趣。Hamilton等人(2017b)[19]和Bronstein等人(2017)[6]提供了对最近进展的全面调查。

然而,尽管GCN算法取得了成功,但以前的工作还没有成功将它们应用到涉及数十亿个节点和边的生产规模数据中,这主要是因为传统的GCN方法在训练期间需要操作整个图拉普拉斯。在这里,我们填补了这个空白,并展示了GCNs可以扩展到在涉及数十亿个节点/物品的生产规模推荐系统中运行的情况。我们的工作还展示了GCNs在实际环境中对推荐性能的显著影响。

在算法设计方面,我们的工作与Hamilton等人(2017a)的GraphSAGE算法[18]以及Chen等人(2018)的相关后续工作[8]最相关。GraphSAGE是GCN的一种归纳变体,我们对其进行了修改,以避免操作整个图拉普拉斯。我们通过采用低延迟的随机游走来采样图邻域,采用生产者-消费者架构来根本性地改进了GraphSAGE。我们还引入了一些新的训练技术以提高性能,并引入了一个MapReduce推断管道,以扩展到包含数十亿个节点的图。

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

METHOD

在本部分,我们将描述PinSage架构和训练的技术细节,以及使用训练好的PinSage模型高效生成嵌入的MapReduce管道。

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

Problem Setup

Pinterest是一个内容发现应用,用户可以与“pins”互动,这些“pins”是指向在线内容的可视书签(例如,他们想要烹饪的食谱或他们想要购买的衣物)。用户将这些“pins”组织成“boards”,其中包含用户认为在主题上相关的“pins”的集合。总的来说,Pinterest图包括20亿个“pins”,10亿个“boards”和超过180亿条边(即“pins”与它们对应的“boards”的成员关系)。

我们的任务是生成“pins”的高质量嵌入或表示,以便用于推荐(例如,通过最近邻查找进行相关“pin”推荐,或用于下游的重新排序系统)。为了学习这些嵌入,我们将Pinterest环境建模为一个二部图,由两个不相交集合的节点组成,(包含“pins”)和(包含“boards”)。然而,值得注意的是,我们的方法也可以自然地推广,其中被视为项目集合,被视为用户定义的上下文或集合集合。

除了图结构外,我们还假设“pins”或项目与实值属性相关联, 。一般来说,这些属性可以指定有关项目的元数据或内容信息,对于Pinterest来说,“pins”与富文本和图像特征都相关联。我们的目标是利用这些输入属性以及双分图的结构来生成高质量的嵌入。然后,这些嵌入用于推荐系统的候选生成,通过最近邻查找进行(即,给定一个“pin”,找到相关的“pins”),或作为排名候选的机器学习系统中的特征。

为了符号上的方便和通用性,当我们描述PinSage算法时,我们简单地将完整图的节点集表示为,并且在可能的情况下,不明确区分“pin”和“board”节点(除非绝对必要),尽可能使用更一般的术语“节点”。

Model Architecture

我们使用局部卷积模块来生成节点的嵌入。我们从输入节点特征开始,然后学习神经网络,以在图上转换和聚合特征以计算节点嵌入(图1)。

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

image-20231001104737217

我们PinSage算法的核心是局部卷积操作,其中我们学习如何从的邻域(图1)聚合信息。此过程在Algorithm 1 CONVOLVE中详细说明。基本思想是,我们通过密集神经网络来转换邻居的表示,然后在生成的向量集上应用聚合/汇总函数(例如,逐元素平均或加权和,表示为)(第1行)。这个聚合步骤提供了局部邻域的向量表示。然后,我们将聚合的邻域向量当前的表示连接在一起,并将连接后的向量通过另一个密集神经网络层进行转换(第2行)。在实验中,我们观察到使用连接操作而不是平均操作(如[21]中所示)会带来显著的性能提升。另外,第3行的规范化使得训练更加稳定,而且对于规范化嵌入进行近似最近邻搜索更加高效(第3.5节)。算法的输出是表示,它包含有关自身和其局部图邻域的信息。

基于重要性的邻域。我们方法的一个重要创新是如何定义节点邻域,即在Algorithm 1中选择要卷积的邻居节点集合。在先前的GCN方法中,通常只考虑跳图邻域,但在PinSage中,我们定义了基于重要性的邻域,其中节点的邻域被定义为对节点产生最大影响的个节点。具体而言,我们从节点开始模拟随机游走,并计算被随机游走访问的节点的归一化访问计数[14]。然后,的邻域被定义为具有最高归一化访问计数的前个节点,关于节点

这种基于重要性的邻域定义的优点有两个。首先,选择一定数量的节点进行聚合允许我们在训练期间控制算法的内存占用[18]。其次,它允许Algorithm 1在聚合邻居的向量表示时考虑邻居的重要性。具体而言,在Algorithm 1中,我们将实现为加权均值,权重根据归一化的访问计数来定义。我们将这种新方法称为基于重要性的汇聚。

随机游走采样邻居节点同时计算出权重

堆叠卷积。每次我们应用卷积操作(Algorithm 1),我们都会为一个节点得到一个新的表示,并且我们可以将多个这样的卷积堆叠在一起,以获得关于节点周围局部图结构的更多信息。具体而言,我们使用多层卷积,其中第层的卷积的输入依赖于从第层输出的表示(图1),并且初始(即,“第0层”)表示等于输入节点特征。请注意,Algorithm 1中的模型参数()在节点之间共享,但在层之间不同。

image-20231001104744589

Algorithm 2详细说明了堆叠卷积如何为一组节点生成嵌入。我们首先计算每个节点的邻域,然后对目标节点的层-表示应用个卷积迭代。最后一个卷积层的输出然后通过一个全连接神经网络进行传递,以生成最终的输出嵌入

我们的模型的完整参数集是:每个卷积层的权重和偏置参数,以及最后一个密集神经网络层的参数。Algorithm 1中的第1行的输出维度(即的列空间维度)在所有层中设置为。为了简化,我们将所有卷积层的输出维度(即Algorithm 1的第3行的输出)设置为相等,并将此大小参数表示为。模型的最终输出维度(在Algorithm 2的第18行应用后)也设置为

Model Training

我们以监督方式对PinSage进行训练,使用最大边际排名损失。在这个设置中,我们假设我们可以访问一组带有标签的物品对,其中集合中的物品对,即,被认为是相关的,也就是说,我们假设如果,那么物品是查询物品的一个好的推荐候选项。训练阶段的目标是优化PinSage参数,使标记集合中的物品对的输出嵌入接近在一起。

首先,我们详细描述了基于边际的损失函数。接下来,我们概述了一些技术,这些技术提高了PinSage的计算效率和快速收敛速度,使我们能够在数十亿节点图和数十亿训练示例上进行训练。最后,我们描述了我们的课程训练方案,它提高了推荐的总体质量。

损失函数。为了训练模型的参数,我们使用了基于最大边际的损失函数。基本思想是,我们希望最大化正例的内积,即查询项的嵌入和相应的相关项的内嵌。与此同时,我们希望确保负例的内积,即查询项的嵌入和不相关项的内积,要小于正样本的内积一定预定义的边际。因此,单个节点嵌入对的损失函数如下:

其中表示物品的负例分布,表示边际超参数。我们将解释负例采样的方式。

使用大型小批量进行多GPU训练。为了充分利用单台机器上的多个GPU进行训练,我们以多塔式方式运行前向和后向传播。使用多个GPU,我们首先将每个小批量(图1底部)分成相等大小的部分。每个GPU获取小批量的一部分,并使用相同的参数集进行计算。在反向传播之后,将所有GPU上的每个参数的梯度汇总在一起,执行一步同步SGD。由于需要训练大量的示例(数量达到数十亿的规模),我们使用大批量大小,范围从512到4096不等。
我们使用类似于Goyal等人提出的技术[16],以确保在处理大批量大小时快速收敛并保持训练和泛化准确性。我们使用渐进式预热程序,根据线性缩放规则在第一个时期将学习率从小增加到峰值。之后,学习率按指数方式减小。

生产者-消费者小批量构建。在训练过程中,由于邻接列表和数十亿节点的特征矩阵大小巨大,它们被放置在CPU内存中。然而,在PinSage的CONVOLVE步骤期间,每个GPU进程需要访问邻域中节点的邻居和特征信息。从GPU访问CPU内存中的数据效率不高。为了解决这个问题,我们使用重新索引技术创建一个子图,其中包含节点及其邻域,这将参与计算当前小批量。还提取了一个小特征矩阵,其中只包含与当前小批量计算相关的节点特征,并且其顺序与中节点的索引一致。在每个小批量迭代开始时,的邻接列表和小特征矩阵被输入到GPU中,因此在Convolve步骤期间不需要GPU与CPU之间的通信,大大提高了GPU的利用率。

batch内构造好当前batch需要的子图和子节点特征矩阵,卷积期间gpu不需要访问内存

训练过程交替使用CPU和GPU。模型计算在GPU上进行,而特征提取、重新索引和负采样在CPU上进行计算。除了使用多塔式训练并使用OpenMP [25]并行化CPU计算外,我们设计了一个生产者-消费者模式,以便在当前迭代中运行GPU计算,而在下一迭代中运行CPU计算。这进一步将训练时间减少了近一半。

采样负样本。在我们的损失函数中(方程1),负采样被用作边缘似然标准化因子的近似值[23]。为了提高在大批量大小下训练的效率,我们每个小批量采样一组500个负样本,这些负样本将被所有训练示例共享。与独立为每个节点运行负采样相比,这极大地减少了每个训练步骤中需要计算的嵌入数量。根据经验,我们观察到这两种采样方案的性能没有明显差异。

batch内共享负样本而不是针对每个正样本构建

在最简单的情况下,我们可以从整个物品集中均匀地采样负例。然而,确保正例(物品对)的内积大于和500个负例中的每一个的内积太“简单”了,不提供足够精细的“分辨率”让系统学习。特别是,我们的推荐算法应该能够在超过20亿个物品的目录中找到与最相关的1,000个物品。换句话说,我们的模型应该能够在200万个物品中区分/识别出1个物品。但是,对于500个随机的负样本,模型的分辨率只有500分之1。因此,如果我们从20亿个物品中随机采样500个负样本,这些物品中任何一个与查询物品稍微相关的机会都很小。因此,很大概率上学习不会进行良好的参数更新,并且无法区分稍微相关的物品和非常相关的物品。

image-20231001110057181

为了解决上述问题,对于每个正训练样本(即物品对),我们添加“难”负例,即与查询物品有一定相关性但不如正例物品相关的物品。我们将这些称为“难负样本”。它们是通过根据它们对于查询物品的个性化PageRank分数对物品在图中的排名来生成的[14]。排名在2000-5000之间的物品被随机抽样作为难负样本。如图2所示,难负样本与查询更相似,因此对于模型来说更具挑战性,迫使模型学会在更细的粒度上区分物品。

基于PageRank的hard负样本

在整个训练过程中使用难负样本会使训练收敛所需的时代翻倍。为了帮助收敛,我们开发了一个课程训练方案[4]。在训练的第一个时代中,不使用难负样本,以便算法快速找到参数空间中损失相对较小的区域。然后在后续的时代中添加难负样本,使模型学会区分高度相关的物品和稍微相关的物品。在训练的第个时代,我们为每个物品将个难负样本添加到负样本集合中。

负样本渐进式提高难度

Node Embeddings via MapReduce

在模型训练完成后,直接应用训练好的模型生成所有物品的嵌入仍然具有挑战性,包括那些在训练期间没有见过的物品。通过使用算法2来计算节点的嵌入会导致由于节点的-跳邻域之间的重叠而产生重复的计算。如图1所示,在为不同目标节点生成嵌入时,许多节点在多个层次上重复计算。为了确保高效的推理,我们开发了一种MapReduce方法,可以在没有重复计算的情况下运行模型推理。

image-20231001110342448

我们观察到节点嵌入的推理非常适合于MapReduce计算模型。图3详细描述了双向图针对Pinterest的pin-to-board图的数据流,其中我们假设输入(即“layer-0”)节点是pin/item(第一层节点是board/context)。MapReduce管道有两个关键部分:

(1) 使用一个MapReduce作业将所有pin映射到低维潜在空间,其中将执行聚合操作(算法1,第1行)。

(2) 然后使用另一个MapReduce作业将得到的pin表示与它们出现在的boards的ID连接,并通过汇总其(采样的)邻居的特征来计算board的嵌入。
注意,我们的方法避免了冗余计算,每个节点的潜在向量仅计算一次。在获得boards的嵌入后,我们使用另外两个MapReduce作业来计算pin的第二层嵌入,以类似的方式进行,如果需要,可以进行迭代(最多个卷积层)。

逐层缓存pin的embedding

Efficient nearest-neighbor lookups

PinSage生成的嵌入可以用于各种下游推荐任务,在许多情况下,我们可以直接使用这些嵌入在学习的嵌入空间中执行最近邻查找来进行推荐。也就是说,给定一个查询物品,我们可以推荐那些在嵌入空间中与查询物品嵌入的个最近邻的物品。通过局部敏感哈希(Locality Sensitive Hashing, LSH),可以有效地获得近似的K最近邻。在计算哈希函数之后,可以使用基于弱AND运算符的两级检索过程来实现物品的检索。鉴于PinSage模型是离线训练的,所有节点嵌入都是通过MapReduce计算并保存在数据库中的,高效的最近邻查找操作使系统能够以在线方式提供推荐服务。

EXPERIMENTS

为了展示PinSage的效率以及它生成的嵌入的质量,我们对整个Pinterest对象图进行了一系列全面的实验,包括离线实验、生产A/B测试以及用户研究。

实验设置

我们评估PinSage生成的嵌入在两个任务中的性能:推荐相关的pins和在用户的主页/新闻源中推荐pin。为了推荐相关的pin,我们在嵌入空间中选择与查询pin最近的个邻居。我们使用离线排名度量以及受控用户研究来评估这个相关pin推荐任务的性能。对于主页/新闻源推荐任务,我们选择在嵌入空间中与用户最近固定的pin之一最接近的pin。我们使用A/B测试来评估完全部署的生产系统在这个任务上的性能,以测量对用户参与度的总体影响。

训练细节和数据准备。我们使用历史用户参与度数据来定义正训练示例的集合(方程(1))。具体来说,我们使用历史用户参与度数据来识别pin对,其中用户在与pin互动后立即与pin互动。我们将所有其他的pin视为负样本(并按照第3.3节的描述对它们进行采样)。总体上,我们使用了12亿对正训练示例(每批次还有500个负例和每个pin6个难负例)。因此,总共使用了75亿个训练示例。

由于PinSage可以高效生成未见数据的嵌入,因此我们只在Pinterest图的子集上进行训练,然后使用第3.4节中描述的MapReduce管道为整个图生成嵌入。具体来说,对于训练,我们使用整个图的随机抽样子图,包含所有板块(boards)的20%(以及这些板块触及的所有pin),以及70%的标记示例。在超参数调整期间,还使用了10%的标记示例。在测试时,我们在整个图上运行推断,以计算所有20亿个pin的嵌入,并使用剩余的20%的标记示例来测试PinSage的离线推荐性能。需要注意的是,在完整图上进行训练大大减少了训练时间,对最终性能的影响可以忽略不计。总的来说,用于训练和评估的完整数据集大小约为18TB,完整的输出嵌入大小为4TB。

用于学习的特征。Pinterest上的每个pin都与一张图片和一组文本注释(标题、描述)相关联。为了为每个pin生成特征表示,我们将视觉嵌入(4,096维)、文本注释嵌入(256维)和图中节点/pin的对数度连接在一起。视觉嵌入是使用VGG-16架构的分类网络的第6个完全连接层生成的[28]。文本注释嵌入是使用基于Word2Vec的模型[23]训练的,其中注释的上下文包括与每个pin相关的其他注释。

用于比较的基线。我们将PinSage的性能与以下生成pin嵌入的最新基于内容、基于图形和深度学习基线进行了评估:

(1) 视觉嵌入(Visual):使用深度视觉嵌入的最近邻进行推荐。视觉特征如上所述。

(2) 注释嵌入(Annotation):基于注释嵌入的最近邻进行推荐。注释嵌入如上所述。

(3) 组合嵌入(Combined):基于视觉和注释嵌入的连接进行推荐,并使用2层多层感知器来计算嵌入,以捕捉视觉和注释特征。

(4) 基于图的方法(Pixie):这种基于随机游走的方法[14]使用偏倚的随机游走来通过模拟从查询pin开始的随机游走来生成排名分数。具有前个分数的物品被检索为推荐。虽然这种方法不生成pin嵌入,但它目前是Pinterest某些推荐任务的最新技术[14],因此是一个有信息量的基线。

视觉和注释嵌入是Pinterest当前部署的用于生成pin表示的最新深度学习内容-based系统。需要注意的是,由于问题的规模,我们没有与文献中的其他深度学习基线进行比较。我们也不考虑用于生成物品/内容嵌入的非深度学习方法,因为其他研究已经证明了深度学习方法在生成这种嵌入方面的最新性能【9,12,24】。

我们还进行了消融研究,并在评估性能时考虑了PinSage的几个变种:

  • 最大池化(max-pooling)使用元素最大值作为对称聚合函数(即),不使用难负样本。
  • 均值池化(mean-pooling)使用元素均值作为对称聚合函数(即 mean)。
  • 均值池化交叉熵(mean-pooling-xent)与均值池化相同,但使用了[18]中引入的交叉熵损失。
  • 均值池化难负样本(mean-pooling-hard)与均值池化相同,只是在第3.3节详细介绍的情况下包括了难负样本。
  • PinSage使用本文提出的所有优化,包括在卷积步骤中使用重要性池化。

最大池化和交叉熵设置是基于Hamilton等人[18]的最佳性能GCN模型的扩展,其他变种(例如,基于Kipf等人[21])在开发测试中表现明显较差,因此出于简洁起见省略了。【4】对于上述所有变种,我们使用,隐藏维度大小,并将嵌入维度设置为1024。

计算资源。PinSage的训练是在TensorFlow[1]上实现的,运行在一个拥有32个核心和16个Tesla K80 GPU的单台机器上。为了确保快速获取物品的视觉和注释特征,我们将它们存储在主内存中,以及图形一起使用Linux HugePages来增加虚拟内存页面的大小,从4KB增加到2MB。在训练中使用的总内存量为500GB。我们的MapReduce推理管道在一个Hadoop2集群上运行,包括378个2.8倍大的Amazon AWS节点。

Offline Evaluation

为了评估相关pin推荐任务的性能,我们定义了命中率(hit-rate)的概念。对于测试集中的每对正pin,我们使用作为查询pin,然后计算其从500万个测试pin样本中获取的前个最近邻。然后,我们将命中率定义为查询在测试样本的前个中的排名比例(即,的查询的比例)。该指标直接衡量了算法推荐中包含与查询pin相关的物品的概率。在我们的实验中,设置为500。

我们还使用平均倒数排名(Mean Reciprocal Rank, MRR)来评估方法,该指标考虑了物品在对查询物品的推荐物品中的排名:

由于候选物品数量庞大(超过20亿个),我们使用公式(2)中的MRR的缩放版本,其中是物品在查询的推荐物品中的排名,是标记的物品对的总数。缩放因子100确保,例如,排名在1000和2000之间的差异仍然明显,而不是非常接近0。

image-20231001110555624

表1比较了各种方法的性能,使用命中率以及MRR【5】。PinSage使用我们新的重要性池化聚合和难负样本在命中率和MRR方面实现了最佳性能,命中率为67%,MRR为0.59,相对于最佳基线,命中率提高了40%(相对提高了150%),而MRR提高了22%(相对提高了60%)。我们还观察到,将视觉和文本信息结合使用比单独使用其中一个要好得多(组合方法相对于仅使用视觉/注释提高了60%)。

image-20231001110602580

嵌入相似性分布。了解学习的嵌入的有效性的另一个指标是随机物品嵌入对之间的距离是广泛分布的。如果所有物品之间的距离大致相同(即,距离紧密聚集),则嵌入空间不具备足够的“分辨率”来区分不同相关性的物品。图4绘制了使用注释、视觉和PinSage嵌入的物品对之间余弦相似性的分布。随机物品对之间余弦相似性的这种分布显示了PinSage的有效性,它具有最广泛的分布。特别是,PinSage嵌入的余弦相似性的峰度为0.43,而注释嵌入为2.49,视觉嵌入为1.20。

拥有如此广泛的嵌入分布的另一个重要优点是它降低了后续LSH算法的碰撞概率,从而提高了在推荐过程中提供最近邻pins的效率。

User Studies

我们还通过在不同学习表示之间进行头对头比较来调查PinSage的有效性。在用户研究中,用户被呈现了一个查询pin的图像,以及由两个不同的推荐算法检索到的两个pin。然后要求用户选择哪个候选pin与查询pin更相关。用户被要求在推荐的物品和查询物品之间找到各种相关性,例如视觉外观、物体类别和个人身份等方面的相关性。如果两个推荐的物品看起来同样相关,用户可以选择“相等”。如果在对同一问题进行评分的用户中没有达成的共识,我们将结果视为不确定。

image-20231001133157032

image-20231001133212747

表2显示了PinSage和4个基线之间的头对头比较的结果。在用户有关于哪个更相关的意见的物品中,约有60%的首选物品是由PinSage推荐的。图5提供了推荐的示例,并说明了不同方法的优点和缺点。左边的图像代表查询物品。右边的每一行对应于视觉嵌入基线、注释嵌入基线、Pixie和PinSage所做的顶部推荐。尽管视觉嵌入通常很好地预测类别和视觉相似性,但它们偶尔在图像语义方面犯大错误。在这个示例中,由于相似的图像风格和外观,视觉信息混淆了植物和食物,以及树木伐木和战争照片。基于图的Pixie方法使用pin到板的关系图,正确地理解了查询的类别是“植物”,并推荐了该类别的物品。但它没有找到最相关的物品。将视觉/文本和图形信息结合起来,PinSage能够找到与查询物品在视觉和主题上都相似的相关物品。

image-20231001133242551

此外,我们通过随机选择1000个物品并从PinSage嵌入中计算2D t-SNE坐标来可视化嵌入空间,如图6所示。我们观察到物品嵌入的接近与内容的相似性相符,而相同类别的物品被嵌入到空间的相同部分。需要注意的是,在嵌入空间中,视觉不同但主题相同的物品也彼此靠近,如图中底部显示的不同时尚相关物品。

Production A/B Test

最后,我们还报告了生产中的A/B测试实验,该实验比较了PinSage与Pinterest的其他深度学习内容推荐系统在首页推荐任务上的性能。我们通过观察用户参与度的提升来评估性能。感兴趣的指标是repin率,它衡量了首页推荐中被用户保存的百分比。用户将一个pin保存到画板是一种高价值的行为,表示用户的深度参与。这意味着在特定时间向用户呈现的特定pin足够相关,以至于用户将该pin保存到他们的一个画板中,以便以后检索它。

我们发现,PinSage始终建议用户更有可能被用户重新固定的pin,而不是备选方法。根据特定设置的不同,我们观察到与基于注释和视觉嵌入的推荐相比,repin率提高了10-30%。

Training and Inference Runtime Analysis

GCNs的一个优点是它们可以是归纳的【19】:在推断(即嵌入生成)步骤中,我们能够计算未在训练集中的物品的嵌入。这使我们能够在子图上进行训练以获取模型参数,然后生成在训练期间未观察到的节点的嵌入。还要注意,可以轻松计算随时间添加到图中的新节点的嵌入。这意味着可以在完整的(并且不断增长的)图上进行推荐。开发数据上的实验证明,在包含3亿个物品的子图上进行培训可以在命中率方面实现最佳性能(即,在训练集大小进一步增加似乎没有帮助),将运行时间缩短了6倍,与在完整图上进行培训相比。

image-20231001133546147

表3显示了minibatch SGD的批次大小对PinSage培训过程运行时间的影响,使用mean-pooling-hard变种。对于不同的批次大小,该表显示:(1)当批次大小变化时,每个minibatch的计算时间(以毫秒为单位);(2)使模型收敛所需的迭代次数;以及(3)培训过程的总估计时间。实验表明,批量大小为2048最有效。

当训练具有重要性池化的PinSage变种时,另一个权衡来自于选择邻域大小。表3显示了当和50时,PinSage的运行时间和性能。随着的增加,性能递减,我们发现,具有50个邻域大小的两层GCN可以最好地捕获节点的邻域信息,同时保持计算效率。

培训完成后,由于高效的MapReduce推理管道,为30亿个物品生成嵌入的整个推理过程可以在不到24小时内完成。

CONCLUSION

我们提出了PinSage,一种随机游走图卷积网络(GCN)。PinSage是一种高度可扩展的GCN算法,能够学习包含数十亿对象的规模巨大的Web图中节点的嵌入。除了确保可扩展性的新技术之外,我们还引入了重要性池化和课程培训的使用,大幅提高了嵌入性能。我们在Pinterest部署了PinSage,并在多个推荐任务上全面评估了所学嵌入的质量,离线指标、用户研究和A/B测试都显示出了推荐性能的显著提高。我们的工作展示了图卷积方法在生产推荐系统中的影响,我们相信将来可以进一步扩展PinSage以解决其他大规模图表示学习问题,包括知识图推理和图聚类。

 


面向ACG编程