PinSage | GCN在商业推荐系统首次成功应用

Posted 人工智能前沿讲习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PinSage | GCN在商业推荐系统首次成功应用相关的知识,希望对你有一定的参考价值。


这次要介绍的论文为《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》,arxiv: 1806.01973。这篇论文可以说是第一次将GCN(Graph Convolutional Network)成功应用于商业推荐系统,虽然没有开源代码,但仍然受到广大工程师的追捧。我所在的团队近期也在复现这篇论文,写这个帖子既是和大家分享优秀的论文,也是记录一下个人对论文理解,帖子内难免有不足之处,还请大神赐教。此帖子主要分为以下几个部分:1.背景介绍,2.算法流程,3.训练细节,4.实验过程。


背景介绍

论文由Pinterest公司和Stanford联合发表,Pinterest公司成立于2010年,主要业务内容是采用瀑布流的形式向用户展现图片,无需用户翻页,新的图片会自动加载,2013年9月该网站进入全球最热门社交网络前十名,但是目前在大陆和facebook相同,普通用户暂时无法直接访问。在Pinterest网站上,有大量的图片,被称为pins;而用户可以将喜欢的图片分类,即将pins钉在画板 boards上。网站会根据用户的历史浏览轨迹为用户推荐可能感兴趣的图片。
GCN在AI领域是最近比较热门的研究方向,前段时间阿里妈妈开源了内部基于tesorflow搭建的GNN(Graph Neural Network)计算框架Euler,内置了其自研算法;而2019年的顶会论文中也不乏关于GNN的论文。
传统的深度学习网络主要针对图片,语音等欧氏空间内规则型数据;而对社交、电商和医疗等非规则结构数据则仍受到一定程度的限制。以电商场景为例,可以将用户、商品和广告等都看作节点(nodes),而将用户对于商品的购买,广告的点击等操作视为边(edges,节点间连接)。节点和边就构成了一张大图(Graph),GNN将这张整图作为输入,进行邻居信息汇聚等操作,学习图中节点,边或子图的向量表达(embedding),从而实现分类、推荐和预测等任务。可以看出在设计思路上GNN对于非结构化数据是具有一定优势的,但实践是检验真理的唯一标准,PinSage正是在工业界利用大规模数据验证了GNN的强大,这也是PinSage这篇论文意义重大的原因。


算法流程

论文中涉及到的数据为20亿图片(pins),10亿画板(boards),180亿边(pins与boards连接关系)。如作者所言,PinSage是“random-walk-based GCN”。论文目的是通过PinSage算法学习节点的高效表达(embedding),并以此为基础,后续利用K临近等方法进行推荐。
如前所述GCN是将数据以一张图的形式进行输入,在论文中pins和boards构成了二分图,即pins仅与boards相连接,pins或boards内部无连接,如图1所示:
图1 pins与boards二分图示意图
传统的GCN是整张图都参与训练,但是在Pinterest推荐场景中有几十亿的节点和上百亿的边,这种情况下整张图都参与运算是存在困难的,也是基于此PinSage借鉴了GraphSage的方法对GCN进行的改进。改进主要涉及以下三个方面:
  1. PinSage利用random-walk对节点进行采样,并根据L1-normalized选取目标节点的Top T邻居,动态的构建一个新的计算图(注意此处计算图并不是tensorflow运行时的计算图),进而进行局部的图卷积。
  2. 采用minibatch基于tensorflow进行分布式梯度训练,即采样,卷积定义在CPU端完成;每个GPU上存放一个完整的子图,可以独立的进行图卷积运算,每一层图卷积中参数共享。
  3. 在推理过程中采用MapReduce的方法避免重复计算,这里需要指出的是,根据个人理解这里的MapReduce与通常意义下的MapReduce并不相同。但因为作者在这里介绍的内容并不多,所以可能有理解不到位的地方,还请大家指正。
