GraphRec阅读笔记

570 阅读2分钟

《Graph Neural Networks for Social Recommendation》

1、问题和任务描述

给出两种图结构:

  • user-item交互图:一般推荐任务都会给,已经有很多模型给出了建模方案,例如LightGCN
  • user-user关系图:一般是从社交网络中提取,可以给出朋友关系/亲密度

问题:假设朋友之间会有相似的喜好,通过user-user关系图中的朋友关系来强化当前user的embedding。

任务:预测缺失的用户评分(rating prediction)。

2、GraphRec

image.png

2.0 数据结构

  • user-item交互图:和之前的不同之处在于,行是user,列是item,边权重为用户对item的评分:整型值rating「1,2,3,4,5」;0表示没有进行评分。
  • user-user关系图:1代表边有连接关系,0表示没有。
  • pip_i表示原始user embedding,qjq_j 表示原始item embedding,ere_r表示rating embedding。

image.png

2.1 item -->(aggr) user

类似一般user-item图中,user对邻居item进行聚合的操作,得到hiIh_i^I。不同之处是加入了rating embedding的GAT。

xiax_{ia}表示用户uiu_i和商品vav_a的交互表示,ere_r为rating embedding,可以视为边的表示:

image.png (MLP)

αia\alpha_{ia}^*表示(邻居)商品vav_a对用户uiu_i的注意力权重:

image.png

image.png

user聚合邻居item得到表示:

image.png

问题解释
为什么先算出 xiax_{ia}然后再计算注意力系数的时候才和 pip_i拼接?而不是直接在计算注意力系数的时候拼接 er,pi,qae_r, p_i, q_a?把item的表示和rating的表示看做一个整体,user聚合的是“物品的评分”的表示。

2.2 user -->(aggr) user (关键)

user-user图中,根据2.1中生成的hiIh_i^I,user对邻居user的hiIh_i^I进行聚合,得到hiSh_i^S

image.png

hiLh_i^LhiSh_i^Sconcat后过一个MLP得到hih_i

问题解释
为什么计算注意力系数的时候把 hoIh_o^Ipip_i拼接?而不是把 hoIh_o^IhiIh_i^I拼接?或者把 pjp_jpip_i拼接?pip_i表示当前user(目标节点)的原始表示,hoIh_o^I表示邻居user在2.1中聚合item后生成的表示(代表邻居user o的潜在兴趣);在计算注意力系数的过程中,希望既能保留user本身的表示,又能用到邻居user的潜在兴趣。

2.3 user -->(aggr) item

和2.1一样,就是item和user颠倒了一下,换了一下字母。。得到item的表示zjz_j

image.png

image.png

2.4 predict

hih_izjz_jconcat后过一个MLP得到最终的预测分数。

2.5 loss

MSE loss:

image.png

符号表:

image.png

3、实验

3.1 数据集

社交推荐数据集:和一般的推荐数据集相比,有rating和social connection。

image.png

3.2 评估指标

评分推荐指标:

  • MAE:平均绝对误差,数值越小越好
  • RMSE:均方根误差,数值越小越好

3.3 baseline

未用到social recommend:(协同过滤)

  • PMF
  • NeuMF
  • ...

用到social recommend:

  • DeepSoR
  • GCMC+SN:用node2vec生成原始的user embedding。GNN方法

3.4 实验结果

和baseline的比较:

image.png

消融实验:

image.png

  • GraphRec-SN:去掉user-user社交网络那一部分,性能降低
  • GraphRec-Opinion:去掉评分embedding(ere_r),性能降低很多