RUCAIBox / RecBole-GNN

Efficient and extensible GNNs enhanced recommender library based on RecBole.
MIT License
167 stars 37 forks source link

[🐛BUG] SRGNN, GCSAN, NISER中的gnn消息聚合似乎没有使用边权重? #58

Closed LFM-bot closed 1 year ago

LFM-bot commented 1 year ago

您好,我查看了SRGNN等几个序列推荐模型的实现,发现他们没有使用节点的归一化出度入度作为的边的权重,这点似乎与原论文有区别?

hyp1231 commented 1 year ago

您好,感谢关注!我实现 SR-GNN 时是通过 PyG 的消息传递机制来实现节点归一化的,在消息传递时:

https://github.com/RUCAIBox/RecBole-GNN/blob/77d76b9e19436220b32fe61af95ffd95f17c1db7/recbole_gnn/model/layers.py#L63-L66

由于定义了聚合方式是 mean,所以消息表示除以的权重即为原论文中计算的节点的入度。而根据节点出度归一化的邻接矩阵则可以在 forward 中翻转 graph edge 来实现:

https://github.com/RUCAIBox/RecBole-GNN/blob/77d76b9e19436220b32fe61af95ffd95f17c1db7/recbole_gnn/model/layers.py#L89-L91

理论上与原论文/原实现应该是一致的。如果您发现这样的实现仍然有问题,也请不吝指出,谢谢!

LFM-bot commented 1 year ago

您好,抱歉回复得晚了,关于SRGNN等模型的实现确实是正确的,我进一步查看了会话图构造的相关代码,发现这个实现方式非常的高效,非常棒的工作!将会持续关注!