RippleNet: Propagating User Preferences on the Knowledge
Graph for Recommender Systems


代码: https://github.com/hwwang55/RippleNet

心得

(1)你需要知道Kg是如何起到作用的! KG的形式是什么!
(2)Ripple中的o是什么? 怎么起到一圈一圈的作用的!
(3)Ripple的获得是通过上一层,但是Ripple是如何减弱的呢? 代码呢? 怎么控制h-hop?怎么控制兴趣范围,防止太大?
(4)多个涟漪叠加?

核心创新点

其实就是利用了波纹的逐渐递减的原理,对应于相关性的逐渐递减,也就是权重! 将嵌入和路径结合,也就是路径上的统一作为嵌入! 经过函数后得到最后的结果

摘要

  • 方法要解决的问题
    本文将知识图作为边信息的来源,结合基于嵌入和基于路径的知识图感知方法,我们提出了RippleNet。
  • 具体点:
    与在水面上传播的实际波纹类似,RippleNet通过自动迭代地沿着知识图中的链接扩展用户的潜在兴趣来刺激用户偏好在知识实体集合上的传播。将用户历史点击物品激活的多个“涟漪”叠加,形成用户对候选物品的偏好分布,用于预测最终的点击概率。

引入

推荐策略:

协同过滤方法: 协同过滤(CF)考虑用户的历史交互,根据用户潜在的共同偏好进行推荐; 但是基于CF的方法会受到用户-项目交互稀疏和冷启动问题的困扰! 为了解决这些问题,研究人员建议在CF中加入边信息,如社交网络、用户/物品属性,图片和上下文等! 而其中知识图谱通常包含项目的事实和联系!
KG加入策略: (1)KG引入了items之间的语义关联,有助于发现项目之间的潜在联系,提高推荐项目的精度;(2)KG包含了各种类型的关系,有利于合理扩展用户兴趣,增加推荐条目的多样性; (3)KG将用户的历史记录与推荐记录连接起来,从而为推荐系统带来了可解释性。

推荐策略之KG嵌入

KG现有方法 一般来说,现有的kg-aware的推荐可分为两类:

第一类

第一类是基于嵌入的方法[32,33,43],该方法使用知识图嵌入(KGE)[35]算法对KG进行预处理,并将学习到的实体嵌入到推荐框架中。

方法

  1. Deep Knowledge-aware Network(DKN)将实体嵌入和单词嵌入设置为不同的通道, 之后设置一个CNN框架来将它们结合处理来提高进行新闻推荐;
  2. 而Collaborative Knowledge base Embedding(CKE)将一个item的知识图谱嵌入、文本和图像嵌入结合CF模块,统一到了贝叶斯框架中;
  3. signed Hetero-generous Information Network Embedding (SHINE)设计了深层次的自编码器来嵌入到情感网络、社交网络和摘要(知识)网络来进行名人推荐;

优缺点
基于嵌入的方法在利用KG辅助推荐系统方面表现出了很高的灵活性,但是这些方法采用的KGE算法通常更适合于图内应用,如链接预测,而不是推荐(也就是只是图中自己过家家,预测图内是不是有关系! )

第二类

第二种方法是基于路径的方法,这个探索了在KG中items之间不同关系的连接来给推荐系统一些不一样的引导。

方法

  1. 比如,个性化实体推荐(PER)和 Meta-Graph Based network将KG看做了一个异构信息网(HIN), 并且提取基于元路径/元图的潜在特征,表示沿着不同类型的关系路径(图)时,用户和items之间是不是有连通性。

优缺点
基于路径的方法以一种更加自然、更直观的方式使用KG, 但是它们严重依赖于手工设计的元路径,在实践中很难进行优化。 另一种问题是,在实体和关系不在同一个域中的特定场景(例如,新闻推荐)中,不可能设计手工制作的元路径!

第三类: 我们的方法

