论文阅读:Neural Graph Collaborative Filtering
论文链接:Neural Graph Collaborative Filtering, SIGIR’19
原理:
在user-item interaction graph 上使用 GNN 来学习 user 向量和item 向量,用户向量和项向量的内积来预测评分。
区别:
大部分论文使用 GNN 只是学习 user 向量,这篇论文的 item 向量也是使用GNN学习的
大部分论文是在知识图谱KG或者社交网络Social Network上使用GNN,这篇论文是在用户-项交互二部图上使用GNN
1. 摘要
学习 users 和 items 的向量表示是现代推荐系统的核心。
从早期的矩阵分解到最近出现的基于深度学习的方法,现有的工作通常通过从描述用户(或项目)的现有特性(如ID和属性)映射来获得用户(或项目)的嵌入。
这种方法的一个固有缺点是,隐藏在用户-项目交互中的协作信号没有在嵌入过程中编码。因此,由此产生的嵌入可能不足以捕获协作过滤效果。
将用户-项目交互更具体地集成到嵌入过程中二部图结构,提出了一种新的推荐框架神经图协同过滤算法(NGCF),该算法利用用户项图的结构,在用户项图上传播嵌入。这就导致了用户项图中高阶连通性的表达建模,有效地将协作信号显式地注入到嵌入过程中。
CF+GNN的原理
我们看到u 1和u 2 两个用户,分别购买了{ i 1 , i 2 , i 3 } 和{ i 2 , i 4 , i 5 }
如果我们把上面的关系看做图,那么就是一个Bipartite,
u 1的邻居是:{ i 1 , i 2 , i 3 }
I 2的邻居是:{ u 1 , u 2 }
u 2 的邻居是:{ i 2 , i 4 , i 5 }
那么整合后可以看到i 4其实是u 1 的高阶邻居(high-order connectivity),
如果我们把图网的卷积传播放进来,那么经过3次卷积后,i 4的表征信息就会通过aggregate进入u 1 ,然后进行类似相似度计算的时候,u 1 会比较倾向购买i 4.
从CF的角度来理解,u 1 和u 2两个用户是同一类用户,二者会倾向于购买同一类商品,就好比两个人都会喜欢购买手办之类的。因此u 2购买过i 4 ,那么系统会向u 1也推荐i 4
2. 模型架构
(1)嵌入层:提供用户嵌入和项嵌入初始化;
(2)多嵌入传播层:通过注入高阶连通性关系来细化嵌入;
(3)预测层:整合来自不同传播层的细化嵌入,输出用户-项目对的亲和度得分。
左边e u 1 是用户1的表征,右边e i 4 是商品4的表征
这里作者将每一层(上图中是三层,用上标区分)计算出来的结果concat得到结果,然后将用户和商品的表征进行相似度计算得到Loss,进行反向传播。
将不同层的结果进行concat有什么好处?
concat层多用于利用不同尺度特征图的语义信息,将其以增加channel的方式实现较好的性能
论文泛读
两段式摘要。
第一段:开篇先说RS的核心任务是学习users and items的表征
Learning vector representations (aka. embeddings) of users and items lies at the core of modern recommender systems.
现有的方法:矩阵分解→DL,基本思想都是高维表征到低维表征的映射
Ranging from early matrix factorization to recently emerged deep learning based methods, existing efforts typically obtain a user’s (or an item’s) embedding by mapping from pre-existing features that describe the user (or the item), such as ID and attributes.
现有方法的缺点:交互信息collaborative signal难以被现有方法捕获。
We argue that an inherent drawback of such methods is that, the collaborative signal, which is latent in user-item interactions, is not encoded in the embedding process. As such, the resultant embeddings may not be sufficient to capture the collaborative filtering effect.
第二段,第一句就开门见山we propose 什么什么, We develop什么什么
In this work, we propose to integrate the user-item interactions — more specifically the bipartite graph structure—into the embedding process. We develop a new recommendation framework Neural Graph Collaborative Filtering (NGCF), which exploits the useritem graph structure by propagating embeddings on it.
然后点出创新点collaborative signa+high-order connectivity
This leads to the expressive modeling of high-order connectivity in useritem graph, effectively injecting the collaborative signal into the embedding process in an explicit manner.
最后摆出实验结果
We conduct extensive experiments on three public benchmarks, demonstrating significant improvements over several state-of-the-art models like HOPRec and Collaborative Memory Network. Further analysis verifies the importance of embedding propagation for learning better user and item representations, justifying the rationality and effectiveness of NGCF.
Introduction
给出了CF的概念:Collaborative filtering (CF) addresses it by assuming that behaviorally similar users would exhibit similar preference on items.
给出基于CF的两个关键:
- embedding, which transforms users and items to vectorized representations.
- interaction modeling, which reconstructs historical interactions based on the embeddings.
为了更好的把collaborative signal进行融合,这里提出用用户商品之间的high-order connectivity来实现表征。
然后在这里用u 1 作为推荐对象给出了例子:
2.1讲的是模型的输入
2.2.1First-order Propagation.实际上是GNN的单层卷积表示
这里要提一下公式2里面有一个变量:p u i 这个表示discount factor,实际就是一个权重,例如张三喜欢周杰伦,我们推断李四是否喜欢周杰伦。由于周杰伦基本大家都喜欢,跟张三李四是不是同一类用户其实关系不大,因此这里就要对周杰伦参与计算加入discount factor。
另外在公式4里面的m u ← u 代表节点self aggregate。
2.2.2 High-order Propagation.实际上是GNN的多层卷积
2.3就是对上面模型框架图的讲解。
2.4.1Model Size对模型的参数个数进行了分析,2 L d l d l − 1 ,其中L是GNN的层数,d l是表征维度,比起基线的参数量相比,并没有增加多少。
2.4.2消息和节点的抓爆,这个第一次看到,有点意思。
2.5.2时间复杂度分析,第一部分是GNN卷积计算的时间复杂度,第二部分模型的prediction layer的时间复杂度
思考:
- 在第二层传播的时候 输入的数据:有一个上一层得到的用户嵌入,剩下的还是与该用户有交集物品的集合吗? 还是?
第二层用到的还是与该用户有交集的物品的集合,但是第二层用到的物品的表示(item embedding)和第一层用到的已经不一样了,需要注意图示中表示的上标 。
- NGCF的user和item的嵌入向量具体形式是怎么样的呢,就是数据输入是什么?
比如一共有3个用户,输入的数据集中分别用0、1、2来表示这三个用户。模型中会有一个矩阵W(纬度是3xN,3就代表三个用户,N代表用户嵌入的维度),可以通过nn.embedding这个方法得到每个用户对应的嵌入向量(类似于用索引取值,就比如用户0对应取到矩阵W的第一行,这就是用户0的嵌入向量了),之后通过反向传播更新参数W,最后就学习到了所有user的嵌入向量了。
看论文的时候要结合研究一篇论文的代码!这样才会清楚很多实现细节上的疑问,对理解别的论文也会有帮助!
NGCF等模型的推荐流程:
1)训练时,用户和物品的初始特征向量可以是随机生成的,也可以是预训练的属性特征,通过模型参数进行转换和学习后生成最终的特征表达,通过最终的特征表达的内积来表示用户u对项目i的评分预测。每个epoch里,设置一个batchsize,将训练集分为Iteration(n_batch= 训练集中用户个数除以batch_size)个batch,每个batch更新一次模型参数,每个epoch里计算一次loss函数,训练10个epoch的时候就是更新了10*Iteration次参数。每次Iteration(n_batch)从训练集里面随机取出一个batchsize的用户,对每个用户都从训练集中找一个positive的项目,找一个negtive的项目(就是不在训练集里的),根据取出的用户id、积极的项目id,和消极项目id从之前生成特征表示矩阵里面取出对应的embedding, 然后通过bpr loss函数计算他们内积之差,通过adam函数更新模型参数优化loss函数,
2)测试时,从测试集里取出所有的用户,用户数量太大,也分为若干batch,每个batch中的用户和数据集中所有的项目,他们的矩阵乘积则表示对应的预测评分,对于单个用户和物品的向量来说就是向量的内积。根据测试集所有用户的预测评分矩阵与测试集所有的用户对应的物品计算相应的召回率和准确率:从预测评分矩阵选取每个用户top_k的物品,查看这些物品是否在用户对应的交互物品中,从而计算召回率等指标。如果要看某一个用户的推荐物品,根据学习到的该用户的特征向量与所有物品的特征向量进行矩阵相乘,获得一个一维度的评分向量,对该向量进行排序后取出最优的物品。
总结:
这篇论文是关于图结构的协同过滤算法,在原始的矩阵分解和基于深度学习的方法中,通常是通过映射描述用户(或物品)的现有特征(例如ID和属性)来获得用户(或物品)的嵌入。从而利用user和item的embedding进行协同召回。但是作者认为这种方法的固有缺点是:在user与item的interaction数据中潜伏的协作信号(collaborative signal)未在嵌入过程中进行编码。这样,所得的嵌入可能不足以捕获协同过滤效果。这篇论文介绍了怎么利用数据中潜伏的协作信号。提出了一种新的推荐框架神经图协同过滤算法(NGCF),该算法利用用户项图的结构,在用户项图上传播嵌入。这就导致了用户项图中高阶连通性的表达建模,有效地将协作信号显式地注入到嵌入过程中。