方向 | 推荐系统
学校 | 天津理工大学 前言
不知道大家有没有感觉,在日常生活中用到推荐一词的时候经常是用在社交场景中的。到一个地方旅游让朋友推荐一下旅游景点,学习某一项技术的时候让朋友推荐一些有什么书可以看。在众多推荐系统的方向中,我觉得社会化推荐这一分支更加符合现实生活中的情况。而自从深度学习技术在计算机视觉、自然语言处理中大放异彩,许多研究者也将深度学习技术运用到了社会化推荐领域中。
本文主要围绕将深度学习技术应用到社会化推荐场景的主题进行阐述,先介绍了一些在社会化推荐系统中所常用的一些数据集,接着总结了几篇关于深度学习技术应用到社会化推荐的文章。值得注意的是 ,本文所选的论文都是在Github中有开源实现的,可以让读者有进一步的理解。
社会化推荐中常用的数据集
社会化推荐与传统的推荐任务不同,所需要的数据集不光需要用户与项目的评分信息,还需要用户与用户间的社会关系信息。常用的数据集如下:
1. FilmTrust
下载地址:
https://github.com/guoguibing/librec/tree/3.0.0/data/filmtrust
该数据集是2011年6月从FilmTrust网站上抓取的一个小型数据集。包含用户对电影的评分信息和用户间的社交信息。数据量较小,只有35497条评分数据。1853条社交数据。
2. Epinions
下载地址:
http://www.trustlet.org/epinions.html
该数据集规模较大,包含用户对电影的评分信息和用户间的社交信息。该数据集有两个版本,其中一个版本还包括了用户间的不信任关系信息。
3. CiaoDVD
下载地址:
https://www.librec.net/datasets.html
该数据集包含了用户对他们购买过的项目的评分和用户间的社交连接。
4. Delicious
下载地址:
https://grouplens.org/datasets/hetrec-2011/
此数据集包含来自Delicious社交书签系统的用户间的社交网络,书签和标签信息。
5. Yelp
下载地址:
https://www.yelp.com/dataset
该数据集规模较大,需要手动提取相关信息。
0 前深度学习时代——社会化推荐的进化之路
Recommender systems with social regularization, WSDM, 2011.
在没有使用深度学习技术之前,早期的社会化推荐基于一个假设:一个用户的行为偏好与他的朋友应该是相似的,同时行为偏好相似的人更倾向于建立联系。2011年Hao Ma等人[1]提出的SoReg方法,使用了社交正则化项为学术研究提供了一个新的方向。
在[1]中提出了两个模型,分别为基于平均的正则化(Average-based Regularization)和基于个体的正则化(Individual-based Regularization )。
基于平均的正则化的函数如下:
该函数假设每个用户的喜好都接近用户朋友的平均喜好。该函数具体包含三个部分,第一部分为基本的矩阵分解模型,第二部分为社交约束项,第三部分为正则化项,用来缓解模型的过拟合问题。
这里我们具体对第二部分的社交约束项进行介绍, , 分别是用户i,用户f的用户向量。 是用户i的朋友集合。Sim(i,f)是用户i与用户f的相似度函数,在论文中使用了空间相似度(VSS)和皮尔森相关系数(PCC)用来定义用户之间的相似性。这种约束形式使用了用户间的相似度区别对待了所有的朋友,通过除以用户朋友的相似度之和计算出用户朋友的平均喜好。
基于个体的正则化函数如下:
该函数也具有三个部分,第一部分和第三部分与基于平均的正则化模型相同,不同的是社交约束项。基于平均的正则化模型对有着不同喜好朋友的用户不敏感。因此基于个体的正则化模型将用户和他的每个朋友单独施加限制: 。更多关于社会化推荐文章总结请移步社会化推荐浅谈。
1 使用深度学习技术挖掘社交网络数据
Collaborative User Network Embedding for Social Recommender Systems, SDM, 2017.
该论文认为直接使用明确的社交连接可能会存在问题:1)获取可靠的社交联系很困难,只有一小部分用户会明确表示自己信任的朋友; 2) "冷启动"用户在评分和社交上都很"冷";3) 用户可以与不同喜好的人建立社交联系,直接使用明确的社交连接可能会误导推荐。因此,该论文中提出从用户对商品的反馈(如评分或购买)中提取隐含的社交信息,设计了CUNE方法,为每个用户确定出top-k语义好友。再将top-k语义好友的信息加入到MF和BPR中,提出了CUNE-MF和CUNE-BPR。
CUNE方法可以看成是DeepWalk[3]的扩展,具体的计算过程如下图所示:
第一步,使用one-mode映射方法从用户-项目网络中得到协同用户网络。其中,用户-项目网络表示用户-项目反馈,通过使用两组节点(即用户和项目)进行连接,边 表示用户i对项目j进行了反馈(例如评分或购买)。接着通过one-mode映射方法构建一个只有用户的网络,如果两个用户都对至少一个项目有反馈那么则将这两个用户连接起来,构成协同用户网络。边的权值表示他们共同反馈的项目数量。
第二步,则进行偏置随机游走产生用户节点序列。游走中的第i个节点表示为 ,通过两种方法从其前置节点 的邻居中选择它: (1) 如果 的所有邻居已经被访问(在前一步被选择),那么就随机选择一个邻居,(2) 否则(存在一些 的邻居没有被访问),选择一个 的未访问的邻居,通过 ,这里 是节点v和x之间的边权值,S是正则化因子, ( 是v的未访问邻居的集合)。
第三步,将第二步产生的节点序列输入到SkipGram模型中,得到每个用户的低维嵌入表示。最终通过计算每两个用户的嵌入表示的余弦相似度,提取出top-k语义好友。产生语义好友之后就可以将其加入到MF和BPR中,函数如下:
CUNE-MF:
CUNE-BPR:
CUNE-MF与SoReg在github中有开源实现:
https://github.com/hongleizhang/RSAlgorithms
2 使用图神经网络进行社会化推荐
Graph Neural Networks for Social Recommendation, WWW, 2019.
近年来,图神经网络(GNNs)在学习图数据方面表现出了强大的能力,它可以很好地将节点信息和拓扑结构结合起来。在社会化推荐中,数据可以表示为用户-用户的社交图和用户-项目反馈图(如图2所述),因此Wenqi Fan等人提出GraphRec利用图神经网络来学习用户和项目的隐因子(latent factors)[4]。
提出的模型结构下图所示,由3个部分组成:用户建模,项目建模和评分预测。第一个部分是用户建模,用来学习用户的隐因子向量,作者引入社交聚合和项目聚合来分别处理用户-用户社交图和用户-项目反馈图,通过结合项目空间和社交空间的信息来获得用户隐因子。第二个部分是项目建模,引入了用户聚合将用户对项目的意见用于项目建模,来学习项目隐因子。第三个部分为评分预测,通过将用户建模产生的用户隐因子与项目建模产生的项目隐因子结合起来输入到MLP中进行评分预测。最后使用RMSprop作为优化器进行训练,使用dropout缓解过拟合。
Github上有GraphRec的两个代码实现版本(Pytorch实现),地址如下:
作者开源:
https://github.com/wenqifan03/GraphRec-WWW19
用户开源: https://github.com/Wang-Shuo/GraphRec_PyTorch
3 注意力机制在社会化推荐中的应用
Social Attentional Memory Network: Modeling Aspect- and Friend-level Differences in Recommendation, WSDM, 2019.
用户与朋友的喜好不可能完全相同,在多数情况下只有部分匹配;另外,朋友的影响强度可能是不同的,不是所有朋友都可以平等的影响用户。因此Chong chen等人提出了SAMN( Social Attentional Memory Network)[5],将注意力机制运用到了社会化推荐中。
SAMN基于隐式反馈和社交网络进行推荐。SAMN的架构如下图所示,主要包含两个模块:基于注意力的记忆模块和朋友层面的注意力组件。基于注意力的记忆模块用来解决用户与朋友喜好的差异,朋友层面的注意力组件用来选择信息丰富的朋友,解决朋友的影响强度差异。
开源地址:
https://github.com/chenchongthu/SAMN
4 通过动态图注意力网络进行基于会话的社交推荐
Session-based Social Recommendation via Dynamic Graph Attention Networks, WSDM, 2019.
该论文作者认为用户的兴趣是动态的并且受到朋友的影响,不同的主题可能会依赖不同的朋友。因此Weiping Song等人提出DGRec[5],通过动态图注意力网络进行基于会话的社交推荐。DGRec使用了循环神经网络(RNN)对用户的动态行为进行建模,并使用图注意力神经网络对上下文相关的社交影响进行建模。
DGRec由四个模块组成(如下图所示)。首先使用了RNN建模用户在当前会话中的动作,捕获用户动态变化的兴趣。接着使用短期兴趣和长期兴趣为朋友的兴趣建模,短期兴趣根据最近消费的物品的序列放入RNN中得到一个向量表示,朋友的长期兴趣用一个固定向量表示,代表朋友的平均兴趣,之后朋友的兴趣就是短期兴趣向量和长期兴趣向量的拼接。然后将用户和朋友放到社交网络图中,图中的节点用得到的兴趣向量表示,边代表社交联系,再通过图注意力网络来获取朋友对用户的动态影响,得到的向量和用户向量拼接得到最后的用户向量,最后使用softmax来得到一个可能的物品的概率分布进行推荐。
开源地址:
https://github.com/DeepGraphLearning/RecommenderSystems/tree/master/socialRec
总结与个人观点
深度学习在社会化推荐中的应用也可谓是大放异彩,图神经网络与注意力机制在社会化推荐的应用给研究者开辟了一个新的方向,但是目前深度学习在社会化推荐领域的研究远不如点击率预估那样火热。我觉得可能存在以下几个方面的问题:
社交数据跟用户对物品的反馈数据一样还是存在稀疏性的问题,甚至比反馈数据更加稀疏,因为很多用户不愿意共享自己的社交信息,几个常用的数据集中的社交数据也非常稀疏。 深度学习是个好用的工具但并不是一把万能钥匙。由于深度学习具有黑盒的性质,使得人们无法理解其中的原理,深度学习研究者都自称自己是调参侠。知乎上有关于调参经验的总结: 深度学习 “炼丹” 技巧总结 。 因此,当需要给出确切解释的时候,深度学习并不是首选项。
以上提及的论文只是深度学习在社会化推荐中的冰山一角,更多相关的研究成果也欢迎大家进行分享,大家共同进步。另外也希望各位大佬能发扬开源的精神,能找到论文和代码都具备的项目实属不易。最后,本人也只是一名在读水硕,若有错误,欢迎指正,互相学习。
参考文献
[1] Ma et al. Recommender systems with social regularization. WSDM, 2011.
[2]Chawla et al. Collaborative User Network Embedding for Social Recommender Systems. SDM, 2017.
[3]B. Perozzi et al. Deepwalk: Online learning of social representations. KDD, 2014.
[4] Fan et al. Graph Neural Networks for Social Recommendation. WWW, 2019.
[5] Chen et al. Social Attentional Memory Network: Modeling Aspect- and Friend-Level Differences in Recommendation. WSDM, 2019.
[6] Song et al. Session-based Social Recommendation via Dynamic Graph Attention Networks. WSDM, 2019.
[7] [社会化推荐浅谈]https://zhuanlan.zhihu.com/p/38413102
[8] [基于动态注意力机制图神经网络的会话社交推荐系统阅读笔记]https://zhuanlan.zhihu.com/p/73637262
欢迎加入推荐交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注推荐技术 推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