由于图神经网络(GNN)在高阶连通性学习表示方面的优势,基于GNN的协同过滤在推荐系统中得到了广泛的应用。此外,为了克服数据稀疏性问题,最近一些基于GNN的模型尝试将社交信息纳入其中,并设计对比学习作为辅助任务,以协助主要推荐任务。现有的GNN和基于对比学习的推荐模型以对称的方式学习用户和项目表示,并以复杂的方式利用社会信息和对比学习。上述两种策略导致这些模型要么对于用户和项目之间严重不平衡的数据集无效,要么对于用户和项目太多的数据集效率低下。在这项工作中,我们提出了一个对比图学习(CGL)模型,它以一种简单和强大的方式结合了社交信息和对比学习。CGL由三个模块组成:传播、readout和预测。传播模块递归地聚合和集成社交信息和兴趣信息,以学习用户和项目的表示。输出模块将所有传播层的用户嵌入平均值和最后一个传播层的项目嵌入平均值分别作为用户和项目的输出。预测模块使用兴趣图计算预测评分来强调兴趣信息。设计了三种不同的损失来确保每个模块的功能。在三个基准数据集上进行了大量的实验,验证了该模型的有效性。
随着网络的快速发展,用户越来越难从大量的冗余信息中提取有用的信息。推荐系统在解决这一问题中发挥着重要的作用,并已成为在电子商务、社交媒体和广告等许多领域提高经济效益的一个很有前途的解决方案。推荐系统的主要任务是为每个用户提供刚兴趣的项目,这为用户节省了大量的时间,增加了公司的周转率。最流行的推荐技术之一是协作过滤(CF),它根据所有用户的协作行为来推断每个用户对项目的兴趣,而不需要显式的用户和项目描述信息。矩阵分解(MF)是大多数可学习的CF模型的关键组成部分,它将用户-项目交互矩阵分解为两个低维潜在矩阵,用于用户和项目表示[6]。然而,由于协作信号不足,基于MF的模型并没有对用户和项目嵌入进行编码。为了获得好的CF嵌入,一种图神经网络(GNN)[7]已成功地应用于推荐系统[8–10]。由于GNN[11]的高阶连通性,基于GNN的模型可以从丰富的历史交互中挖掘包括高阶邻居在内的协作信号;因此,它可以生成更强大的节点表示。但在现实世界的场景中,总是很难收集到足够的历史交互信息。为了克服数据稀疏性的问题,许多先前的CF模型[12–14]将社交信息与历史交互信息结合起来,从而提高了推荐性能。近年来,为了进一步解决数据稀疏性问题,许多研究将自监督学习引入推荐系统。最流行的自监督学习技术是对比学习,它已成功地应用于许多领域。对比学习以对比的方式利用自监督信号,将正样本和目标嵌入拉近,并将负样本和目标嵌入推开。为了获得更好的推荐性能,许多现有的推荐模型[19–21]通过GNN框架对节点嵌入进行编码,并在学习过程中同时采用对比学习。虽然这些模型将“社交推荐”作为其目标之一,但它们仍然有以下固有的局限性需要解决。
首先,现有的基于GNN的模型[11,22]以相同的方式学习用户和项目的表示,而不考虑用户和项目的不同稀疏性。在现实场景中,用户和项目的数量或稀疏性通常是不同的。例如,在Flickr数据集[23,24]中,项目的数量几乎是用户的10倍。由于在稀疏性上的巨大差异,在学习阶段可以比项目更早地获得高质量的用户表示。因此,以相同方式学习的用户和项目的表示可能会降低嵌入质量,从而降低模型的推荐性能。
其次,虽然一些社交推荐研究已经努力将对比学习与社交行为结合起来,但仍难以将对比学习适当地应用到社交推荐中。一方面,现有的社会推荐模型[19,25]以一种相当复杂的方式利用对比学习,如编码超图和数据增强。这种复杂的方式可能会破坏原有的社会图谱结构,浪费社交信息。另一方面,现有的社会推荐模型[19,25]在预测过程中并没有直接利用社会信息,这可能会减少社交信息的影响。总之,现有的对比性学习方式增加了社交推荐模型的复杂性,但并没有充分利用社交行为中所包含的有用信息。
本文探讨了如何克服现有的基于GNN和对比学习的推荐模型的上述局限性,并提出了一种用于社会推荐的对比图学习(CGL)模型。在社交推荐系统中,每个用户都有两种邻居:历史交互项目和交互用户。一般来说,有相似偏好的用户更有可能成为朋友。同样地,亲密的朋友通常也有类似的偏好。因此,通过项目聚合和朋友聚合来描述每个用户的偏好是合理的,并要求从两个视图(用户-项目图或用户-用户图)中学习的用户表示具有一致性。这个论点促使我们简化了社交用户嵌入和兴趣用户嵌入之间的对比学习任务。此外,为了确保社交用户嵌入也参与了预测过程,我们受到一些传播模型的启发,以一种传播的方式学习用户嵌入。在扩散过程中的每一层,通过取社会用户和兴趣用户嵌入的平均值,得到集成的用户嵌入。此外,为了避免用户和项目[27]的不同稀疏性的消极影响,我们设计了一种针对用户和项目的非对称readout策略,分别将所有传播层的用户嵌入的平均值和最后一个传播层的项目嵌入作为输出。由于我们的模型的任务是为用户找出合适的项目,而不是挖掘潜在的社交朋友,所以我们在模型的最后为最终的聚合设置了一个额外的兴趣图。因此,确保历史上的互动行为比社交行为对推荐结果的影响更大是非常重要的。
综上所述,本工作的主要贡献如下:
本文的其余部分组织如下。第2节总结了推荐系统中的一些相关工作。第3节介绍了必要的符号,并描述了我们的模型。在第4节中,我们给出了一些实验结果来验证所提出的模型的有效性,并分析了超参数的影响。第5节总结了我们的工作,并讨论了未来工作中可能存在的一些问题。
我们简要回顾了基于MF的推荐模型和基于GNN的推荐模型。
2.1 基于MF的推荐
在推荐系统中,许多经典的协同过滤算法都属于矩阵分解(MF)[28]类。基于MF的模型将用户和项目投射到一个低维的潜在空间中,并通过一个向量[29]来表示一个用户或一个项目。用户向量和项目向量的内积表示用户对项目的满意度。基于MF的模型在推荐系统中得到了广泛的应用。SocialMF[30]在社交网络中使用了MF技术,并假设每个用户的特征都依赖于他/她的直接邻居。所以每个用户的特征向量都应该与社交邻居保持一致。TrustMF[31]考虑了信托传播的双重影响,分析了信任者和被信任者之间的不同含义。为了利用这两种对性能的不同影响,TrustMF还提出了一种综合策略,将信任者模型与被信任者模型[32]相结合。NeuMF[33]是第一个将MF的线性与神经网络的非线性相结合的模型。这表明了预训练在两种不同模型组合中的重要性,比基于MF的模型和基于深度神经网络(DNN)的模型具有更好的性能。DASO[34]通过使用生成式对抗网络(GAN)[35]动态地学习用户和项目的表示。
2.2 基于GNN的推荐
近年来,GNN在推荐领域已经展现出了其有效性。GNN的目的是学习每个节点的嵌入,其中包含邻居[36,37]的信息。作为最简单的GNN,LightGCN[22]除了邻居聚合之外没有任何复杂的操作,但它仍然达到了最先进的推荐性能。GraphRec是首次在社交推荐系统使用GNN。在该模型中,注意力机制被广泛地应用于聚合邻居信息。在聚合过程之后,可以通过将用户和项目嵌入到DNN中来获得评分。ConsisRec[39]将不同的社交联系考虑在内,并将其划分为上下文层和关系层。为了解决上下文层上的不同性,通过计算邻居嵌入与查询嵌入之间的距离得到一致性得分,然后将采样概率与一致性分数相关联,对一致性邻居进行采样。然后,采用注意力机制在关系层面上解决不一致性问题。 DiffNet++[24]构建了一个统一的框架来传播社交网络的社会影响和兴趣网络的兴趣影响。由于来自社交网络和兴趣网络的信息可以相互传播,因此它可以以回归的方式接收不同的信息,从而学习到更强大的图节点表示。SGL[26]首先将推荐引入对比学习,提高了GNN推荐的准确性和鲁棒性。SGL通过以不同的方式改变图的结构来生成具有不同视图的图,然后利用从这些视图生成的监督信号来设置一个辅助的自监督学习任务。SEPT[19]采用了与社交推荐相结合的对比学习。它通过数据增强功能构建了三个不同的视图,并且每个视图都对其他视图提供了监督信号。它首次采用对比学习的方法进行社交推荐,分别将推荐学习和对比学习作为主要任务和辅助任务。
在本节中,我们将介绍我们的CGL模型。图1展示了CGL的概述,它以一个用户和一个项目为例。CGL由三个具有不同功能的模块组成。
在第3.1节中定义了一些必要的符号。第3.2节、第3.3节和第3.4节分别介绍了传播模块、输出模块和预测模块。该模型的训练方法见第3.5节。最后,在第3.6节中分析了CGL的复杂性。
3.1 符号
传播模块有L层,每一层都由兴趣图聚合、社交图聚合及其它们的整合组成。第一层的输入是初始化的用户潜在嵌入 u ( 0 ) i u^(0)_i u(0)i和项目潜在嵌入 v ( 0 ) j v^(0)_j v(0)j,其他层的输入是它们各自的前一层的输出。在两个具有分层卷积的图中,递归的去建模用户的潜在偏好和项目的潜在偏好。LightGCN[22]是一个基于图卷积网络(GCN)的通用推荐模型,它丢弃了GCNs中的两个标准操作:特征变换和非线性激活。我们利用LightGCN在CGL中实现聚合操作。
为了在兴趣图Gr中聚合交互信息,我们通过LightGCN的方法聚合每个节点的邻居信息。具体来说,对于给定的用户i和项目j,让 u i ( l − 1 ) u_i^{(l-1)} ui(l−1)和 v j ( l − 1 ) v_j^{(l-1)} vj(l−1)分别表示来自第(l−1)层的用户嵌入和项目嵌入。第l层兴趣聚合过程如下。
其中, N i N_i Ni是由用户i交互的项目集合,Nj是与项目j交互的用户集合。LightGCN保持与标准GCNs[40]相同的归一化操作,即在聚合信息时使用当前节点和聚合节点的邻居数量进行归一化。该策略对于避免在图卷积操作中嵌入的不合理增加是相当必要的。
为了聚合社交图 G s G_s Gs的社交信息,我们也采用了基于LightGCN的节点聚合。请注意,在社交图中只有用户节点。设 u i ( l − 1 ) u_i^{(l−1)} ui(l−1)是来自(l−1)层的用户嵌入, T i T_i Ti与用户i相连接的社交邻居集合。第l层的社会聚集过程被定义为
如上式所示,LightGCN通过取当前节点和聚合节点的邻居数来进行归一化。
兴趣图上的聚合生成用户嵌入 p i ( l ) p_i^{(l)} pi(l),社交图上的聚合生成用户嵌入 q i ( l ) q_i^{(l)} qi(l)。这两个用户嵌入包含了关于用户i的不同信息,并进一步集成,以在第l层生成用户嵌入 u i ( l ) u_i^{(l)} ui(l)。我们简单地通过取 p i ( l ) p^{(l)}_i pi(l)和 q i ( l ) q^{(l)}_i qi(l)的平均值来对它们进行集成。我们在第l层得到了集成的用户嵌入为:
然后将集成的用户嵌入 u i ( l ) u_i^{(l)} ui(l)和聚合的项目嵌入 v j ( l ) v_j^{(l)} vj(l)输入到(l+1)层,从而将兴趣和社交信息在两个图中传播。通过在每一层集成社交用户嵌入和兴趣用户嵌入,我们可以连续更新集成的用户嵌入。因此,社交信息和兴趣信息之间的融合在卷积过程中变得越来越紧密。此外,虽然项目嵌入没有参与传播过程,但由于GNN中的高阶连通性,社交用户嵌入和项目嵌入仍然可以相互产生强大的影响,特别是当传播过程越来越深时。
CGL的传播过程是受到传播模型DiffNet++的有效性的启发,但它比DiffNet++要简洁得多。与DiffNet++不同,CGL不从用户或项目的其他属性特性中吸收任何信息和引入任何注意力机制。前者将花费我们大量的时间来处理属性特性,而后者将使用DNNs。因此,我们的扩散过程的时间复杂度比DiffNet++要低。
3.3 readout模块
在经过L层扩散过程之后,我们分别为用户和项目构造readout函数,然后将这些输出发送到后续预测模块中的最后一个兴趣图。我们构建readout的策略不同于现有的基于GNN的推荐模型。在现有的基于GNN的模型中,有两种策略可以为预测阶段或其他后续阶段准备嵌入。一种是取用户和项目的所有层的嵌入平均值,另一种是取最后一层的嵌入值。这两种策略都以对称的方式处理用户和项目,而训练数据中的用户和项目数量有很大的不同,这导致了模型无法学习用户和项目的良好表示。为了缓解这一问题,我们将这两种策略结合起来,构成用户和项目的readout,对用户采用前者,对项目采用后者。由于社交信息的大量使用,用户嵌入在扩散过程的每一层中都包含协作信号,这可以提高用户嵌入的质量。因此,在扩散过程的早期阶段就可以生成高质量的用户表示。这鼓励我们在扩散过程中使用所有的用户嵌入来构建用户的readout。具体来说,用户i的readout u i u_i ui被定义为传播过程中所有L层嵌入的平均值:
对于一个项目,由于项目数量大、稀疏、缺乏辅助信息,其在扩散过程早期的嵌入可能较差。因此,项目j的readout v j v_j vj被定义为其在传播过程的中最后一层的嵌入:
从等式5和等式6中可以看出,我们对用户和项目的readout策略是不对称的。
3.4 预测模块
考虑到推荐的任务是预测用户和项目之间的交互,我们添加了一个单独的兴趣图来强调他们的输出之间的交互信息的影响。分别通过在兴趣图中聚合 u i S 和 u_iS和 uiS和v_jS来生成最终的用户嵌入$ ^ u i u_i ui和项目嵌入$^ v j v_j vj。如下所示:
然后,预测模块定义了最终用户和项目嵌入之间的内积。
以内积作为排名分数来生成推荐。
3.5 模型训练
为了训练该模型,我们设计了传播模块的自监督损失和readout模块和预测模块的监督损失。在传播模块的每一层,兴趣图和社交图分别为每个用户生成两个用户嵌入。为了使对它们的集成更加合理,我们设计了一个自监督损失来使得同一用户的两个嵌入更相近。用户和项目是推荐系统的两个方向,我们可以为给定的用户推荐项目,也可以为给定的项目选择用户。根据这两个任务,我们分别设计了readout模块和预测模块的监督损失。通过联合优化上述三个损失,去学习模型中的参数。
3.5.1 自监督损失
我们通过等式4,在传播过程的每一层中集成了社交用户嵌入和兴趣的用户嵌入。这种直接集成策略可以使两组嵌入数据相互补充,但不能保证它们在训练过程中相互了解。因此,我们在传播模块中引入了一个社交对比学习损失。其主要思想来自于社交行为通常可以反映用户的偏好的假设。因此,用户社交图中的嵌入应该与兴趣图中的嵌入有密切联系。
其中,r(·)为扰乱操作。那么用户嵌入矩阵的第i行可以是用户i的潜在嵌入,而项目嵌入矩阵的第j行可以是项目j的潜在嵌入。因此,对于用户i和项目j,我们可以从P中得到兴趣用户嵌入 p i p_i pi,从Q中得到真实社交用户嵌入 q i q_i qi,从~ Q中得到假社交用户嵌入~ q i q_i qi。我们假设虚假的社交用户嵌入与其相应的兴趣用户嵌入有很大的不同。我们将每个假的社会用户嵌入与其对应的兴趣用户嵌入之间的一致性最小化,并且在传播模块中的社交对比学习损失可以表示为:
3.5.2 监督损失
在预测模块中,我们可以通过等式9得到评分分数.为了确保观察到的交互比未观察到的交互获得更高的分数,我们使用成对贝叶斯个性化排序(BPR)损失作为我们的主要损失来进行模型学习,这是为了使观察到的交互排名在未观察到的交互前面。CGL中的BPR损失的公式为:
通过最小化BPR的损失,一个观察到的交互作用的预测分数可以被强制执行为高于其未观察到的对应物。然而,作为两两的损失,它忽略了预测分数和真实分数之间的一致性。此外,BPR损失只给给定的用户提供正样本和负样本,这对项目是不公平的,使得很难学习好的项目表示。
为了克服这个缺点,我们采用逐点损失作为BPR损失的补充,并将其表示为:
其中,每个 u i u_i ui和 v j v_j vj分别由方程式5和方程式6给出。显然,这种损失为一个给定的项目提供了正的和负的监督信号,而不是一个给定的用户。通过最小化等式15,预测分数可能与真实分数相一致。值得一提的是,我们在readout模块中定义了损失,而不是在预测模块中。这与大多数现有的异构损失不同,后者通常结合了预测模块中的逐点损失和成对损失。主要原因是我们通过使用不同的用户和项目表示来分离预测任务和排序任务。逐点损失关注于给定项目的用户,并增强了直接来自于兴趣图和社会图上的聚合操作的用户表示。这些增强的用户和项目表示被用于聚合排序任务的兴趣图上的信息。
3.5.3 最终的损失
对于CGL模型的三个模块中的上述三个损失,我们将其最终损失设为:
其中,α和β是两个额外的正则化器,分别控制Lc−uu和Lc−uv的强度;Θ是所有可学习参数的集合;λ控制着L2正则化的强度。在算法1中给出了CGL的整体训练过程。