PinSage单层图卷积算法伪代码如图2所示:
PinSage | GCN在商业推荐系统首次成功应用
图2 PinSage卷积层算法伪代码
由图2可知,对于任意节点,进行图卷积运算时,输入为目标节点u的embedding PinSage | GCN在商业推荐系统首次成功应用 ,邻居节点的embedding集 PinSage | GCN在商业推荐系统首次成功应用 ,邻居节点权重 PinSage | GCN在商业推荐系统首次成功应用 ,及信息汇聚函数 PinSage | GCN在商业推荐系统首次成功应用 ;输出为目标节点新embeddin PinSage | GCN在商业推荐系统首次成功应用 整体算法流程如下:
  1. 信息汇聚: Line1,经过一个dense层转换邻居节点embedding,再经过激活函数ReLU,最后经过a1ggregator(聚合)/pooling(池化)函数γ(∙)根据邻居权重α对转换后的邻居节点embedding进行信息汇聚得到 PinSage | GCN在商业推荐系统首次成功应用
  2. 信息更新: Line2,目标节点embedding PinSage | GCN在商业推荐系统首次成功应用 与邻居节点汇聚后的 PinSage | GCN在商业推荐系统首次成功应用 进行CONCAT(拼接),再经过dense层转化,最后经过激活函数ReLU得到目标节点新embeddingPinSage | GCN在商业推荐系统首次成功应用
  3. embedding归一化: Line3,目标节点embedding进行归一化,得到最 PinSage | GCN在商业推荐系统首次成功应用
上述过程是一个单层的图卷积过程,基本思路与GraphSage相同,如果将此过程进行多次叠加,则可以获得多阶邻居信息。
如前所述为了降低运算量,论文采用了random-walk的方式进行采样,算法伪代码如图3所示:
PinSage | GCN在商业推荐系统首次成功应用
图3 PinSage整体算法伪代码
  1. 采样: Line1-Line7,其中Line1,将计算节点M赋值为初始样本;Line2,根据采样深度K开始循环;Line3,获取初始样本;Line4,对每个节点开始采样循环;Line5,根据采样方程N进行采样并自包含;Line6,技术节点级循环;Line7,结束采样深度循环。
  2. 信息汇聚及更新: Lin8-Line14是将图2中的算法循环K次对目标节点的embedding进行K次更新
  3. 节点embedding获取: 通过一个dense层,和激活函数ReLU之后获取最终的节点embedding PinSage | GCN在商业推荐系统首次成功应用
上述过程中重点需要介绍的是采样过程,该过程以目标节点为起点,进行random-walk,采样结束后根据L1-normalized计算节点重要性,最终选取TOP-T的邻居。这样做的好处有两个:一是邻居节点的数据是fixed-size(固定值),计算过程内存可控;二是汇聚信息的过程是根据邻居节点的重要性进行的。
在训练过程中构造合适的损失函数是非常重要的,论文中介绍,PinSage在训练过程中有label(标签)的pins组成集合 PinSage | GCN在商业推荐系统首次成功应用 ,其中query和item组成一个对(pair)。好的推荐,定义为正样 PinSage | GCN在商业推荐系统首次成功应用 ;不好的推荐,定义为负样 PinSage | GCN在商业推荐系统首次成功应用 。PinSage的目标是正样本中 PinSage | GCN在商业推荐系统首次成功应用 PinSage | GCN在商业推荐系统首次成功应用 之间距离尽量小,而负样本中 PinSage | GCN在商业推荐系统首次成功应用 和, PinSage | GCN在商业推荐系统首次成功应用 之间距离尽可能大,因此选用的损失函数为max-margin ranking loss,

PinSage | GCN在商业推荐系统首次成功应用
PinSage | GCN在商业推荐系统首次成功应用 是负样本的分布,Δ是表示余量的超参。损失函数中存在的负样本,需要进行一定程度的说明,如果用户在浏览了一个pin(query)之后马上浏览了下一个pin(item),那么这一对pins就是正样本,除此之外所有的pins对于query来说都是负样本,由此可见如果随机的选取负样本其实是降低了训练的难度,因此论文增加了“hard”负样本这一操作,“hard”负样本的要求是与query有一定关联性,但与正样本item区别较大,那么如何确定“hard”负样本呢,论文中根据PageRank排名来确定,对于query来说排名在2000-5000之间的items为“hard”负样本候选集,可进行随机采样,这种方式其实是在增加训练难度,强行提高模型区分items的能力。


训练细节