RippleNet用于预测点击率(CTR),以user-item对作为输入,输出用户参与(如点击、浏览)该物品的概率! 这个方法最重要的idea是更关注到传播: 对于每个用户,RippleNet将其历史兴趣视为KG中的种子集,然后沿着KG链接迭代地扩展用户的兴趣,以发现其相对于候选item的分层潜在兴趣。

优缺点
(1)RippleNet通过偏好传播将KGE方法自然融入到推荐中; (2) RippleNet可以自动发现从用户历史中的物品到候选物品的可能路径,而无需任何手工设计。

综上所述,本文的贡献如下:

  • 据我们所知,这是第一次在kg感知推荐中结合基于嵌入和基于路径的方法。
  • 我们提出了RippleNet,这是一个端到端的框架,利用KG来帮助推荐系统。RippleNet通过在KG中迭代传播用户偏好,自动发现用户的层次潜在兴趣。

2. 问题公式化

推荐系统中,U=u1,u2,...U = {u_1, u_2, ...}U=u1,u2,...V=v1.v1,...V = {v_1. v_1,...}V=v1.v1,...分别表示users和items,user-item交互矩阵Y={yuv∣u∈U,v∈V}\mathrm{Y}=\left\{y_{u v} \mid u \in \mathcal{U}, v \in \mathcal{V}\right\}Y={yuvuU,vV}是根据用户的隐性反馈来定义的,其中

其中1表示有隐式交互,比如点击、观看、浏览等行为; 除了交互矩阵Y,我们还有一个可用的知识图G,其中包含了大量的三元组(h,r,t)(h, r, t)(h,r,t), 其中h∈Eh \in{\mathcal{E} }hE, r∈Rr \in{\mathcal{R} }rRt∈Et \in{\mathcal{E} }tE表明了在KG中的头、关系和三元组的尾部! E\mathcal{E}ER\mathcal{R}R表明了KG中的实体和关系的集合! 而且一个实体可能和多个实体由不同的关系!

也就是user、items、Y、G(h、r、t输入E\mathcal{E}ER\mathcal{R}R)处理!

3 RIPPLENET

3.1框架


综述方法
输入: RIPPLENET将用户u和物品v作为输入
输出: 输出用户u点击物品v的概率。
对于输入用户u, 他的历史兴趣集VuV_uVu被作为KG的种子,之后扩展成不同的ripple setsSuk(k=1,2,...,H)S_u^{k}(k = 1,2,...,H)Suk(k=1,2,...,H),一个ripple setSukS_u^{k}Suk是远离种子集VuV_uVu的k-hop(s)的知识三元组! 这些ripple set用于与item embedding(黄色块)进行迭代交互,获取useru对item v(绿色块)的响应,然后将这些响应组合成最终的user embedding(灰色块)。

3.2 第一步: 获取Ripple Set

我们知道,如果我们喜欢一部电影是因为什么? 电影类型? 电影主演? 电影导演? 这些都是知识图谱中和电影相连接的关系!

定义1(相关实体) :给定交互矩阵Y和知识图G,定义user u的k-hop相关实体集合为

其中Eu0=Vu={v∣yuv=1}\mathcal{E}_{u}^{0}=\mathcal{V}_{u}=\left\{v \mid y_{u v}=1\right\}Eu0=Vu={vyuv=1}是用户过去点击过的物品集,可以看作是user u在KG中的种子集。
相关实体视为用户历史兴趣相对于KG的自然扩展。根据相关实体的定义,定义user u的k-hop ripple集如下:

定义2(纹波集) :user u的第k hop ripple set定义为从Eu(k−1)\mathcal{E}^{(k-1)}_{u}Eu(k1)开始的知识图谱三元集合:

“ripple”一词有两层含义:(1)用户对实体的潜在兴趣是由其历史偏好激活的,然后沿着KG中的链接逐层传播,从近到远。我们可以通过图3中所示的同心圆来进行类比。(2)用户在纹波集中的潜在偏好强度随着跳数k的增加而减弱,相关性也在减弱。

