一、这篇论文解决什么问题
session-based recommendation:用户未登录状态下, 仅仅依赖匿名会话进行用户下一个行为预测的一种算法(session-based recommendation)
作者认为此论文发表前其他方法的不足:
1. 如果一个session内用户行为数据不多,效果不好
2. 只注意到了行为序列中两个连续item的转移,没有注意到全局的item转移
作者如何克服上述不足:GNN
二、这篇论文的几个核心点
如何构造图
每一个session都是一个图,构造图就是构造连接矩阵:
这里需要注意的是:
1. 构造时,边的权重归一化了
2. 每个连接矩阵都是每个session特有的,不参与参数更新,对这个session来说是固定的,而GNN中的权重W是所有session共用的,是需要在训练的时候更新的
如何得到item的embedding
在每个session的图中,按照如下公式进行计算:在每个时间步,这个session的节点一起更新。当更新所有的子图直到收敛时,就可以得到每个节点的vetcor了,也就是item的embedding结果
如何得到一个session的embedding
结合局部和全局embedding:
1. 局部的embbeding,最后一次点击的item的embedding
2. 全局的embedding,soft-attention机制
预测:训练好之后,每个item的embedding是固定的了,可以直接拿来用,然后再得到当前session的embedding,点积就是得分,最后通过softmax得到item的预测概率
训练:损失函数为交叉熵
三、关于模型的几点分析
1. 连接矩阵的构造方式
SR-GNN:针对每个session构造,实际上有两个矩阵
SR-GNN-NGC:在所有session的基础上构造全局的连接矩阵,实际上有两个矩阵
SR-GNN-FC:所有high-order关系都表示成1,其他表示成0,形成的矩阵和SR-GNN的矩阵放在一起(把high-order关系原来的0替换成1),实际上有两个矩阵(什么是high-order关系:[v1, v2, v3, v4]这个序列,v1->v2就是1-order,v1->v3就是2-order,v1->v4就是3-order)
实验说明,SR-GNN效果最好,SR-GNN-GNC中全局对本来在某session内出/入度高的边影响较大,尤其是各个session中这个出/入度差异大的时候,这个影响更明显,SR-GNN-FC中将high-order的关系表示成连接是不太合理的,影响模型效果。
2. session embedding方式
SR-GNN:局部embedding + 全局embedding
SR-GNN-L:局部embedding
SR-GNN-AVG:session内item的embedding的平均
SR-GNN-ATT:全局embedding
实验说明,依然是SR-GNN最好,证明了结合的好处;SG-GNN-ATT优于SG-GNN-AVG,说明session内部会存在噪声行为,attention机制可以提取有意义的行为;SR-GNN-L和SG-GNN-ATT接近,都优于SG-GNN-AVG,说明当前兴趣点和长时间的偏好都很重要,其实就是SR-GNN这种都考虑了的模型更好。
3. 模型的稳定性
SR-GNN以及几种变种,在长短session上效果都不错,稳定性很高
四、对这篇论文的感受
优雅
建模优雅,对模型的变种和分析也优雅,就感觉这个事儿这样做是恰当的。
PS:本文的所有公式和图表都来自于论文:Session-based Recommendation with Graph Neural Networks,有理解不对的地方,欢迎指正