Session-based Recommendation with Graph Neural Networks & GNN

最近在实验室组会主讲了一些关于GNN的理解并讨论了以篇发表于AAAI2019的关于门控图神经网络在推荐系统中应用的论文。现将相关内容予以记录。其中的截图有涉及到相关博主的博客,均已列于文献引用中,如有不当,请告知删除,谢谢!

1. “A Comprehensive Survey on Graph Neural Networks”

1.1 引言

像CNN、RNN这样的深度学习模型在图像、文本、音视频等欧式空间中的数据上取得了巨大的成就。但是因为图数据是不规则的,每个图的节点是无序的,且规模是可变的,同时每个节点的邻居节点数量也是不同的,因此一些重要的操作,如卷积操作,虽然能够很轻易的在图像或者文本数据中进行计算,但是却不能完全适应于图数据这样的非欧式空间的数据结构。此外,现有的机器学习方法都是基于数据是相互独立的假设的,但是图数据中的节点都是与其他节点相互连接的(孤岛情况不予考虑)。这些邻居节点的连接信息用于捕获数据之间的相互依赖关系。【这篇论文是从网络的角度对于图神经网络进行的综述性描述,与刘知远老师他们团队写的那篇图神经网络综述有所区别】

 Session-based Recommendation with Graph Neural Networks & GNN_第1张图片

 

图1. 卷积算子计算示意图

但是很多领域的研究已经证明CNN、RNN等模型真的好用,所以为了将深度学习模型迁移于图数据中,提出了很多基于图的神经网络。图神经网络的提出主要动机是将2D的卷积算子操作(如上图左)用于图数据中(如上图右)。与图相似,图像可以认为是有多个像素点组成的图。像素的邻居节点是有一个n×n的滤波器所决定的。但是在图像中,滤波器选定的邻居节点是有序的且尺寸固定。而一个图的卷积算子的一个简单的方法就是取节点的邻居节点特征的平均值,值得注意的是,图中节点的邻居节点是无序的且尺寸不固定。

1.2 背景知识及分类

1.2.1 GNN vs. Network Embedding

GNN是一种深度学习模型,它旨在用端到端方式来解决图相关的任务,许多GNN算法都是尽可能的去提取更高层次的表示。而网络嵌入则是治理与在一个低维向量空间进行网络节点的向量表示,同时保护网络的拓扑结构和节点的内容信息,这些低维向量可以用于后续的很多任务,如图分类、节点聚类等。网络嵌入在形式上更倾向于一种二段式结构的算法体系。网络嵌入和GNN算法的分类大致可分为如图2所示[1]。左图为范畴分类,右图为论文中对每种框架下的文献总结。网络嵌入算法都是典型的无监督算法,可以大致分为三类,即矩阵分解、随机游走和图自动编码。基于深度学习的GAE属于图神经网络。

Session-based Recommendation with Graph Neural Networks & GNN_第2张图片Session-based Recommendation with Graph Neural Networks & GNN_第3张图片

2.网络嵌入和GNN的分类

1.2.2 GNN之GCN

GCN 最早是在一篇题为“Spectral networks and locally connected networks on graphs”的论文中进行应用的,这篇文章提出了一种基于谱的图神经网络模型,但是GCN真正走进学术研究的是2016年发表的“semi-supervised classification with graph convolutional network”论文,它提出了一种基于图的卷积神经网络用以图节点分类,如图3(左)所示,在节点层级上通过聚集节点的邻居信息来表示当前节点,从而实现节点分类。基于这种GCN的结构,通过增加一个POOLING操作来实现图分类,如图3(右)所示[2]。 每一个POOLING层的作用是根据节点向量得到一个更为粗化的子图(称之为聚类图),然后使节点能够表示更深层次的图表示。最后经过一个softmax线性层输出每个图的标签类别。用于图分类的GCN论文可见参考文献[2]或参考我的上一篇博客[3]。

Session-based Recommendation with Graph Neural Networks & GNN_第4张图片Session-based Recommendation with Graph Neural Networks & GNN_第5张图片

3.节点分类GCN和图分类GCN

1.2.3 GNN之GAN (GAT)

GAN与GCN是类似的,都致力于寻找一个聚合函数,通过节点游走融合图中的相邻节点,来学习一种节点的表示。但是两者的区别是GAN(GAT)使用一种端到端的神经网络模型(注意力机制)来选择那些对于提取当前节点更为重要的节点,或者是给那条边赋以更为重要的权重。而GCN则是一种基于随机游走采样或者根据节点的度机制来选择节点。如图4所示。

Session-based Recommendation with Graph Neural Networks & GNN_第6张图片Session-based Recommendation with Graph Neural Networks & GNN_第7张图片

4. GCN和GAN(GAT)的节点选择机制的区别

1.2.4 GNN之GGNN