PinSage在训练的过程中采用了Multi-GPU形式,minibatch取值为512-4096不等,大的batchsize可能会导致收敛困难,论文采取了warmup策略,即根据线性规则在第一个epoch中逐步将学习率(learning rate)从一个小值增加到峰值,之后在指数级减小learning rate。
分布式训练,采用了re-indexing技术,创建包含了当前minnibatch计算涉及的的所有节点的embedding和邻接矩阵的子 PinSage | GCN在商业推荐系统首次成功应用 ,并在训练开始之前输入到GPU中,以减少GPU与CPU之间的通信。 训练过程中,除模型计算在GPU内完成,其余操作,如采样,特征提取,re-indexing等操作均在CPU上完成。 训练的过程中各GPU之间权重共享,反向传播完成之后,所有GPU上的梯度汇聚到一起,再执行同步SGD进行梯度更新。
“hard”负样本的加入可能会导致训练中收敛困难,所以在训练过程中,第一个epoch没有“hard”负样本,参数空间可以被迅速的缩小,之后逐渐加入“hard”负样本,对于第n个epoch,每个item加入n-1个“hard”负样本。
推理过程中,论文采用了“MapReduce”方案减少重复计算,这里对MapReduce加引号是因为根据论文介绍,“MapReduce”中进行的两部分主要工作分别为:
将所有pins的embedding映射到低纬空间,对应图2Line PinSage | GCN在商业推荐系统首次成功应用 的过程,这样在信息汇聚时只要去内存中取相应的值就好了,减少了重复计算;
将pin的embedding结果与对应的boards id结合到一起,board embedding的计算时通过对其邻居节点的特征进行池化得到;
而这两部分工作与通常意义下的MapReduce并不相同。此处如理解有误,还请指正。


实验过程

论文中涉及的实验有两个任务,第一个任务是推荐有关联的pins,利用embedding空间内K临近的方法推荐;第二个任务是home/news的场景下推荐pins,在embedding空间推荐距离用户最经常浏览的item最近的pins。
训练过程中数据集内包含12亿正样本,每个batch包含500个负样本,每个pin包含6个“hard”负样本,共计75亿样本。训练过程中并没有采用所有的数据,而是利用部分数据进行训练,再利用训练好的模型推理出所有节点的embedding。训练数据是随机选取的,其中包含了20%boards,70%有label的样本。在超参的精调中会再加入10%有label的样本,剩余的20%有label的样本作为测试集。训练和验证集大小接近18T,最终输出的embedding为4T。
pin的原始feature(特征)由三部分组成,视觉信息,文字说明和每个节点在图中度的log值。其中视觉信息由VGG-16提取,共4096维;文字说明由Word2Vec-based模型提取,共256维。而在实验过程中,信息汇聚函数γ(∙)的选取方式也有很多,包括max-pooling、mean-pooling、mean-pooling-xent、mean-polling-hard和PinSage提到的考虑邻居重要性的importance pooling,论文对上述汇聚方式也都做了比较。训练过程中采样深度K=2,隐层维度为2048,最终embedding维度为1024。
论文实验结果如图4所示:
PinSage | GCN在商业推荐系统首次成功应用
图4 PinSage实验结果
其中Hit-rate是item属于query Top K推荐时与query的比值,可以简单的理解为推荐准确性; MRR是Mean Reciprocal Rank,推荐算法中常用的评价指标; Visual代表仅利用视觉信息进行推荐; 同理Annotation代表仅利用说明信息进行推荐; Combined指结合视觉和说明信息后进行推荐。 可以看出在这种测试情况下PinSage是表现最好的。
实际情况中Pinterest公司在采用PinSage之前是利用Pixie算法进行推荐的,PinSage训练过程中的正负样本label也来自于Pixie,针对这种情况,论文对两种算法进行了A/B test。即利用两种算法对相同的query进行推荐,让用户进行选择,哪种算法推荐的更好。图5给出了测试结果:
PinSage | GCN在商业推荐系统首次成功应用
图5 PinSage与Pixie A/B test结果
通过图5可以看出60%的情况下PinSage的推荐结果是优于Pixie的。图6给出了不同推荐算法推荐的示例,
PinSage | GCN在商业推荐系统首次成功应用
图6 不同算法推荐结果


总结

综上,PinSage结合了random-walk和GraphSage,并引入了weight importance对GCN进行了优化,减小了计算成本,并在工业级数据上有良好的表现。论文后续有部分针对超参对于精度影响的分析,在这里没有展开说明,同时论文中一些细节在帖子中没有详细说明,感兴趣的同学可以阅读原文,毕竟每个人都会有自己的理解。以上如有不周之处,请各位同学不吝赐教。

转载来源:平凡而诗意

PinSage | GCN在商业推荐系统首次成功应用


历史文章推荐








你正在看吗?

以上是关于PinSage | GCN在商业推荐系统首次成功应用的主要内容,如果未能解决你的问题,请参考以下文章

重磅!阿里巴巴首次公开深度学习框架, X-Deep Learning助力提升广告推荐搜索场景效率

收藏 | 推荐系统面试题(6-10)

万物皆可Graph | 当推荐系统遇上图神经网络

图神经网络万物皆可Graph | 当推荐系统遇上图神经网络

商业分析师应如何构建一个商业故事

图神经网络——KDD 2018PinSage