其中hop的k是需要我们留意的!
(1)在真实KG中大部分的实体都是sink entities,这意味着它们只有传入链接而没有传出链接,比如“2004”和“PG-13”
(2)在特定的推荐场景(如电影或书籍推荐)中,可以将关系限制在场景相关的类别中,以减少涟波集的大小并提高实体之间的相关性。例如,在图3中,所有关系都与电影相关,并且在它们的名称中包含单词“film”。
(3)在实践中,最大量的hop H的数量通常不会太大,因为与用户历史距离太远的实体可能带来更多的干扰,而不是积极的信号。我们将在实验部分讨论H的选择
(4)在RippleNet中,我们可以对一个固定大小的邻居集进行抽样,而不是使用一个完整的ripple集来进一步减少计算开销。这类采样器的设计是未来工作的重要方向,尤其是非均匀采样器的设计,以更好地捕捉用户的层次潜在兴趣。

3.3偏好传播

第一步: 首先是item的Embedding:
传统的基于CF的方法和他们的变体学习用户和物品之间的潜在的关系,然后使用一个评分函数!
在RippleNet中,则是探索用户对其Ripple集的潜在兴趣!以一种更加细粒度的方式对用户和items之间的交互建模(什么叫做细粒度????),我们提出了一种偏好传播技术!什么叫细粒度,就是
在图表2中,每个物品vvv和一个物品嵌入v∈Rdv\in\ \mathbb{R}^dvRd链接,其中d是维度; 根据应用场景物品Embedding可以包含one-hot ID、属性、bag-of-words(BOW词袋)或者是上下文信息!这就是细粒度!

第二步: 波纹集合和其概率
同时我们利用该Embedding vvv, 得到该用户u的1-hop波纹集Su1S_u^1Su1,而在该Su1S_u^1Su1中的每个三元组(hi,ri,tih_i, r_i, t_ihi,ri,ti)都会被分配一个相关概率,通过比较物品vvv和头部hih_ihi和关系rir_iri

其中Ri∈Rd×dR_i\in\ \mathbb{R}^{d\times{d}}RiRd×dhi∈Rdh_i\in\ \mathbb{R}^dhiRd是头部hih_ihi和关系rir_iri的Embedding! 而pip_ipi可以被看做是物品v和两者的相似性!
在得到相关概率后,我们取Su1S_u^1Su1关联概率的权重的和! 然后这个向量ou1o_u^1ou1被返回:


其中ti∈Rdt_i \in \mathbb{R}^{d}tiRd是tailtit_iti的嵌入! 向量ou1o_u^1ou1可以被看做用户u的关于物品vvv的点击历史VuV_uVu的一阶反应! 这类似于基于item的CF方法,但是,用户由他的相关项而不是独立的特征向量来表示,以减少参数的大小。
用户的兴趣是从它的历史记录VuV_uVu中转移过来的! 这就是preference propagation!

通过用ou1o_u^1ou1代替公式4中的vvv可以重复传播,最后可以得到ou2o_u^2ou2
最后item可以被计算通过融合所有的:

最后,结合用户嵌入和物品嵌入,预测点击概率:

其中是激活函数是

3.4学习算法

在RippleNet中,我们希望最大化模型参数的后验概率
通过观察知识图谱和隐式反馈矩阵

其中包括所有实体、关系和项目的嵌入。这等价于最大化

根据贝叶斯定理。在式(9)中,第一项p(Θ)度量模型参数Θ的先验概率。根据[43],设p(Θ)为零均值高斯分布,对角协方差矩阵:

在式子9中的第二个item是被观察的知识图谱
的似然函数。最近,研究员提出了许多知识图谱嵌入方法,包含translational distance models和semantic matching models! 而在RippleNet中,我们使用三种方式的张量分解方法来定义KGE的似然函数:

其中会等于1在下,否则会等于0; 基于(11)中的定义,在KGE中的实体-实体对和在preference propagation中的item-entity对可以在同一计算模型下被统一,Eq.(9)中的最后一项是已知Θ的隐式反馈与KG的似然函数,定义为伯努利分布的乘积

