NGCF阅读笔记

368 阅读2分钟

Neural Graph Collaborative Filtering

Q1
论文试图解决什么问题?
Q2
这是否是一个新的问题?
Q3
这篇文章要验证一个什么科学假设?
Q4
有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?
Q5
论文中提到的解决方案之关键是什么?
Q6
论文中的实验是如何设计的?
Q7
用于定量评估的数据集是什么?代码有没有开源?
Q8
论文中的实验及结果有没有很好地支持需要验证的科学假设?
Q9
这篇论文到底有什么贡献?
Q10
下一步呢?有什么工作可以继续深入?

1、问题描述

问题:对于user-item二部图,输入为ID embedding,传统CF方法无法显式编码user-item之间的交互信号,更无法处理高阶连通信息。

解决:GNN消息传递。

2、NGCF

image.png

2.0 Input node feature

h(0)=Embedding(ID)h^{(0)} = Embedding(ID)

2.1 邻居聚合

user和item的邻居聚合都分为两部分:(以user的聚合为例)

  • item-->user的消息

    • 正常的item消息传递iNuW1hi(l)\sum_{i \in N_u}W_1h_i^{(l)}
    • 为了让消息依赖于边关系的强弱(相似节点间传递更多的消息),user和item之间的点积:iNuW2(hi(l)hu(l))\sum_{i \in N_u}W_2(h_i^{(l)} \odot h_u^{(l)})
  • user-->自己的消息:W1hu(l)W_1h_u^{(l)}

hu(l+1)=σ(W1hu(l)+iNu1NuNi(W1hi(l)+W2(hi(l)hu(l))))hi(l+1)=σ(W1hi(l)+uNi1NuNi(W1hu(l)+W2(hu(l)hi(l))))h_u^{(l+1)} = \sigma \left(W_1h_u^{(l)} + \sum_{i \in N_u}\frac{1}{\sqrt{|N_u|}\sqrt{|N_i|}} (W_1h_i^{(l)} + W_2(h_i^{(l)} \odot h_u^{(l)})) \right) \\ h_i^{(l+1)} = \sigma \left(W_1h_i^{(l)} + \sum_{u \in N_i}\frac{1}{\sqrt{|N_u|}\sqrt{|N_i|}} (W_1h_u^{(l)} + W_2(h_u^{(l)} \odot h_i^{(l)})) \right)

2.2 层组合(concat所有层的输出)

hu=hu(0)hu(1)...hu(L)hi=hi(0)hi(1)...hi(L)h_u = h_u^{(0)} || h_u^{(1)} || ... || h_u^{(L)} \\ h_i = h_i^{(0)} || h_i^{(1)} || ... || h_i^{(L)} \\

从0层原始特征开始concat,借鉴jumping knowledge,整合不同阶的信息。

2.3 损失函数

yui=huhiLoss=u=1MiNujNulnσ(yuiyuj)+λΘ2y_{ui} = h_u \odot h_i \\ Loss = -\sum_{u=1}^{M} \sum_{i\in N_u} \sum_{j \notin N_u} ln \sigma (y_{ui} - y_{uj}) + \lambda||\Theta||^2

点积表示分数,bayes personalized ranking(BPR) loss希望u和i如果是邻居(j一般是通过负采样来实现),分越高越好。后面是L2正则化,防止过拟合。

3、实验

3.1 数据集

  • Gowalla:用户通过check-in共享他们的位置。保留至少有10个交互的用户和项目。
  • Amazon-book:产品推荐数据集
  • Yelp2018:取自2018年版的Yelp挑战赛。其中,餐厅、酒吧等当地企业被视为项目。

3.2 baseline

不基于图的方法

  • MF:基于矩阵分解的方法
  • NeuMF:基于神经网络的CF方法
  • ...

基于图的方法

  • HOP-Rec
  • GC-MC
  • PinSage

3.3 评估指标

  • recall@k(item集合评估指标)

    • 可以简单理解为,user的推荐集合中,和真实的user行为比较,相关的item所占的比例
    • recall=R(u)T(u)T(u)recall = \frac{|R(u) \cap T(u)|}{|T(u)|}
  • NDCG@k(item排序评估指标)

    • 按照排名依次衰减权重
    • DCGu=i=1L2r(i)1log2(i+1)DCG_u = \sum_{i=1}^L \frac{2^{r(i)} - 1}{log_2(i + 1)}, L为列表长度
    • NDCGu=DCGu/DCGu_trueNDCG_u = DCG_u / DCG_u\_true
  • zhuanlan.zhihu.com/p/67287992

3.4 实验结果

感觉recall和ndcg比较低啊。

image.png

不同层:

image.png

不同消息函数:

image.png