emm…图片复制过来显示不了(因为我太懒了0.0),要看图的话可以去我的博客瞅瞅,嘿嘿嘿
对了,有些英文短句假如翻译成中文,阅读的时候就太搞脑子了,所以我干脆就不翻译了
我的博客地址:https://hikg.net/archives/123/
作者认为: high-order relations(which connect two items with one or multiple linked attributes) are an essential factor for successful recommendation.
传统基于CF的推荐,将每个interaction建模为一个独立的数据实例,并没有考虑到他们的关系。
下图是推荐的一个实例,u1是需要提供推荐的一个目标user。黄、灰圈代表的是由high-order关系发现的关键users、items,但是它们被传统方法忽视了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcfcAiFD-1619524788028)(https://516000.xyz/images/2021/03/20/2021-03-20-09.10.32.png)]
CF方法:注重于相似user的历史记录(比如也观看了i1的用户u4、u5)
SL方法(supervised learning):强调拥有相同属性e1的相似items,例如i2
Path-based方法抽取出蕴含高阶信息的path,然后将他们送入预测模型。为了解决2个节点间的path过多的问题,采用路径选择算法、或是定义meta-path的模式来限制path。
第一种方法(路径选择)对最终的性能有较大影响,但是它并没有针对推荐目标进行优化。
定义meta-path需要领域知识,这是劳动密集型的工作
设计了能够捕捉KG结构的额外损失项,来规范推荐模型的学习。
这些方法没有直接将high-order的关系插入到为推荐优化的的模型中,而仅仅是以一种隐式的方式对他们进行编码
本篇论文提出的KGAT模型:递归地传播来自一个节点邻居(可以是user、item、attribute)的embedding,来细化该节点的embedding;并采用注意力机制来区分这些邻居的重要性。
KGAT采用2种设计来相应地解决high-order关系建模中的挑战:
CKG将user behaviors、item knowledge作为一个联合的关系图进行编码
输入:CKG G G G,包括user-item graph G 1 G_1 G1,知识图谱 G 2 G_2 G2
输出:一个预测函数,预测了u与i发生交互的概率 y ^ u i \hat{y}_{ui} y^ui
将节点之间的L阶的连通性定义为一个多跳的关系路径: e 0 ⟶ r 1 e 1 ⟶ r 2 . . . ⟶ r L e L e_0 \stackrel{r_1}{\longrightarrow} e_1 \stackrel{r_2}{\longrightarrow} ... \stackrel{r_L}{\longrightarrow} e_L e0⟶r1e1⟶r2...⟶rLeL( e l e_l el、 r l r_l rl分别属于融合后的 G G G, ( e l − 1 , r l , e l ) (e_{l-1}, r_l, e_l) (el−1,rl,el)是第 l l l个三元组, L L L是序列的长度)
为了推断user preference,CF方法基于users之间的行为相似度(具体来说,就是:相似的users对items具有相同的偏好);这种可以被表示为基于行为的连通性,如: u 1 ⟶ r 1 i 1 ⟶ − r 1 u 2 ⟶ r 1 i 2 u_1 \stackrel{r_1}{\longrightarrow} i_1 \stackrel{-r_1}{\longrightarrow} u_2 \stackrel{r_1}{\longrightarrow} i_2 u1⟶r1i1⟶−r1u2⟶r1i2,这表明了 u 1 u_1 u1对 i 2 i_2 i2有兴趣(因为她相似的user u 2 u_2 u2之前与 i 2 i_2 i2发生过交互)
SL模型关注基于属性的连通性,即:users倾向于与拥有相似属性的items发生交互。例如: u 1 ⟶ r 1 i 1 ⟶ r 2 e 1 ⟶ − r 2 i 2 u_1 \stackrel{r_1}{\longrightarrow} i_1 \stackrel{r_2}{\longrightarrow} e_1 \stackrel{-r_2}{\longrightarrow} i_2 u1⟶r1i1⟶r2e1⟶−r2i2,表明 u 1 u_1 u1将会与 i 2 i_2 i2发生交互(因为 i 2 i_2 i2与 u 1 u_1 u1之前喜欢的 i 1 i_1 i1拥有相同的导演 e 1 e_1 e1)
。。。。。。
KGAT 模型包含3个组件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpEYUP64-1619524788030)(https://516000.xyz/images/2021/03/25/2021-03-25-18.53.24.png)]
模型采用了TransR:若三元组(h,r,t)存在于G中,TransR会通过优化翻译原理 e h r + e r ≈ e t r e_h^r + e_r \approx e_t^r ehr+er≈etr来学习嵌入每个实体、关系。这里的 e h 和 e t e_h和e_t eh和et是h、t的embedding, e h r 和 e t r e_h^r和e_t^r ehr和etr是 e h 和 e t e_h和e_t eh和et在关系r的空间上的投影。
对于给定三元组(h,r,t),其plausibility score(energy score)定义为: g ( h , r , t ) = ∣ ∣ W r e h + e r − W r e t ∣ ∣ 2 2 g(h,r,t) = ||W_re_h + e_r - W_re_t||_2^2 g(h,r,t)=∣∣Wreh+er−Wret∣∣22,Wr是关系r的变换矩阵(将实体从d维的实体空间投影到k维的关系空间) g ( h , r , t ) g(h,r,t) g(h,r,t)越低,表示三元组的置信度越高。
TransR的训练使用的损失函数为: L K G = ∑ − l n σ ( g ( h , r , t " ) − g ( h , r , t ) ) L_{KG} = \sum{-ln \sigma(g(h,r,t^") - g(h,r,t))} LKG=∑−lnσ(g(h,r,t")−g(h,r,t)),其中(h,r,t撇)为负采样得到的。
接着,基于GCN的结构,沿着高阶连通性,递归地传播embeddings;此外,通过利用GAT,生成了级联传播的注意力权重,揭示了这种连通性的重要性。
从单层开始描述,每层包括了3个组件:information propagation e N h e_{N_h} eNh、knowledge-aware attention π ( h , r , t ) \pi(h,r,t) π(h,r,t)、information aggregation
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkzlCv7g-1619524788030)(https://516000.xyz/images/2021/03/23/2021-03-23-10.27.51.png)]
1个实体可以被包含在多个三元组中,这个实体充当了连接2个三元组和传播信息的桥梁。
举例:
e 1 ⟶ r 2 i 2 ⟶ − r 1 u 2 e_1 \stackrel{r_2}{\longrightarrow} i_2 \stackrel{-r_1}{\longrightarrow} u_2 e1⟶r2i2⟶−r1u2
e 2 ⟶ r 3 i 2 ⟶ − r 1 u 2 e_2 \stackrel{r_3}{\longrightarrow} i_2 \stackrel{-r_1}{\longrightarrow} u_2 e2⟶r3i2⟶−r1u2
i 2 i_2 i2使用属性 e 1 e_1 e1、 e 2 e_2 e2作为输入来丰富其自身的特征,然后对 u 2 u_2 u2的偏好作出贡献。这可以通过从 e 1 e_1 e1传播消息到 u 2 u_2 u2来模拟。基于此,在实体、其邻居之间执行消息传播。
考虑一个实体 h h h,使用 N h = ( h , r , t ) N_h=(h,r,t) Nh=(h,r,t)来表示三元组的集合,这里的 h h h是头实体,称作ego-network
通过计算h的ego-network的线性组合,可以表征实体 h h h的first-order connectivity structure:
e N h = ∑ ( h , r , t ) ∈ N h π ( h , r , t ) e t e_{N_h} = \sum\limits_{(h,r,t)\in N_h}{\pi(h,r,t)e_t} eNh=(h,r,t)∈Nh∑π(h,r,t)et
其中 π ( h , r , t ) \pi(h,r,t) π(h,r,t)控制了边 ( h , r , t ) (h,r,t) (h,r,t)上每次传播的衰减因子(表明:在关系r的条件下,从 t 传播到 h 的信息量的多少)
通过relational attention mechanism来实现 π ( h , r , t ) \pi(h,r,t) π(h,r,t):
π ( h , r , t ) = ( W r e t ) ⊤ t a n h ( W r e h + e r ) \pi(h,r,t) = (W_re_t)^\top tanh(W_re_h + e_r) π(h,r,t)=(Wret)⊤tanh(Wreh+er)
选择 t a n h tanh tanh作为非线性激活函数,这使得(基于the distance between e h e_h eh and e t e_t et in the relation r r r’s space)attention score可以为较近的实体传播更多的信息
注意:为简单起见,仅采用内积来计算这些表示,将来进一步探索attention module
随后,通过采用softmax函数,对所有连接到 h h h的三元组的系数进行归一化:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMwS0nux-1619524788031)(https://516000.xyz/images/2021/03/23/2021-03-23-19.06.04.png)]
最终的attention score π \pi π 能够区分哪一个邻居节点应该被给予更多的注意力,以此来捕捉collaborative signals。当执行前向传播的时候,attention flow建议关注部分数据,这可以被视作推荐的解释
KGAT模型与GCN、GraphSage的信息传播不同。KGAT不仅能够利用图的临近结构,还能够指出各个邻居的重要性
GAT仅仅将节点的表示作为输入,而KGAT对 e h e_h eh、 e t e_t et之间的关系 e r e_r er进行建模,在传播的过程中编码了更多信息
最后阶段是聚合实体的表示 e h e_h eh、它的ego-network表示 e N h e_{N_h} eNh,作为实体h的新的表示,记作: e h ( 1 ) = f ( e h , e N h ) e_h^{(1)} = f(e_h , e_{N_h}) eh(1)=f(eh,eNh)。
使用3种aggregator来实现f():
GCN Aggregator:
将2个表示进行累加,再应用1个非线性变换
f G C N = L e a k y R e L U ( W ( e h + e N h ) ) f_{GCN} = LeakyReLU(W(e_h + e_{N_h})) fGCN=LeakyReLU(W(eh+eNh))
其中W是可训练的权重矩阵,用于提炼有用的传播信息
GraphSage Aggregator:
将2个表示进行拼接
f G r a p h S a g e = L e a k y R e L U ( W ( e h ∣ ∣ e N h ) ) f_{GraphSage} = LeakyReLU(W(e_h || e_{N_h})) fGraphSage=LeakyReLU(W(eh∣∣eNh))
其中||是拼接操作
Bi-Interaction Aggregator:
考虑了 e h e_h eh、 e N h e_{N_h} eNh之间的2种特征交互
f B i − I n t e r a c t i o n = L e a k y R e L U ( W 1 ( e h + e N h ) ) + L e a k y R e L U ( W 2 ( e h ⊙ e N h ) ) f_{Bi-Interaction} = LeakyReLU(W_1(e_h + e_{N_h})) + LeakyReLU(W_2(e_h ⊙ e_{N_h})) fBi−Interaction=LeakyReLU(W1(eh+eNh))+LeakyReLU(W2(eh⊙eNh))
W是可训练的权重矩阵,⊙表示element-wise product
与GCN、GraphSage不同,Bi-Interaction还对 e h e_h eh、 e N h e_{N_h} eNh之间的特征交互进行 编码。(这使得要传播的信息对 e h e_h eh、 e N h e_{N_h} eNh之间的affinity敏感,可以从相似实体传递更多的消息)
总结:
embedding propagation layer的优点在于,可以探索相关user、item、实体表示的 first-order connectivity information。
堆叠更多的propagation layers,以探索high-order connectivity information,收集从更高跳的邻居传播的信息。
递归地定义第 l l l步中的1个实体的表示:
e h ( l ) = f ( e h ( l − 1 ) , e N h ( l − 1 ) ) e_h^{(l)} = f(e_h^{(l-1)} , e_{N_h}^{(l-1)}) eh(l)=f(eh(l−1),eNh(l−1))
其中,实体h的information propagated within l-ego network定义如下:
e N h ( l − 1 ) ) = ∑ π ( h , r , t ) e t ( l − 1 ) e_{N_h}^{(l-1)}) = \sum \pi(h,r,t) e_t^{(l-1)} eNh(l−1))=∑π(h,r,t)et(l−1)
e t ( l − 1 ) e_t^{(l-1)} et(l−1)是从先前information propagation步骤中生成的实体 t t t的表示,记忆了它的 ( l − 1 ) (l-1) (l−1)跳邻居的信息;在初始information-propagation iteration, e h ( 0 ) e_h^{(0)} eh(0)被设置为 e h e_h eh。得到的结果继续为第 l l l层的实体 h h h表示做贡献。
最终,可以在embedding propagation process中,捕捉到形如 u 2 ⟶ r 1 i 2 ⟶ − r 2 e 1 ⟶ i 1 r 2 ⟶ − r 1 u 1 u_2 \stackrel{r_1}{\longrightarrow} i_2 \stackrel{-r_2}{\longrightarrow} e_1 \stackrel{r_2} {\longrightarrow i_1} {\stackrel{-r_1}{\longrightarrow} u_1} u2⟶r1i2⟶−r2e1⟶i1r2⟶−r1u1的高阶连接性。此外,来自 u 2 u_2 u2的信息被编码在 e u 1 ( 3 ) e_{u_1}^{(3)} eu1(3)当中。
在执行L层之后,可以得到user节点 u u u的多重表示,记作 { e u ( 1 ) , . . . , e u ( L ) } \{e_u^{(1)}, ..., e_u^{(L)}\} {eu(1),...,eu(L)};类似的可以得到item节点 i i i的多重表示 { e i ( 1 ) , . . . , e i ( L ) } \{e_i^{(1)}, ..., e_i^{(L)}\} {ei(1),...,ei(L)}
因为** l l l层的输出**是 深度为 l l l的、以 u u u或 i i i为根的树形结构的消息聚合的结果(如图1
所示),所以不同层的输出强调了不同顺序的连接性信息。
所以采用layer-aggregation mechanism来将每一步的表示级联成单个向量:
e u ∗ = e u ( 0 ) ∣ ∣ . . . ∣ ∣ e u ( L ) e_u^* = e_u^{(0)}||...||e_u^{(L)} eu∗=eu(0)∣∣...∣∣eu(L), e i ∗ = e i ( 0 ) ∣ ∣ . . . ∣ ∣ e i ( L ) e_i^* = e_i^{(0)}||...||e_i^{(L)} ei∗=ei(0)∣∣...∣∣ei(L),其中 ∣ ∣ || ∣∣为级联操作
这样做,不仅能够通过执行embedding propagation操作,丰富初始embedding;还能够通过调整 L L L,控制传播的强度。
最终,对user、item的表示做内积,预测出它们的匹配分数:
y ^ ( u , i ) = e u ∗ ⊤ e i ∗ \hat{y}(u,i) = e_u^{*\top} e_i^* y^(u,i)=eu∗⊤ei∗