GGNN是将门控神经网络用于图中,这对于很多任务都是非常有帮助的,如图5所示。GGNN的输入是网络和它的邻接矩阵,但是这个邻接矩阵与GCN的矩阵输入有所区别。GGNN的矩阵是由出度矩阵和入度矩阵拼接而成的N×2D维矩阵(c)。图的卷积操作单元是GRU (b)。图5(a)表示输入,(c)表示根据输入构建的N×2D邻接矩阵。(b)表示GNN内部对节点信息的聚集过程,在显示边的基础上增加了与显示边方向相反的隐式边作为补充的信息传递方式,这主要是为了保证叶子节点与根节点的信息聚集的全面性。

Session-based Recommendation with Graph Neural Networks & GNN_第8张图片

 

图5.GGNN的输入矩阵和和门控机制

下面对门控机制的公式推理给出解释,如图6所示。式1表示节点的初始状态,D维向量,当节点的输入特征维度小于D时,后面补0。式(2)中,Av: 表示的是从图5(c)的矩阵A中选择对应与节点v的边信息,例如与节点2对应的边信息为“outgoing edges”的第4列和“incoming edges”的第1列和3列。[h1t-1Thvt-1T]表示的是将t-1时刻所有节点的特征拼接在一起形成的向量。式(3)-(6)是GRU的传递过程,zvt 控制遗忘信息,rvt 控制新生信息。

Session-based Recommendation with Graph Neural Networks & GNN_第9张图片

 

图6.GGNN的公式推导

1.2.5 GNN之其他

1、GAE 是一种无监督的学习框架,称之为图自编码器。它通过编码器学习一种低维向量,然后通过解码器重构图数据,一般是重构图的邻接矩阵。GAE是一种常用的图嵌入方式,它既适应于普通的无属性图,又适应于带属性图。

2、STGNN 是一种基于时空的图神经网络,它旨在从时空图中学习那些隐式的不可见的特征模式,同时考虑节点在时间上的依赖性和空间上的依赖性。时空图是一个具有时间属性的分层网络模式,每个时间段内的邻接矩阵都是相互独立的,却是根据时间线进行关联和组织的,通过这种时间关联性来学习图的更深层次的表示。

基于以上GNN的背景知识介绍,我们介绍一篇将GGNN应用于推荐系统的工作。发表于AAAI2019。这是一篇基于会话的序列推荐工作,在通过与当前主要的推荐算法对比验证了算法的有效性和在序列推荐中的创新性。

2. Session-based Recommendation with Graph Neural Networks

2.1 引言

2.1.1 任务描述

推荐系统是为了帮助用户解决信息过载的问题。

Session-based Recommendation意为短序列推荐,或者是会话序列推荐。短序列推荐的意思是在一个时间窗口内连续的点击行为,比如,一位用户在登陆淘宝的这段时间里连续点击了10个商品,那么这10个商品就是一个短序列,着重点出了序列中最后一次点击的商品对于接下来需要预测商品的重要性。

2.1.2 现有算法的局限性

目前有很多研究都在解决这个问题,本文也是从不同的实验方法中选择了几类代表性的算法(其中与深度学习最相关的模型是将RNN引入到推荐任务中)。在这些方法中存在的局限有:

(1)当一个会话中的用户行为数量十分有限时,RNN就很难捕获用户的行为表示。因为使用RNN建模时,如果前面时序的动作项较少,最后一个输出产生推荐项时的准确性就比较低。

(2)会话过程中item之间的转移模式在会话推荐中是十分重要的,但是RNN和马尔科夫过程只对相邻物品的单向转移进行了建模,而忽略了会话中的其他item信息。

本文针对以上的两点局限性设计了名为SR-GNN的推荐框架,用于会话序列推荐。SR-GNN框架主要包括四个部分,下面将从总体框架和每一个部分进行介绍。以下内容除了对论文的总结学习以外,还主要参考了博客[4]和博客[5]。

2.2 SR-GNN算法框架

 

Session-based Recommendation with Graph Neural Networks & GNN_第10张图片

图7.SR-GNN框架图

SR-GNN框架主要由四个部分构成。第一部分是构图。出现在一个会话中的item根据点击的先后顺序被构建成有向图,然后将所有的session序列建模到一起形成item图。这个有向图体现了item的先后顺序关系。第二部分是item向量表示。所有的item都是有唯一标识的,它们在session有向图中是能够彼此区别的。然后使用GGNN对每个item进行Embedding,然后得到每个item的向量表示。但是在一个序列中,一个item可能重复出现多次,为此论文作者提出了一种新的矩阵构造方式来解决这个问题。第三个部分是session向量表示。Session向量可以作为当前会话序列中所有item的偏好或者兴趣,可以理解为一种商品的类别。作者通过两个线性层分别得到session的局部表示和全局表示,然后通过一个线性变换将局部表示和全局表示整合到一起,形成session的表示。第四个部分是预测模块,它使用交叉熵损失函数训练模型,对向量进行softmax操作,得到预测结果。

2.2.1 构图

每一个session序列中的item都根据它点击时间被建模成有向图,其中每个节点表示一个item,每条边表示用户的点击行为。这样,出现在不同session中的item都可以被建模成有向图。当然,正如前面所讲,在一个有向图中,同一个节点(item)是可能重复出现的。为此,作者提出了一种新的矩阵构造方式来解决这个问题,如下代码所示。

