内容简介
本文主要介绍论文《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很优秀,未来可能在知识图谱推理以及图聚类等领域发挥更大效用。