对Eq.(9)取负对数,则RippleNet的损失函数为:

其中V和E是所有items和实体的嵌入矩阵,IrI_rIr是在KG中的张量指标III的切片在关系r中,和R是关系R的嵌入矩阵。Eq(13)中,第一个term是交叉熵矩阵,预测值和真实值Y之间的差异; 第二项term测量KG IrI_rIr和重构指标矩阵之间的平方误差! 第三个term是防止过拟合!
解决上面的目标函数是很难的,因此我们采用了SGD来迭代的更新loss! 为了更有效,我们会根据消极取样策略进行随机取样(从Y中取样的positive/negtive交互和从知识图谱G中取样的true/false三元组)

3.5 Discussion

3.5.1 Knowledge Graph Embedding.(KGE)

KGE方法主要有两种:https://blog.csdn.net/qq_27590277/article/details/106263407
原文: https://ieeexplore.ieee.org/document/8047276/metrics#metrics
平移距离模型和语义匹配模型。前者使用基于距离的评分函数,后者使用基于相似度的评分函数。
仔细看看上面的解释!
解释为什么用知识图谱,以及图谱怎么嵌入!

但是上面的方法更加适合图内应用,如链接预测或者三重分类! 从这个角度来看,RippleNet可以看做专门设计的KGE方法!

3.5.2 Memory Network

记忆网络是一个recurrent attention模型,他们使用了一个外在记忆模块! 这个在外在内存上进行迭代读入操作使得记忆网络能够提取长距离的依赖!
原来作品专注于入门级或者句子级别,但是我们的工作在KG中处理实体级别的连接,这在执行多跳迭代时更加精细和直观!

3.5.3 注意力机制

在RippleNet中,tails会根据相似性来平均权重! 在他们联系的头、尾巴和某些item!

3.5.4 Ripple Superposition

我们会发现一个用户历史点击的不同items最终会经过不同的路径(关系)牵引到同一个entity! 这种重叠实体就是用户最大的兴趣!

4. Experiment

三个数据集: Movies、Books、Bing-News

由于MovieLens-1M和Book-Crossing是显式反馈数据,我们将它们转换为隐式反馈,其中每个条目都被标记为1,表示用户已经对项目进行了评分(MovieLens-1M的评分阈值为4,而Book-Crossing由于其稀疏性没有设置阈值),并对每个用户标记为0的未观看集进行采样,该集与被评级的集大小相同。

我们使用Microsoft Satori来为每个数据集创建知识图谱(从中选择知识图谱)。 首先,对于MovieLens-1M和book - crossing,我们首先从整个KG中选择关系名称包含“movie”或“book”且置信度大于0.9的三元组子集。给定sub-KG,我们收集所有valid 电影/书籍的id,通过匹配它们的名字和三元组的尾部,为简单起见,没有匹配或多个匹配实体的item被排除! 然后我们将id与所有KG三元组的头和尾进行匹配,从sub-KG中选择所有匹配良好的三元组,并迭代地将实体集扩展到four hops。


在总数据集中选择不同的hop后,多个数据集是不是有共同的raters(也就是实体交集)







不同hop

