✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。
我是Srlua小谢,在这里我会分享我的知识和经验。🎥
希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮
记得先点赞👍后阅读哦~ 👏👏
📘📚 所属专栏:传知代码论文复现
欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙
目录
preprocess.py:对输入数据进行预处理符合模型输入要求
本文所有资源均可在该地址处获取。
原论文链接:https://ieeexplore.ieee.org/abstract/document/9721542
模版代码链接:https://github.com/MEICRS/GDSRec_rank
原论文研究背景与研究意义概述
这篇论文由中国科学技术大学团队于2023年发表在TKDE期刊上,主要研究领域是基于用户-用户和用户-事件社会关系的推荐生成。由于这些社会关系可以轻松地用图结构数据来表示,因此图神经网络在这一领域具有很大的发展潜力。然而,现有的基于图的算法在处理数据时往往忽略了用户或事件的偏好偏移量。作者给出的一个示例说明了这种偏移量的重要性:挑剔的用户给出的低评分并不一定意味着他们对产品的态度是消极的,因为这些用户通常会给出低评分,这可能会导致图结构数据分析产生误差。现有的方法通常将这种偏差作为标量融入模型训练中,但作者认为这种做法不足以捕捉所有相关信息。此外,作者指出,用户之间的社会联系也应被考虑在内,因为具有相似偏好的用户往往会对彼此产生更大的影响。基于此,作者提出了一种新的算法来解决这些问题。
论文所提出算法的主要贡献

这篇文章的主要贡献包括:
首先,作者将评价偏移量处理为向量,并将其融入到用户和事件的表征学习中。具体做法是计算用户与其他用户的评价差异向量,从而获得每个用户的评价偏移。具体做法是,他们对原始图进行去中心化处理,然后从中学习到用户和事件的表征。去中心化的图是基于原始图中的统计信息生成的。
接着,作者提出了一种用户-用户之间社会关系的建模方式,并将其融入到预测规则中,以提高推荐表现。
然后,基于去中心化图,他们提出了一种基于图神经网络(GNN)的社会推荐协同过滤模型。
最后,作者在两个数据集上验证了所提出算法的有效性,证明了其在处理用户偏好偏移量和社会关系建模方面的优势。
原论文中采用了大量的数学公式来表示算法过程,这里笔者认为实际上读起来有点费力,所以本文主要从感性的角度来对这篇论文进行讲解,尽量少用公式而是用文字描述来给大家建立一个感性的理解。
GDSRec算法原理与流程
问题定义

下面我们来具体介绍一下算法的原理。首先,我们的数据集中包含用户和事件(item)两类对象,用户对item会有一个评分(rating)。具体任务是预测数据集R中未观察到的评分,然后返回用于推荐的排名列表。
V={v1,v2,…,vM}(1)V={v1,v2,…,vM}(1)
U={u1;u2;...;uN}(2)U={u1;u2;...;uN}(2)
原文采用的建图方式是将用户和事件作为节点,用户-事件之间的连线权重为关系系数Tij,用于衡量两个用户的相似度。
Tij=∑vk∈{Rui∩Ruj}I(∣rki−rkj∣<=δ)(3)Tij=vk∈{Rui∩Ruj}∑I(∣rki−rkj∣<=δ)(3)
关系系数的计算方式可以看作是设定一个阈值,当两个用户对同一个事件的评分差距在阈值之内时,就将相似度加一,累加起来就是两个用户的相似度,这里称为关系系数。而用户-事件连线的权重为用户对事件的评分。然而,作者指出,直接使用这种原始图会带来一些不足,也就是无法准确反映真正的用户偏好。这是因为用户对事件的评分可能受到不同用户的打分标准的影响,从而导致误解用户的真实偏好。因此,作者对图结构进行了去中心化处理,以更好地捕捉用户的真实偏好。
去中心化图(decentralized graph)

