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进行预处理,并将学习到的实体嵌入到推荐框架中。
方法:
- Deep Knowledge-aware Network(DKN)将实体嵌入和单词嵌入设置为不同的通道, 之后设置一个CNN框架来将它们结合处理来提高进行新闻推荐;
- 而Collaborative Knowledge base Embedding(CKE)将一个item的知识图谱嵌入、文本和图像嵌入结合CF模块,统一到了贝叶斯框架中;
- signed Hetero-generous Information Network Embedding (SHINE)设计了深层次的自编码器来嵌入到情感网络、社交网络和摘要(知识)网络来进行名人推荐;
优缺点:
基于嵌入的方法在利用KG辅助推荐系统方面表现出了很高的灵活性,但是这些方法采用的KGE算法通常更适合于图内应用,如链接预测,而不是推荐(也就是只是图中自己过家家,预测图内是不是有关系! )
第二类
第二种方法是基于路径的方法,这个探索了在KG中items之间不同关系的连接来给推荐系统一些不一样的引导。
方法:
- 比如,个性化实体推荐(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
=
u
1
,
u
2
,
.
.
.
U = {u_1, u_2, ...}
U=u1,u2,...和
V
=
v
1
.
v
1
,
.
.
.
V = {v_1. v_1,...}
V=v1.v1,...分别表示users和items,user-item交互矩阵
Y
=
{
y
u
v
∣
u
∈
U
,
v
∈
V
}
\mathrm{Y}=\left\{y_{u v} \mid u \in \mathcal{U}, v \in \mathcal{V}\right\}
Y={yuv∣u∈U,v∈V}是根据用户的隐性反馈来定义的,其中
其中1表示有隐式交互,比如点击、观看、浏览等行为; 除了交互矩阵Y,我们还有一个可用的知识图G,其中包含了大量的三元组
(
h
,
r
,
t
)
(h, r, t)
(h,r,t), 其中
h
∈
E
h \in{\mathcal{E} }
h∈E,
r
∈
R
r \in{\mathcal{R} }
r∈R和
t
∈
E
t \in{\mathcal{E} }
t∈E表明了在KG中的头、关系和三元组的尾部!
E
\mathcal{E}
E和
R
\mathcal{R}
R表明了KG中的实体和关系的集合! 而且一个实体可能和多个实体由不同的关系!
也就是user、items、Y、G(h、r、t输入 E \mathcal{E} E、 R \mathcal{R} R)处理!
3 RIPPLENET
3.1框架
综述方法:
输入: RIPPLENET将用户u和物品v作为输入
输出: 输出用户u点击物品v的概率。
对于输入用户u, 他的历史兴趣集
V
u
V_u
Vu被作为KG的种子,之后扩展成不同的ripple sets
S
u
k
(
k
=
1
,
2
,
.
.
.
,
H
)
S_u^{k}(k = 1,2,...,H)
Suk(k=1,2,...,H),一个ripple set
S
u
k
S_u^{k}
Suk是远离种子集
V
u
V_u
Vu的k-hop(s)的知识三元组! 这些ripple set用于与item embedding(黄色块)进行迭代交互,获取useru对item v(绿色块)的响应,然后将这些响应组合成最终的user embedding(灰色块)。
3.2 第一步: 获取Ripple Set
我们知道,如果我们喜欢一部电影是因为什么? 电影类型? 电影主演? 电影导演? 这些都是知识图谱中和电影相连接的关系!
定义1(相关实体) :给定交互矩阵Y和知识图G,定义user u的k-hop相关实体集合为
其中
E
u
0
=
V
u
=
{
v
∣
y
u
v
=
1
}
\mathcal{E}_{u}^{0}=\mathcal{V}_{u}=\left\{v \mid y_{u v}=1\right\}
Eu0=Vu={v∣yuv=1}是用户过去点击过的物品集,可以看作是user u在KG中的种子集。
而相关实体视为用户历史兴趣相对于KG的自然扩展。根据相关实体的定义,定义user u的k-hop ripple集如下:
定义2(纹波集) :user u的第k hop ripple set定义为从
E
u
(
k
−
1
)
\mathcal{E}^{(k-1)}_{u}
Eu(k−1)开始的知识图谱三元集合:
“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中,每个物品
v
v
v和一个物品嵌入
v
∈
R
d
v\in\ \mathbb{R}^d
v∈ Rd链接,其中d是维度; 根据应用场景物品Embedding可以包含one-hot ID、属性、bag-of-words(BOW词袋)或者是上下文信息!这就是细粒度!
第二步: 波纹集合和其概率:
同时我们利用该Embedding
v
v
v, 得到该用户u的1-hop波纹集
S
u
1
S_u^1
Su1,而在该
S
u
1
S_u^1
Su1中的每个三元组(
h
i
,
r
i
,
t
i
h_i, r_i, t_i
hi,ri,ti)都会被分配一个相关概率,通过比较物品
v
v
v和头部
h
i
h_i
hi和关系
r
i
r_i
ri:
其中
R
i
∈
R
d
×
d
R_i\in\ \mathbb{R}^{d\times{d}}
Ri∈ Rd×d和
h
i
∈
R
d
h_i\in\ \mathbb{R}^d
hi∈ Rd是头部
h
i
h_i
hi和关系
r
i
r_i
ri的Embedding! 而
p
i
p_i
pi可以被看做是物品v和两者的相似性!
在得到相关概率后,我们取
S
u
1
S_u^1
Su1关联概率的权重的和! 然后这个向量
o
u
1
o_u^1
ou1被返回:
其中
t
i
∈
R
d
t_i \in \mathbb{R}^{d}
ti∈Rd是tail
t
i
t_i
ti的嵌入! 向量
o
u
1
o_u^1
ou1可以被看做用户u的关于物品
v
v
v的点击历史
V
u
V_u
Vu的一阶反应! 这类似于基于item的CF方法,但是,用户由他的相关项而不是独立的特征向量来表示,以减少参数的大小。
用户的兴趣是从它的历史记录
V
u
V_u
Vu中转移过来的! 这就是preference propagation!
通过用
o
u
1
o_u^1
ou1代替公式4中的
v
v
v可以重复传播,最后可以得到
o
u
2
o_u^2
ou2;
最后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和实体的嵌入矩阵,
I
r
I_r
Ir是在KG中的张量指标
I
I
I的切片在关系r中,和R是关系R的嵌入矩阵。Eq(13)中,第一个term是交叉熵矩阵,预测值和真实值Y之间的差异; 第二项term测量KG
I
r
I_r
Ir和重构指标矩阵之间的平方误差! 第三个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