【十】推荐系统遇到知识图谱RippleNet相关推荐

  1. 深度融合 | 当推荐系统遇见知识图谱(三)

    NewBeeNLP原创出品 公众号专栏作者@上杉翔二 悠闲会 · 信息检索 本篇文章继续整理『推荐系统+知识图谱』这个lineup的后续,主要是2020年SIGIR,CIKM,RecSys的相关文章. ...

  2. 知识图谱论文阅读(九)【转】推荐系统遇到知识图谱之MKR模型

    文哥的学习笔记: https://www.jianshu.com/p/af5226c7fbbb 知识图谱特征学习在推荐系统中的应用步骤大致有以下三种方式: 依次训练的方法主要有:Deep knowle ...

  3. 论文浅尝 | 打通推荐系统与知识图谱: 第一个公开的大规模链接数据集合

    本文转载自:RUC智能情报站,知乎专栏链接:https://zhuanlan.zhihu.com/RucAIBox 前言:近年来,知识图谱(KB)被广泛应用于推荐系统(RS),但尚未有公开将推荐系统物 ...

  4. 推荐系统与知识图谱(2)

    推荐系统与知识图谱(2) Ref:如何将知识图谱特征学习应用到推荐系统? 将知识图谱作为辅助信息引入到推荐系统中可以有效地解决传统推荐系统存在的稀疏性和冷启动问题,近几年有很多研究人员在做相关的工作. ...

  5. 当推荐系统遇见知识图谱会发生什么?

    作者 | 上杉翔二   责编 | 张文 头图 | CSDN 下载自视觉中国 今天来看看『推荐系统 + 知识图谱』,又会有哪些有趣的玩意儿呢. Knowledge Graph 知识图谱是一种语义图,其结 ...

  6. 推荐系统和知识图谱论文推荐

    KDD2020 Graph-based Recommendation(基于图,不是知识图谱) 1. A Framework for Recommending Accurate and Diverse ...

  7. 如何将知识图谱特征学习应用到推荐系统?

    来源 | 微软研究院AI头条 将知识图谱作为辅助信息引入到推荐系统中可以有效地解决传统推荐系统存在的稀疏性和冷启动问题,近几年有很多研究人员在做相关的工作.目前,将知识图谱特征学习应用到推荐系统中主要 ...

  8. 领域应用 | 如何将知识图谱特征学习应用到推荐系统?

    本文转载自公众号:微软研究院AI头条. 编者按:在上周发表的"推荐算法不够精准?让知识图谱来解决"一文中,我们为大家介绍了日常生活中几乎每天都会用到的推荐系统,以及用来提高推荐系统 ...

  9. 知识图谱与推荐系统之《Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation》MKR

    依次训练的方法主要有:Deep Knowledge-aware Network(DKN) 联合训练的方法主要有:Ripple Network 交替训练主要采用multi-task的思路,主要方法有:M ...

最新文章

  1. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
  2. python语言的实验心得体会范文_实验报告个人心得体会范文
  3. Nginx源码阅读(ngx_http_process_request_line)
  4. 静态路由与动态路由概念及实例
  5. 使用机器学习预测天气_如何使用机器学习预测着陆
  6. mysql jdbc驱动_JDBC认识与实践
  7. python调用opengl_python的opengl操作
  8. 【论文】2019 年,智能问答(Question Answering)的主要研究方向有哪些?
  9. 传智播客 C/C++学习笔记 字符串替换
  10. 学术论文海报模板_论文深耕 | 第一次写学术论文无从下手?阅读写作套路来了!...
  11. matlab之在坐标区上添加图例函数legend
  12. 一、Scrapy爬虫概述
  13. 33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距
  14. JVM内存管理及垃圾回收
  15. 方寸微 T620 存储安全芯片 安全存储 USB3.0 U盘/移动硬盘
  16. LaTeX调整公式中部分字号及行距
  17. php气泡效果,ps绘制漂亮透明的泡泡效果
  18. 《嵌入式 - 嵌入式大杂烩》详解J-Link RTT打印
  19. 基于Android的聊天系统
  20. python程序设计基础山东联盟课后答案_Python程序设计基础(山东联盟)答案2020...

热门文章

  1. iOS获取某个日期后n个月的日期
  2. BJFU 质数相关
  3. 系统防止绕过程序直接数据库修改数据(金额等敏感数据)
  4. iOS开发周报-- 第一期
  5. 硬盘快速格式化和格式化的区别
  6. UDT源码剖析(四):UDT的GC线程相关过程代码注释
  7. 基于UDP高性能传输协议UDT
  8. 【漫画】25岁程序员 VS 35岁程序员,塑造自己的不可替代性,才能让自己更有价值 ​...
  9. 从资源池和管理的角度理解物理内存
  10. c html联调,JS与native 交互简单应用