图学习应用(三):斯坦福和Pinterest联合推出PinSage:GCN首次用于商业推荐系统

2021-09-15 10:26:26 浏览数 (1)

内容简介

本文主要介绍论文《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》,它是Pinterest公司和斯坦福大牛Jure Leskovec联合发表,首次将图卷积神经网络应用于商业推荐系统。我没找到这篇文献公开的代码,但在DGL(Deep Graph Library)下找到了PinSage的实现,GitHub链接和文献详情如下。

首次应用到商业推荐系统的图卷积神经网络PinSage

1 图卷积网络和推荐系统

图卷积网络(Graph Convolutional Neural Network, GCN)的核心思想是利用神经网络聚合领域节点特征与自身嵌入,以生成新的嵌入,近年来GCN在AI领域一直比较热门。在推荐系统领域,GCN可以弥补传统神经网络无法处理的(诸如社交、电商和医疗等领域的)非规则结构数据(图数据)。本文主要介绍首次将GCN应用到推荐系统的手段PinSage。

该论文贡献点:

  • 通过随机游走构造卷积:我们难以对节点全部邻居节点进行卷积,因此开发了一种使用短随机游走来对邻居节点进行采样的技术。这种方法还有一个好处,能够给每个节点提供重要性得分,在邻居节点传入的信息进行聚合/池化时提供支撑。
  • 重要性池化:在聚合邻居节点的特征信息时,引入(基于随机游走相似性度量的)权衡邻居节点特征重要性的方法,使离线评估指标的性能提升46%。
  • 课程式训练(Curriculum Training):借鉴人类学习由易到难的经验,在训练过程中不断给模型喂给越来越难的样本,从而使整体效果提升了12%。

2 算法详情

2.1 Pinterest推荐业务场景

Pinterest是一个图片社交分享APP,用户可以在APP内与pin(图片)进行交互,用户可以将感兴趣的pins统一保存到boards(钉板,含义是把感兴趣的图片钉到钉板上),如下图所示。

Pinterest的图片推荐场景是由pins和boards组成的二分图,共有20亿个pins,10亿个boards,以及180亿条边(因为是二分图,所以pins内部、boards内部都不存在连接)。PinSage算法的任务是,利用二分图给pins生成嵌入并用于图片推荐。

PS:这里我想到一个问题,除了使用boards和pins组成的二分图来生成pins的嵌入,是否可以使用“钉”过pins序列(用户boards内的pins序列)构建的pins图来生成pins的嵌入?

我猜测有可能是因为boards内的pins序列没有上下文联系,所以用pins序列建出来的图也没有实质上的含义。与此同时每个钉板board内部的图片集合,反映的是某个用户的喜好,因此直接用pins和boards的链接来生成嵌入是可行的。

2.2 PinSage模型结构

PinSage的模型结构可参见下图,卷积的实现逻辑包含三步:

1)聚合邻域信息

其中

是处理邻居节点信息的单层网络,

是邻居节点的权重,

是池化函数(重要性池化,后面会细讲) 2)结合邻域信息与节点嵌入生成新的嵌入

其中

的逻辑同上,通过单层网络聚合领域信息和节点自身嵌入 3)归一化

PinSage模型结构

PinSage模型实现的伪代码逻辑如下图所示,整体计算流程可分为三部分:

1)对minibatch节点集合的邻居节点进行采样

跳邻居节点采样原本是GCN的正常操作,本文在这里的创新点在于:计算节点在(基于随机游走的)采样过程中的访问次数,并用于刻画节点的重要性(重要的节点在随机游走过程中会有更高频次的访问)。 具体的实现逻辑为(详情可参见下图的伪代码): 对于

中的所有节点

,基于采样函数

对节点

的邻居节点进行采样,并添加至

中,

。 最终得到包含采样结果在内的集合

2)

层卷积 邻居节点集合

的生成逻辑为:

,此处会将节点

的所有邻居节点(L1标准化后)的重要性由大到小排序,然后选取其中重要性最大的

个邻居。 并基于节点(L1标准化后)的重要性,对

个节点的邻居信息进行加权平均重要性池化)。

最终得到包含

跳邻居节点在内的集合

中所有节点的嵌入

3)基于

层卷积的结果,产出节点嵌入。 在对

层卷积得到的节点嵌入

,加一个全连接层,生成最终的节点嵌入。

PinSage的伪代码逻辑

PinSage基于有监督的方式进行训练,详情如下:

通过有标签的pins-pins pair所组成的集合

,来训练PinSage的模型参数。这里的pins-pins pair可以理解为用户浏览了前一个pins(查询项

),我们给推荐了一个很好的候选项pins(候选项

),

。 PinSage采用max-margin ranking loss作为损失函数:

其中

是margin超参数,

是负样本的分布,我们是希望查询项

的嵌入

与负样本的嵌入

之间的距离越大越好,而与好的候选项

的嵌入

距离越近越好。 原本通过均匀方式对没有推荐的pins进行负采样也是正常操作,保证

的内积大于被采样出来的样本与

的内积也是比较容易的。 此处是本文的另一个创新点:课程式训练,通过调整负采样的手段以生产hard负样本。hard负样本为那些与

有某种关联,但是与

没有关联的样本。具体实现方式为:基于Personalized PageRank来选取排名在2000-5000的pins,并随机选取作为负样本。 在训练过程中,随着epoch递增,不断添加hard负样本的权重,迫使模型学习如何更好的分辨pins。 在CS224W课程的PageRank章节有详细讲述二分图场景下的Personalized PageRank,附上这节课的课程笔记传送链接。

此外文章还提到了包含分布式训练在内的提升整体性能的方法,此处不详细介绍,如果感兴趣,推荐直接看内容简介部分贴出来的源码。

3 实验详情

同步思考下淘宝的推荐场景,包含多种场景的推荐,比如:首页一堆通用商品推荐、用户页推荐我们感兴趣的商品、浏览某个商品时给推荐一批相关的商品等等。

文献中用了两个任务来评估PinSage的效果:给pins推荐相关的pins,以及用户主页推荐。

3.1 recommending related pins

通过KNN来推荐最相关的500个pins,并使用MRR(Mean Reciprocal Rank)来衡量推荐效果,计算公式如下,其中

在候选集中的排名。最终实验结果如下图所示,对比方法详情如下:

pins包含图片和一组注释。 对比方法中的Visual使用图片信息得到的嵌入,Annotation使用图片注释得到的嵌入,Combined结合图片和注释得到的嵌入。 max-pooling、mean-pooling等则与PinSage有相同的结构,但池化方式不同。

recommending related pins的实验结果

此外文章还通过给用户推荐来自于两个算法的结果,让用户选择两个算法产出的结果与目标pins更匹配,结果如下图所示。

3.2 user home feed recommendation

通过A/B实验对比PinSage和其他推荐算法的效果,通过repin rate(给用户推荐的pins被钉到钉板boards的比例)来衡量推荐算法的效果,PinSage的repin rate比其他算法高10%至30%(木有详细数据)。

4 展望

没有展望,PinSage很优秀,未来可能在知识图谱推理以及图聚类等领域发挥更大效用。

0 人点赞