论文代码解读——SRGNN(Session-based Reco
整体模型

数据处理
示例数据集:

主要有session_id,item_id,time
程序处理完数据后格式:
train.txt
[[session_id序列],[序列下一个session_id...]]

比如:
一个session_id中,根据时间顺序,用户点击了商品,1,2,3,4,5
就有序列([[1,2,3,4],[1,2,3],[1,2],[1]],[5,4,3,2])
test.txt
格式与train.txt相同
all_train_seq.txt
保存所有的session序列,只保存最长的那个
训练获得各个商品节点的embedding

获得最长的序列长度,对所有序列做补零操作

生成批数据
slices为序号,对最后一个序列做矫正

生成论文中的As矩阵


主要运用的即是GRU网络
输出得到各个item的embedding,shape为[self.batch_size, -1, self.out_size]
self.embedding是所有物品的向量,输出的只有batch_size中的物品向量
Sessing Embeddings构建

主要是一个Attention的使用

hybrid是进行拼接

训练
最后loss为两个loss相加
logits为n_node的数值大小,tar为真实数值,即真实下一个数
tf.nn.sparse_softmax_cross_entropy_with_logits()
传入的logits为神经网络输出层的输出,shape为[batch_size,num_classes],传入的label为一个一维的vector,长度等于batch_size,每一个值的取值区间必须是[0,num_classes),其实每一个值就是代表了batch中对应样本的类别。函数会进行softmax与one-hot操作。

测试为取出数值最大的前20.

总结
论文主要通过session_id、时间顺序来构建图谱,对图谱item进行embedding,随着迭代次数的增多,物品embedding表达会越来越好。通过item的embedding构建session的embedding,用到了Attention与拼接。模型最终是一次性预测后一个物品的概率。