前两篇,我们介绍了如何使用循环神经网络来做基于会话的推荐,本篇我们更进一步,来看一下如何使用近期比较火热的图网络来做基于会话的推荐。
本文介绍的论文题目为:《Session-based Recommendation with Graph Neural Networks》
论文下载地址为:https://arxiv.org/abs/1811.00855
代码地址为:https://github.com/princewen/tensorflow_practice/tree/master/recommendation/Basic-SRGNN-Demo(代码和参考代码一致,写了点注释)
参考代码地址为:https://github.com/CRIPAC-DIG/SR-GNN
好了,开始正题吧,在模型介绍时,我们尽量配合代码,让过程显得更加易懂一些。
1、背景介绍
现有基于会话的推荐,方法主要集中于循环神经网络和马尔可夫链,论文提出了现有方法的两个缺陷:
1)当一个会话中用户的行为数量十分有限时,这些方法难以获取准确的用户行为表示。如当使用RNN模型时,用户行为的表示即最后一个单元的输出,作者认为只有这样并非十分准确。
2)根据先前的工作发现,物品之间的转移模式在会话推荐中是十分重要的特征,但RNN和马尔可夫过程只对相邻的两个物品的单向转移关系进行建模,而忽略了会话中其他的物品。
针对上面的问题,作者提出使用图网络来做基于会话的推荐,其整个模型的框架如下图所示:
接下来,我们就来介绍一下这个流程吧。
2、模型介绍
2.1 符号定义
V={v1,v2,...,vm} 代表所有的物品。s=[vs,1,vs,2,...,vs,n]代表一个session中按照时间先后排序的用户点击序列,我们的目标是预测用户下一个要点击的物品vs,n+1
2.2 子图构建
我们为每一个Session构建一个子图,并获得它对应的出度和入度矩阵。
假设一个点击序列是v1->v2->v4->v3,那么它得到的子图如下图中红色部分所示: