推荐系统论文阅读

推荐系统论文阅读(十)-基于图神经网络的序列推荐算法

2020-06-26  本文已影响0人  推荐系统论文阅读

论文:

论文地址:https://arxiv.org/abs/1811.00855

论文题目:《Session-based Recommendation with Graph Neural Networks》SR-GNN

github:https://github.com/CRIPAC-DIG/SR-GNN

一 、背景

基于会话的推荐一般是将序列会话建模,将整个session进行编码,变成一个隐向量,然后利用这个隐向量进行下一个点击预测。但是这种方法没有考虑到item直接复杂的转换(transitions)关系,也就是item之间在点击的session中除了时间顺序外还有复杂的有向图内的节点指向关系,所以之前的方法不足以很好的对点击序列进行建模。

现有基于会话的推荐,方法主要集中于循环神经网络和马尔可夫链,论文提出了现有方法的两个缺点:

1)当一个session中用户的行为数量十分有限时,这些方法难以获取准确的用户行为表示。如当使用RNN模型时,用户行为的表示即最后一个单元的输出,论文认为只有这样并非十分准确。

2)根据先前的工作发现,物品之间的转移模式在会话推荐中是十分重要的特征,但RNN和马尔可夫过程只对相邻的两个物品的单向转移关系进行建模,而忽略了会话中其他的物品。

为了克服上述缺陷,本文提出了用图神经网络对方法对用户对session进行建模:

下面具体介绍怎么进行图序列推荐

二、模型结构与实验

2.1 符号定义

V = {v1,v2...vm}为全部的item,S = {v_{s,1} ,v_{s,2}...v_{s,n}  }为一个session里面按时间顺序的点击物品,论文的目标是预测用户下一个要点击的物品vs,n+1,模型的任务是输出所有item的预测概率,并选择top-k进行推荐。

2.3 会话图的构建

我们为每一个Session构建一个子图,并获得它对应的出度和入度矩阵。

假设一个点击序列是v1->v2->v4->v3,那么它得到的子图如下图中红色部分所示:

另一个例子,一个点击序列是v1->v2->v3->v2->v4,那么它得到的子图如下:

同时,我们会为每一个子图构建一个出度和入度矩阵,并对出度和入度矩阵的每一行进行归一化,如我们序列v1->v2->v3->v2->v4对应的矩阵如下:

这个矩阵里面的值是怎么计算的呢?下面讲一下:

看左边的出度矩阵,第一行为 0 1 0 0 ,代表着v1->v2,因为v1,只有一个指向的item,所以为1;看第二行,0 0 1/2 1/2,因为v2有指向v3和v4的边,所以进行归一化后每一个值都变成了1/2。入度矩阵的计算方法也是一样的,就不再说了。

2.3 基于Graph学习物品Embedding向量

本文采用的是GRU单元进行序列建模,将图信息嵌入到神经网络中,让GRU充分学习到item之间的关系,传统的GRU只能学到相邻的两个物品之间的关系,加入图信息后就能学到整个session子图的信息。

计算公式如下:

为了刚好的理解这个计算过程,我们还是使用之前那个例子:v1->v2->v3->v2->v4来一步步分析输入到输出的过程。

(1)a^{t}_{s,i} 是t时刻,会话s中第i个点击对应的输入,A_{s} 是n✖️2n的矩阵,也就是会话子图的完整矩阵,而A_{s,i} 是其中一行,即物品vi所对应的那行,大小为1✖️2n,n代表序列中不同物品的数量。

如果按照例子来看,如果i取2,那么A_{s,i} 为 [0 0 1/2 1/2 1/2 0 1/2 0]

进一步的,可以把A_{s,i} :拆解为[A_{s,i,in} ,A_{s,i,out} ]

(2)v^{t-1}_{i} 可以理解为序列中第i个物品,在训练过程中对应的嵌入向量,这个向量随着模型的训练不断变化,可以理解为隐藏层的状态,是一个d维向量。

   (3)  H是d*2d的权重向量,也可以看作是一个分块的矩阵,可以理解为H=[Hin|Hout],每一块都是d*d的向量。

那么我们来看看计算过程:

1)[v^{t-1}_{i} ...,v^{t-1}_{n} ] ,结果是d * n的矩阵,转置之后是n*d的矩阵,计作v^{t-1}

2)A_{s,i} :v^{t-1}H相当于[A_{s,i,in}  v^{t-1}H_{in} v^{t-1}H_{out}],即拆开之后相乘再拼接,因此结果是一个1 * 2d的向量。

上面就是完整的第i个点击的输入的计算过程,可以看到,在进入GRU计算之前,通过跟As,i矩阵相乘,把图信息嵌入到了神经网络中取,加深了神经网络学习到的item之间的交互信息。

此外,就是GRU的计算过程了,跟原始的GRU不一样的地方在于输入从xt变成了嵌入了图信息的as,i。

通样也有更新门和重置门,计算方法跟原始GRU一模一样。

这里的a^t_{s,i} 其实就是相当于原始gru中的x_{t,i} ,只不过在SR-GNN里面,进行一轮运算的时候i是没有变化,相当于每个物品单独进去GRU进行计算,得到自己的向量,也就是说在GRU的计算过程中,v^{t-1}是不断变化的,看一下源码更易于理解:

hidden就是公式里面的v^{t-1} ,在gru的每一个step计算中都会进行更新,这里我有个疑问,如果所有item的hidden都更新的话,那么应该是整个序列中所有的item并行进入GRU中进行计算,每一个step都得到自己的vector,当每个item的vector更新后,下一个step就重新根据新的v^{t-1} 计算a^t_{s,i} ,接着计算下一个step。

计算过程大概就是下面这样:

这里有四个GRU并行计算,没次更新自己的hidden状态,输入则考虑所有的hidden和图信息。

2.4 生成Session对应的向量

从上面的图看来,每一个item都要进行T个step得到自己的item-vec,所以经过T个step后,我们就得到了序列中所有item的向量,即:

图中用蓝色框框画出来的向量,有了这些向量后,我们怎么得到预测结果呢?这就引入了下一个问题。

观察上面的模型结构,我们看到attention,没错,我们认为一个session中的这些item-vec并不都对预测结果产生影响,有些item对结果影响很大,有些影响很小,所以我们进行了加权求和。同时,论文认为session对最后一个item-vec,s1=vn是重要的,所以单独拿出来:

公式(6)就是简单的attention操作,其实从公式上来看就是计算每个vi跟最后一个向量vn的权值,然后进行加权求和。

2.5 预测结果及模型训练

在最后的输出层,使用sh和每个物品的embedding进行内积计算,这里vi应该是item的embedding层出来的向量,而不是后面一直更新的hidden:

最后通过一个softmax得到最终每个物品的点击概率:

损失函数为交叉熵损失函数:

2.6 实验结果

从数据上来看,SR-GNN超过了经典的GRU4REC,这也说明了图信息的嵌入能带来更好的推荐效果。

三、总结

本论文很巧妙的将图信息嵌入的神经网络中,更高地让GRU学习到每个item之间的关系,不再局限于相邻的物品之间进行学习。近年来,图神经网络的思想和方法屡屡被用在推荐系统中,学好图神经网络应该是推荐系统的下一个热潮。

上一篇下一篇

猜你喜欢

热点阅读