Session-based Recommendation with Graph Neural Networks & GNN_第11张图片

 

图8.重构矩阵代码示意图

从图8的代码中可以看出,在SR-GNN的构图中,它的邻接矩阵并不是简单的根据有连边为1,没有连边则为0的方式去构建邻接矩阵,而是使用了节点的出度特征来平衡权重的方法。作者在构建图的邻接矩阵时,对于序列中的每一个item连边进行了一个判断:如果一条连边在session有向图中已经出现过了,那么这条边的权重将会增加1。最后将session图中的所有边的权重和都除以该边起始节点的出度来获得该有向图的对应邻接矩阵。用图9来解释一下这个过程。

Session-based Recommendation with Graph Neural Networks & GNN_第12张图片

 

图9.SR-GNN构图部分邻接矩阵实例

图9中给出了[v1,v2,v3,v2,v4]的item序列,构建的session有向图如图9上所示。根据该session有向图所构建的邻接矩阵如图9下所示。其中节点2在item序列中出现了两次,所以它的出度为2,因此在构建的邻接矩阵中,节点2对应的出度矩阵和入度矩阵中的值为1/2。

2.2.2 item向量表示

SR-GNN中的向量表示模块主要采用GGNN,与上面所讲的GGNN是一样的训练过程,只不过输入的图矩阵是根据作者提出的构图方式进行的。

Session-based Recommendation with Graph Neural Networks & GNN_第13张图片

 

大致的训练过程是:

(1)提取邻居节点的潜在表示并将其作为图神经网络的输入。(初始向量为随机初始化的)。(2)遗忘门和重置门用于更新(决定)保留或删除哪些节点信息(3)通过previous状态、当前状态和重置门来构建候选状态(4)节点的终态是由前一时刻状态和候选状态组合形成的。

2.2.3 session向量表示

在得到每个item向量之后,利用这些item向量形成session向量用于基于会话的推荐。之前的研究都是假设每个session都会有一个不同的潜在用户表示,但是本文并没有基于这种假设,而是从已有的向量中获得这个向量。

Session向量的获得是由两个部分组成的,即局部表示和全局表示。局部表示是直接使用一个session中最后一次点击的item向量表示,即Sl=vn 。全局表示则是使用一种attention机制得到的。如下所示:

 

其中q∈Rd,W1 和 W2 是两个可以训练的矩阵。全局向量则是通过对么个item向量的加权求和得到。最后用于session序列中预测下一次item点击的session向量是将全局向量和局部向量拼接得到的,即Sh=W3Sl;Sg

2.2.4 预测模块

最后,通过如公示所示的交叉熵损失函数来训练模型。

 

其中

 

2.3 数据集

论文使用了两个数据集,Yoochoose是取自RecSys challenge 2015, 它包含了一串用户点击;Diginitica 取自CIKM Cup 2016只使用了它的transactional数据。为了公平比较,作者对数据进行了清洗,过滤掉了长度为1的session和出现次数小于5的item,这样形成了如表1所示的数据集规模。

Session-based Recommendation with Graph Neural Networks & GNN_第14张图片

 

2.3 对比实验

POP-SPOP(传统方法):推荐训练集中的TopN(点击率)和推荐session序列中的TopN。

Item-KNN:推荐与当前点击的item最相近的其他item,相似性的度量方式是cosine相似度。

BPR-MF:通过优化一个pairwise ranking目标函数进行item推荐(贝叶斯)

FPMC:基于马尔科夫链的序列预测问题

GRU4REC:这是推荐任务中的典型baseline,引入了RNN和attention 机制来捕获用户的主要目的。

STAMP:获取当前session中用户的一般兴趣和最后一次点击的当前兴趣。

2.4 实验结果

 

与各种baseline方法相比,SR-GNN在P@20和MRR@20可以达到目前最好的效果。其中Yoochoose 1/64是只选取Yoochoose中session出现时间最近的1/64个session作为训练集,Yoochoose 1/4是只选取Yoochoose中session出现时间最近的1/4作为训练集。实验结果表明,在这两种不同处理中,SR-GNN可以更好的学习到不同的出现时间的session特征。

Session-based Recommendation with Graph Neural Networks & GNN_第15张图片

3. 总结

以上是对GNN的简单介绍和基于session序列的推荐算法(SR-GNN)的简单总结。更多的内容可以参考列出的两篇论文和参考文献。

参考文献

[1] https://blog.csdn.net/weixin_35479108/article/details/86308808.

[2] Ying Z, You J, Morris C, et al. Hierarchical graph representation learning with differentiable pooling[C]//Advances in Neural Information Processing Systems. 2018: 4800-4810.

[3] https://blog.csdn.net/sinat_28978363/article/details/96478415.

[4] https://blog.csdn.net/yfreedomliTHU/article/details/91345348.

[5] https://blog.csdn.net/maqunfi/article/details/99703993.

你可能感兴趣的:(论文解析)