现有的一些算法存在的缺点是没有对隐藏在用户(user
)和样本(item
)直接的交互信息进行学习编码,没有将其融入到嵌入向量的学习过程。文章中将这种交互信息称为collaborative signal
(而这个东西可以理解为用户-样本交互图的拓扑结构,在GCN和GraphSAGE等算法中都是有所体现的)。
本文的将用户-样本的交互信息加入到嵌入表达的学习过程中,可以将用户-样本之间的交互信息看做一个二分图。提出一个新的推荐系统框架NGCF(Neural Graph Collaborative Filtering)
,通过在图结构上传播嵌入表达对拓扑结构进行学习,有效的对高阶连接信息进行建模。该算法在3个公开数据集上测试,比HOPRec
和CMN
算法有很好的提升。
将用户u和样本i通过一个d维的向量进行表示,把所有的用户样本的向量拼在一起得到一个参数矩阵,可以看做是一个嵌入向量的查找表,如下:
利用CNN的信息传递机制进行构建,从而捕获图结构中的CF信号,并且对初始化后的用户样本的嵌入向量进行调节。首先给出单层传播过程的设计方案,然后推广到多层连续的层结构中。
直观上看,被交互的样本(item
)直接表现出来用户的偏好信息,类似的,与一个样本进行交互的用户(也就是与一个item有连接的user)可以看做是该样本的属性值,从而用于度量两个样本之间的协作相似度。在此基础上进行用户和项之间的嵌入传播,主要有以下两个操作过程:
(1)信息构造(Message construction
)
对于图中一个存在连接的用户-样本节点对(u,i)
,定义从i到u的信息为(从样本到用户的方向传递):
通过堆叠多层嵌入传播层来利用更高阶的连接信息,这种高阶的连接信息对于评估用户和样本之间的联系至关重要。通过堆叠l
层嵌入传播层,用户(或者样本)就会接收到自身l-阶
的邻居的信息。因此当在第l
层时,传播形式可以推广为:
其中各个字母为:
如下图所示,展示了一个最初节点的嵌入向量是如何传播到高阶邻居中的。
传播过程的矩阵形式
上述过程只是针对单个节点进行算法上的描述,为了能够对一批节点进行计算,给出了逐层的传播规则:
等式左边为所有用户节点和样本节点在第l层得到嵌入向量(此时为一个矩阵形式),其中I
为单位矩阵,L
为拉普拉斯矩阵,定义为:
其中R是一个交互矩阵,A是一个邻接矩阵,D矩阵为对角矩阵,具体取值见论文。同时更新用户和样本的节点信息可以进行高效的计算,并且不进行在GCN在大规模图中采用的节点采样策略。
经过L层传播之后,得到了用户u的多个嵌入表达,定义为:
将所有的嵌入表达进行连接:
其中||
表示拼接运算。通过调节L的值,就可以控制图中信息的传播范围。除了拼接方式,还可以通过其他聚合方式,比如加权平均,最大池化,LSTM等。选择拼接方式的原因是该方式比较简单,并且没有额外的参数加入,并且最近的工作中证明了其有效性。
最后通过内积运算得到用户对目标item的偏好:
为了模型参数的学习,利用pairwise BPR
损失进行优化,该损失方式考虑了观测到的交互和未观测到的交互的顺序,被观测的交互对用户偏好影响更大,优化目标如下:
其中O为数据集合,每一个数据都是一个三元组,(u,i)
表示已经观测的到交互,(u,j)
表示未观测到的交互(相当于常用的正负样本混合形式)。ln
右边的为sigmoid
函数,最右侧的一项为L2正则化项,防止过拟合,采用mini-batch
+adam优化器
进行参数训练,每一个batch从O中进行随机采样。
虽然NGCF算法每一层都有一个嵌入矩阵,但是每一层只引入了两个权重矩阵,与最精简基于嵌入的推荐系统模型–MF算法相比,本算法只引入参数:
其中L一般取值小于5。具体数值分析略(论文中举了一个具体数据集算了一下)。
为了解决过拟合问题,常常采用Dropout策略,在GCN的工作基础上,本文提出两种Dropout
策略,分别为message dropout
和node dropout
。第一种随机舍弃传送出的信息,如下图公式,按照概率p1
随机丢弃公式中计算出的信息,不会汇聚给用户的嵌入向量。也就是只有部分信息会用于给当前节点进行嵌入向量的调节。
第二种,随机冻结一些特定节点,使其不进行信息的向外传播,对于第l层而言,随机丢弃拉普拉斯矩阵中的(M+N)p2
个节点,其中p2为Dropout率。需要注意的是,只在训练时启用Dropout。