去中心化图有三种不同的边:用户-事件、事件-用户、用户-用户。对于每个用户-事件交互的边,用原始权重减去所有权重的平均值得到新的权重,而用户-用户连线的权重保持不变。通过这种方式,作者将统计信息融入到图中。接下来,作者针对这种去中心化图进行了对用户、事件、社会联系三种方向的建模,从而计算出三种潜在因素偏移量。依据这些偏移量,可以计算出最终用户ui和事件vj的最终偏好评分,即:
rij^=12[E(ui)+E(vj)]+f(ui,vj)(4)rij^=21[E(ui)+E(vj)]+f(ui,vj)(4)
所提出方法(三种并行建模)

用户建模(user modelling)
hui=Tanh(W⋅GI(xil,∀vl∈R(ui))+b)(5)hui=Tanh(W⋅GI(xil,∀vl∈R(ui))+b)(5)
然后我们具体介绍一下作者提出的三种建模方式。我们以用户建模(user modeling)为例,期望得到的输出是潜在因素偏移量hui。整个流程可以用上面的公式表示,我们可以逐步拆分这个过程。
rijˉ=⌈∣rij−E(vj)∣⌉(6)rijˉ=⌈∣rij−E(vj)∣⌉(6)
首先,需要提到的是,在这个过程中使用的用户-事件交互权重都是进行取整后的。原文指出,使用小数进行embedding不太方便,但同时也提到一些量化方法可以解决这个问题,他们将这部分留作未来工作。前面提到,这篇文章的一大贡献是将评价偏移量处理为向量。
xij=LU([qvl⊕srijˉ])(7)xij=LU([qvl⊕srijˉ])(7)
具体做法是将事件vlvl与用户-事件交互的权重进行embedding后的表征进行拼接,然后通过一个多层感知机进行处理,从而融入到学习过程中。q,sq,s分别是事件uu和社会关联rr的表征,LULU是多层感知机,这种方法可以将该向量融入用户表征的学习过程中
GI(xij,∀vl∈R(ui))=∑vl∈R(ui)ηijxij(8)GI(xij,∀vl∈R(ui))=vl∈R(ui)∑ηijxij(8)
同时,作者指出,一个用户和相关联事件之间的每个关联对用户潜在因素的影响贡献是不同的。因此,他们采用了注意力机制来捕捉用户偏好中的差异。公式8中xx前面乘的系数实际上是注意力权重。需要注意的是,在输入注意力网络时,他们将前面的评价偏移向量与用户的embedding向量进行了拼接,然后通过一个两层神经网络进行处理。通过这一流程,就可以得到用户的潜在因素偏移量hui。
z1=Tanh(W1⋅[hui⊕hvj]+b2)(9)z1=Tanh(W1⋅[hui⊕hvj]+b2)(9)
z2=Tanh(W2⋅z1+b2)(10)z2=Tanh(W2⋅z1+b2)(10)
rijp=wT⋅z2(11)rijp=wT⋅z2(11)
事件建模(item modeling)和社会关系建模(social modeling)的处理方式与用户建模类似。三种建模处理后,我们可以得到三种潜在因素偏移量。基于此,偏好评分可以通过三层神经网络获得,用公式9,10,11表示。这个偏好评分可以理解为包括用户自己的意见和对其社会关联用户评级的参考。对于用户ui的社会关联用户,我们可以用相同的方式得到他们的偏好评分,从而得到方程f的返回值,计算方式如公式12。
f(ui,vj)=12(rijp+∑uk∈N(ui)λikrkjp)(12)f(ui,vj)=21(rijp+uk∈N(ui)∑λikrkjp)(12)
λik=Tik∑uk∈N(ui)Tikλik=uk∈N(ui)∑TikTik
最终,我们回到前面公式4就可以计算出用户ui和事件vj之间的最终评分。以这种方式就可以实现对用户更全面偏好信息的捕获,以及考虑到有着更强社会关联的用户对用户ui的影响。
模版代码讲解
main.py顶层文件:用于集成模与函数功能
main.py文件在这里仍然是起到一个调用模型和所有函数进行数据输入、处理、训练、结果输出的功能,值得注意的是这里原文作者使用了config参数定义的方式,让整个工程看起来更加简洁、标准



最低0.47元/天 解锁文章
2908

被折叠的 条评论
为什么被折叠?



