文章地址
代码地址
1.1简介
随着社交网络的出现,社交推荐已经成为个性化服务的重要技术。最近,基于图的社交推荐通过捕捉高阶社交影响显示出了有希望的结果。大多数基于图的社交推荐的经验研究直接将观察到的社交网络纳入公式,并基于社交同质性产生用户偏好。尽管这种方法有效,但我们认为现实世界的社交网络不可避免地存在噪声(存在多余的社交关系),这可能会阻碍精确的用户偏好特征描述。然而,由于缺乏标签,识别和移除多余的社交关系是具有挑战性的。
在这篇论文中,我们专注于从信息瓶颈的角度学习去噪的社交结构以促进推荐任务。具体来说,我们提出了一个新颖的图瓶颈社交推荐(Graph Bottlenecked Social Recommendation, GBSR)框架来解决社交噪声问题。GBSR是一个模型无关的社交去噪框架,旨在最大化去噪社交图与推荐标签之间的互信息,同时最小化去噪社交图与原始社交图之间的互信息。这使得GBSR能够学习到最小但足够的社交结构,有效地减少多余的社交关系,并增强社交推荐。
从技术上讲,GBSR由两个精心设计的部分构成:偏好引导的社交图细化和基于Hilbert-Schmidt Independence Criterion(HSIC)的瓶颈学习。广泛的实验结果证明了所提出的GBSR的优越性,包括与各种基础模型结合时的高性能和良好的泛化能力。
1.2问题陈述
在基础的社交推荐场景中,有两种类型的实体:用户集合 U(∣U∣=M) 和项目集合 V(∣V∣=N)。用户有两种行为,即用户-用户社交关系和用户-项目互动。我们使用矩阵 S∈R(M×M) 来描述用户-用户社交结构,其中每个元素 Sab=1 如果用户 b 关注用户 a,否则 Sab=0。类似地,我们使用矩阵 R∈R(M×N) 来描述用户-项目互动,其中每个元素rai=1 如果用户 a 与项目 i 互动,否则 rai=0。给定用户 a、项目 i 和社交关系矩阵 S 作为输入,基于图的社交推荐系统旨在推断用户 a 将与项目 i 互动的概率:,其中 Gθ表示图神经网络(GNN)公式。
因此,基于图的社交推荐的优化目标定义如下:
目标:找到最佳的 GNN 参数 θ,使得模型预测的用户-项目互动概率与实际互动尽可能接近,从而最小化损失函数。
然而,用户社交网络通常存在噪声,包含冗余关系,直接使用 S 来推断互动概率可能会降低推荐准确性。在这项工作中,我们专注于学习鲁棒的社交结构 S′ 以提高推荐性能:
含义:这是社交去噪函数,目的是从原始社交网络 S 中学习一个鲁棒的社交结构 S′。
目标:通过去噪函数 Fϕ,从原始社交网络S中移除冗余的社交关系,得到一个更鲁棒的社交结构S′。
因此,图噪声社交推荐的最终优化描述如下:
含义:这是考虑社交去噪后的最终优化目标。
目标:同时优化 GNN 参数 θ 和社交去噪函数的参数 ϕ,使得模型在去噪后的社交结构 S′ 上预测的用户-项目互动概率与实际互动尽可能接近,从而最小化损失函数,提高推荐系统的准确性和鲁棒性。
信息瓶颈(Information Bottleneck, IB)是机器学习中的一种表示学习原则,它寻求在数据拟合度和减少无关信息之间取得平衡。给定输入数据 X,Z 是隐藏表示,Y 是下游任务的标签,它们遵循马尔可夫链 X→Z→Y。信息瓶颈原则描述了一个最优表示应该保留对下游任务的最小充分信息。
含义:如何找到最优的隐藏表示Z∗
目的:最小化数据表示的复杂性:通过最小化I(X;Z),公式鼓励模型去除不必要的信息,即那些对预测 Y 没有帮助的信息。
最大化对下游任务的有用性:通过最大化 I(Y;Z),公式确保 Z 保留了对预测 Y 有用的信息。
找到最佳平衡:通过 β 的调节,可以在减少数据复杂性和保持预测能力之间找到最佳平衡。
信息瓶颈原则已广泛应用于机器学习任务,如模型鲁棒性、公平性和可解释性。
在这项工作中,我们将信息瓶颈原则引入到鲁棒的社会去噪学习中,其目的是寻找对推荐任务来说最小但足够的社交结构。
由于缺乏可用的社交去噪先验知识,引入了用户偏好信号来指导社交图的去噪。为了保证社交去噪和推荐任务之间的权衡,通过图信息瓶颈原则来优化GBSR。因此,GBSR的目标是:
最大化: I(R;S′)−βI(S′;S),由于 I(R;S′) 的计算不可行,我们将所有节点纳入一个中介进行计算。因此,我们得到GBSR的最终优化目标:
目的:
保留有用信息:通过最大化 I(R;U,V,S′),确保S′ 包含对推荐系统有用的信息,即用户与项目之间的互动信息。
去除冗余信息:通过最小化 I(S′;S),减少 S′ 与原始社交图 S 之间的依赖,从而去除不必要的社交关系。
权衡:通过 β 的调节,可以在保留有用信息和去除冗余信息之间找到最佳平衡。
2.1GBSR框架
框架概述
整个流程可以简化为:首先通过用户偏好去噪社交图,然后利用信息瓶颈优化去平衡去噪过程中的信息保留和冗余关系删除,从而增强推荐系统的表现。
用户偏好引导的社交去噪
为了实现GBSR的目标,首先需要生成去噪后的社交图。作者将这一过程描述为一个图的边丢弃(edge dropout)问题,主要通过用户偏好信号来优化社交图的结构。
给定原始社交图S,去噪社交图 S′=Fϕ(U,S)是通过为每一条社交边分配一个丢弃概率来生成的。具体来说,社交图中的每条边会以一定概率被丢弃,表示该关系可能是冗余的。
每条边的丢弃概率通过用户偏好信号来决定。用户的偏好相似性越高,保留这条社交关系的概率越大。用户的偏好表示通过用户-物品交互数据学习得出,利用公式计算用户之间的边权重:其中,ea和 eb分别表示用户 a 和用户 b 的偏好表示,g()是一个用于计算边权重的融合函数,通常通过多层感知器(MLP)实现
社交图中的每条边按照伯努利分布进行丢弃,丢弃概率通过用户偏好相似性来确定。为了使这个丢弃过程可微分,作者采用了concrete relaxation的技术,将伯努利分布替换为一个可微的Sigmoid函数来实现参数化。
互信息最大化:I(R;U,V,S′)
这一部分介绍了如何最大化去噪后社交图与推荐任务之间的互信息,确保去噪后的社交图能够有效地提升推荐性能。
互信息的最大化意味着去噪后的社交图需要保留足够的信息以支持推荐任务。为了实现这一点,作者推导出互信息的下界,并使用BPR(Bayesian Personalized Ranking)损失作为这个下界的优化目标。
互信息最小化:I(S′;S)
在这一部分,作者介绍了如何最小化I(S′;S),即减少去噪社交图S′与原始社交图S之间的互信息,目标是去除社交图中的冗余社交关系。直接计算互信息的上界是困难的,因此作者采用了HSIC(Hilbert-Schmidt Independence Criterion)作为互信息的近似度量。
HSIC是一种统计方法,用于衡量两个变量之间的依赖性。它通过在再生核希尔伯特空间内评估两个分布之间的交叉协方差算子来定义。公式如下:
其中KX和KY是变量X和Y的两个内核函数,X'和Y'是X和Y的两个独立副本则可估计为:
这个公式是高斯核(Gaussian Kernel)函数的一个表达式,用于计算两个数据点 xi和 xj之间的相似度,通常用于支持向量机(SVM)和核方法(Kernel Methods)中。公式如下:
关于HSIC(Hilbert-Schmidt Independence Criterion,希尔伯特-施密特独立性准则)的最小化问题,用于衡量两个随机变量 S′ 和S 之间的独立性。公式如下:
用于正则化推荐模型的学习过程,以减少模型对于原始社交图的依赖,同时保留对推荐任务有用的信息。通过最小化这个正则化项,模型学习到的表示 EB′能够减少与输入社交图EB的依赖,从而去除噪声和冗余的社交关系,提高推荐结果的质量和鲁棒性。公式如下:
GBSR框架实例化
在本节中,作者以LightGCN-S为基础模型,具体实现了GBSR框架。该过程包括以下步骤:
图构建:基于用户和物品的交互关系以及用户之间的社交关系构建图结构。
节点嵌入更新:通过多层图卷积神经网络(GCN)更新节点嵌入表示。
去噪社交图应用:将去噪后的社交图应用于推荐任务,通过BPR损失函数优化模型参数。
最终的优化目标定义为:
3.实验设计及论文复现
3.1数据集:
DoubanBook, Yelp, and Epinions三个公开数据集
3.2实验方法:
进行分组,一组为直接使用社交关系的推荐模型,另外一组是使用了去噪以后的社交关系的相同的社交关系的推荐模型。
3.3评价指标:
1.召回率(Recall)
在推荐系统中,我们只关心正确推荐的有多少,也就是用户真实喜欢的,并不会关心推荐错的,所以我们用召回率,而不是准确率.
2.归一化折损累计增益(NDCG)
NDCG用作排序结果的评价指标,评价排序的准确性。
推荐系统通常为某用户返回一个item列表,假设列表长度为K,这时可以用NDCG@K评价该排序列表与用户真实交互列表的差距。
3.4消融实验:
作者对提出的GBSR(Graph Bottlenecked Social Recommendation)框架进行的消融研究(Ablation Study),目的是探索框架中每个组成部分的有效性。
模型变体:
GBSR:完整的GBSR模型,包括偏好引导的社交去噪和基于HSIC的瓶颈正则化。
GBSR-w/o HSIC:移除了HSIC瓶颈正则化的GBSR模型,仅保留偏好引导的社交去噪模块。
实验结果
发现:在所有情况下,GBSR-w/o HSIC的性能都比完整的GBSR模型差,甚至比基线模型(backbone model)更差。
含义:这一结果表明,HSIC瓶颈正则化是GBSR框架中一个重要的组成部分,它对于提高推荐系统的性能有显著的贡献。
3.5实验复现:
作者在github上进行了代码开源,同时提供了torch和tensorflow两个版本,文中的实验结果通过tensorflow版本得到.
作者提供了requirements.txt,指明了代码所需要的包,如下所示:
python版本为3.7.0,但如果直接使用pip install -r requirement.txt的话,会出现一些问题,faiss1.7.1版本应该只有linux系统,除此之外torch很容易下载失败。
也尝试过使用conda构建虚拟环境,然后依次安装每一个包,但是依旧会发生安装失败和版本冲突的问题。
于是尝试使用wsl+Ubuntu来进行环境搭建和运行代码。
3.6运行结果:
training.txt分析:
dataset: 表示使用的数据集名称,这里是 "douban_book",可能指的是豆瓣图书数据集。
runid: 运行标识符,用于区分不同的训练运行。
device_id: 指定训练模型的设备ID
epochs: 训练的总轮数,这里是 "1000",表示模型将训练1000轮。
batch_size: 每批训练数据的大小,这里是 "2048",表示每次训练将使用2048条数据。
lr: 学习率,控制模型在训练过程中参数更新的速度,这里是 "0.001"。
topk: 推荐系统中用于评估的 top-k 值,这里是 "20",意味着评估时会考虑模型推荐列表中前20个最可能的物品。
early_stops: 提前停止训练的轮数,如果模型在设定的轮数内没有改进,则停止训练,这里是 "10"。
num_neg: 负样本的数量,用于训练的负例数目,这里是 "1"。
gcn_layer: 图卷积网络的层数,这里是 "3",表示模型包含3层图卷积。
num_user: 用户的数量,这里是 "13024"。
num_item: 物品的数量,这里是 "22347"。
latent_dim: 潜在特征空间的维度,这里是 "64"。
l2_reg: L2 正则化的系数,用于控制模型的复杂度,防止过拟合,这里是 "0.0001"。
beta: 超参数,可能与模型的某个特定部分有关,这里是 "40.0"。
sigma: 超参数,可能与模型的某个特定部分有关,这里是 "2.5"。
edge_bias: 边偏置,可能用于调整图中边的权重,这里是 "0.5"。
social_noise_ratio: 社交噪声比率,可能用于模拟用户行为中的不确定性,这里是 "0"。
data: 这部分文本不完整,但通常它可能指向数据的路径或与数据相关的其他信息。
Mean_weight:表示模型中权重的平均值。这个值在训练过程中可能会变化,用于反映模型权重的总体大小。
Epoch:表示训练周期的序号,这里为1,意味着这是模型完成的第一个训练周期。
Train_AUC:表示训练集上的AUC(Area Under the Receiver Operating Characteristic Curve)值,是模型分类性能的一种评价指标。AUC值范围从0到1,值越高表示模型性能越好。这里的0.6541表示模型在第一个训练周期后的性能。
Loss_rank:表示排名损失,是推荐系统中常用的一种损失函数,用于优化物品的排序。这里的0.6931表示当前周期的排名损失。
Loss_reg:表示正则化损失,用于防止模型过拟合。这里的0.0000表示当前周期的正则化损失非常小,接近于0。
Loss_GIB:表示全局信息损失,这是一种考虑全局信息的损失函数,用于进一步提升模型性能。这里的1.5327表示当前周期的全局信息损失。
topk:表示在推荐系统中用于评估的 top-k 值,这里为20,意味着评估模型时会考虑模型推荐列表中前20个物品的性能。
R@20:表示召回率(Recall@20),是推荐系统中的一个评估指标,表示在推荐列表的前20个物品中,与用户实际互动的物品数量占用户实际互动物品总数的比例。这里的0.0013表示在第一个训练周期后,模型的召回率为0.13%。
P@20:表示精确率(Precision@20),是推荐系统中的一个评估指标,表示在推荐列表的前20个物品中,与用户实际互动的物品数量占推荐物品总数的比例。这里的0.0015表示在第一个训练周期后,模型的精确率为0.15%。
N@20:表示归一化折扣累积增益(Normalized Discounted Cumulative Gain@20),是推荐系统中的一个评估指标,用于衡量推荐列表中前20个物品的质量和排序。这里的0.0013表示在第一个训练周期后,模型的NDCG值为0.13%。
traintime:表示训练时间,以秒为单位。这里的26.2524表示完成第一个训练周期所需的时间为26.2524秒。
valtime:表示验证时间,以秒为单位。这里的2.6106表示在第一个训练周期后进行模型验证所需的时间为2.6106秒。