文章《Causal Inference for Knowledge Graph based Recommendation》阅读
- 论文概况及动机(Introduction)
- 问题形式化
- 方法论
- Causal Intervention (C1)
- Model Implementation
- U(·)
- f(·)
- 协同过滤部分
- 模型优化
- Causal Inference (C2)
- Experiments
- 总结
今天带来的是一篇发表在 TKDE 上的 2022 年的一篇关于因果推荐的论文,论文聚焦于基于知识图谱(Knowledge Graph, KG)的推荐系统方向,通过后门调整和反事实推理,对 KG-based RS 进行了优化。论文提出了模型 基于知识图谱的因果推荐 (Knowledge Graph-based Causal Recommendation, KGCR)模型。论文组合使用后门调整和反事实推理,分别完成了confounder去除和对于结果的debias。论文比较完整,值得一读。
论文由Yinwei Wei等人完成。
论文地址:https://ieeexplore.ieee.org/document/9996555
代码仓库:https://github.com/weiyinwei/KGCR
论文概况及动机(Introduction)
作者立足于基于 KG 的推荐系统,针对如图1所示的 知识图 与 用户-物品交互图 的融合,提出两个当前面临的挑战:
- KG 的结构阻碍了用户与属性之间的关系表示。
- 知识图谱中用户与属性之间存在着RS倾向于推荐包含更多属性对应的物品(例如图1中倾向于向User推荐Clockstoppers,而非Titanic。因为Clockstoppers对应两个重叠属性(图中用蓝色曲线表示),而Titanic对应一个。(图中使用红色线条表示))
作者将知识图谱中的节点分为两类,分别叫做 item entities 和 attribute entities,物品实体表示交互物品,属性实体表示物品对应的属性知识。
针对上述问题,作者分别使用 后门调整 和 反事实推理 进行解决。
因果图如 图2 所示,下面先介绍一下其中的主要变量(作者对于这一部分的介绍有点模糊,或者说不够清晰,不需要纠结于具体代表的数学表达形式,按照下面的介绍进行区分即可,具体的数学表达会在后文中明确):
- K K K 表示知识图谱结构,分别包括用户与物品的邻接情况和物品与属性之间的邻接关系。
- A A A 表示属性表示(embedding)
- U U U 表示用户表示
- S S S 表示带预测的用户-物品交互关系
- I I I 表示物品表示
除此以外,作者使用 G K G \mathcal{G}_{KG} GKG 表示知识图谱, U , I \mathcal{U,I} U,I 分别表示其中的用户与物品。其中,
O = ∣ U ∣ O=|\mathcal{U}| O=∣U∣, M = ∣ I ∣ M=|\mathcal{I}| M=∣I∣,及 N = ∣ A ∣ N=|\mathcal{A}| N=∣A∣ 分别表示用户数量、物品数量以及属性数量。
(C1)如图 2(a) 所示,对于用户表示与属性表示之间,因为知识图谱的存在,插入了一条后门路径(backdoor path) A ← K → U A \leftarrow K \rightarrow U A←K→U,从客观上影响了用户与物品之间的表达。我们这里将其称之为Challenge 1(C1: A ← K → U A \leftarrow K \rightarrow U A←K→U)
(C2)另外,对于最终的预测 S S S,由于属性节点存在一条直接边连接 A → S A \rightarrow S A→S,这带来了属性节点对于最终预测结果的bias。我们将这一问题成为Challenge 2 (C2: A → S ← U A \rightarrow S \leftarrow U A→S←U)
这两个要点在原文中没有体现,这里主要是为了方便介绍模型引入。后续内容主要就是针对上述两块内容展开的。
下面我们正式开始。
问题形式化
作者将预测分为两部分,协同过滤部分不考虑知识图谱,用户与物品的表示也与知识图谱embedding不相关,单独进行计算如下:
S u i c f = f c f ( u c f , i c f ) . (1) S_{ui}^{cf} = f_{cf}(\mathbf{u}_{cf}, \mathbf{i}_{cf}). \tag{1} Suicf=fcf(ucf,icf).(1)
另一部分就是知识图谱部分,知识图谱是有向图,关于知识图谱的 embedding 学习过程如下:
S u , i , a = f ( u , i ) , w h e r e u = U ( O u + , G K G ) , (2) S_{u,i,a} = f(\mathbf{u}, \mathbf{i}), \mathrm{where}\ \mathbf{u} = U(\mathcal{O}_u^+, \mathcal{G}_{KG}), \tag{2} Su,i,a=f(u,i),where u=U(Ou+,GKG),(2)
其中, G K G = { ( h , r , t ) ∣ h , t ∈ E , r ∈ R } \mathcal{G}_{KG} = \{(h, r, t) \mid h, t \in \mathcal{E}, r \in \mathcal{R} \} GKG={(h,r,t)∣h,t∈E,r∈R}。 E , R \mathcal{E}, \mathcal{R} E,R 分表表示边集合与节点集合。 h h h 表示 头 (head), e e e 表示 尾(tail)。
O u + \mathcal{O}_u^+ Ou+ 表示用户的交互历史正例。
可以看出,在训练阶段,主要就是解决两个函数, U ( ⋅ ) U(\cdot) U(⋅) 与 f ( ⋅ ) f(\cdot) f(⋅),分别用于用户偏好学习 与 相似性计算。
因此,本文要解决的任务形式化表示为:
输入:用户历史交互与知识图谱
输出:计算 S u i c f S_{ui}^{cf} Suicf 及 S u , i , a S_{u,i,a} Su,i,a,并预测用户的未来交互
方法论
对于因果图的介绍上面已经介绍过,这里不再赘述。这里主要明确一下数学表达:
- 变量 U U U、变量 I I I 取值 u , i \mathbf{u}, \mathbf{i} u,i,即用户与物品的知识图谱中的embedding向量。
- A A A 表示用户交互过的属性向量集合,i.e., a = { a 1 , a 2 , a A ′ } \mathbf{a} =\left\{ \mathbf{a}_{1}, \mathbf{a}_{2}, \mathbf{a}_{A^{\prime}} \right\} a={a1,a2,aA′},其中 A ′ A^{\prime} A′表示当前用户交互过的属性数量。不过这里不用在意,实际上可以直接理解为用户与所有属性的交互邻接矩阵,在后文的处理过程中也确实是这么做的。
- K K K 表示用户所交互物品与属性之间的结构信息,形式上表现为: k = { k 1 , k 2 , k K ′ } \mathbf{k} =\left\{ \mathbf{k}_{1}, \mathbf{k}_{2}, \mathbf{k}_{K^{\prime}} \right\} k={k1,k2,kK′}, 其中 K ′ K^{\prime} K′ 表示用户交互过的物品数量。对于任意物品 j j j, k j ∈ [ 0 , 1 ] 1 × N \mathbf{k}_{j} \in [0, 1]^{1 \times N} kj∈[0,1]1×N 表示与 N N N 个 attribute 的连接关系。
- S S S 即 score,预测分数
Causal Intervention (C1)
解决C1,去掉confounder,即切断 K K K 与 A A A 之间的路径:
S u , i , a = P ( S ∣ U = u , I = i , d o ( A = a ) ) = ∑ k ∈ K P ( S ∣ U ( a , k ) , i , a ) P ( k ) , (3) \begin{aligned} S_{u, i, a}&=P(S \mid U=\mathbf{u}, I=\mathbf{i}, do(A=\mathbf{a})) \\ &=\sum_{k \in \mathcal{K}} P(S \mid U(\mathbf{a}, \mathbf{k}), \mathbf{i}, \mathbf{a}) P(\mathbf{k}), \end{aligned}\tag{3} Su,i,a=P(S∣U=u,I=i,do(A=a))=k∈K∑P(S∣U(a,k),i,a)P(k),(3)
其中, P ( k ) = { P ( k 1 ) , … , P ( k K ′ ) } P(\mathbf{k}) =\left\{P\left(\mathbf{k}_1\right), \ldots, P\left(\mathbf{k}_{K^{\prime}}\right)\right\} P(k)={P(k1),…,P(kK′)} 表示结构分布概率。这里不容易计算,后续会消掉。 U ( ⋅ ) U(\cdot) U(⋅) 是待计算的用户与attribute之间的传播函数,后续会介绍(使用TransE模型)。
融合 f ( ⋅ ) f(\cdot) f(⋅) 作为相似性计算函数,上式变为:
P ( S ∣ U = u , I = i , d o ( A = a ) ) = ∑ k ∈ K P ( S ∣ U ( a , k ) , i , a ) P ( k ) = ∑ k ∈ K f ( U ( a , k ) , i , a ) P ( k ) , (4) \begin{aligned}P(S \mid U &=\mathbf{u}, I=\mathbf{i}, d o(A=\mathbf{a})) \\ & =\sum_{k \in \mathcal{K}} P(S \mid U(\mathbf{a}, \mathbf{k}), \mathbf{i}, \mathbf{a}) P(\mathbf{k}) \\ & =\sum_{k \in \mathcal{K}} f(U(\mathbf{a}, \mathbf{k}), \mathbf{i}, \mathbf{a}) P(\mathbf{k}), \end{aligned} \tag{4} P(S∣U=u,I=i,do(A=a))=k∈K∑P(S∣U(a,k),i,a)P(k)=k∈K∑f(U(a,k),i,a)P(k),(4)
进一步地,套用 NWGM 进行近似,可以得到:
P ( S ∣ U = u , I = i , d o ( A = a ) ) ≈ f ( U ( a , ( ∑ k ∈ K k P ( k ) ) ) , i , a ) , (5) \begin{aligned}P(S \mid U=\mathbf{u}, I=\mathbf{i}, d o(A=\mathbf{a})) \approx f\left(U\left(\mathbf{a},\left(\sum_{k \in \mathcal{K}} \mathbf{k} P(\mathbf{k})\right)\right), \mathbf{i}, \mathbf{a}\right) \end{aligned}, \tag{5} P(S∣U=u,I=i,do(A=a))≈f(U(a,(k∈K∑kP(k))),i,a),(5)
这里就是把求和部分移到函数内部,这里注意如果需要取消掉约等号,改为等号,需要满足:
E [ f ( X ) ] = f ( E [ X ] ) \mathbb{E}[f(X)]=f(\mathbb{E}[X]) E[f(X)]=f(E[X])。因此需要 f ( ⋅ ) f(\cdot) f(⋅) 与 U ( ⋅ ) U(\cdot) U(⋅) 都是线性函数。
尽管这里作者一直声称 f ( ⋅ ) f(\cdot) f(⋅) 与 U ( ⋅ ) U(\cdot) U(⋅) 的实现都采用线性函数,但实际上后续在 f ( ⋅ ) f(\cdot) f(⋅) 的实现中是包含非线性函数 σ ( ⋅ ) \sigma(\cdot) σ(⋅) 的。这里作者应该包含一个约等数的误差范围声明,关于这部分的证明可参考论文《Deconfounded Recommendation for Alleviating Bias Amplification》。
作者后续处理中,将 k \mathbf{k} k 拆分成 k ~ ⋅ K \tilde{\mathbf{k}} \cdot \mathbf{K} k~⋅K 的形式。其中 K ∈ R M × N \mathbf{K} \in \mathbb{R}^{M \times N} K∈RM×N 表示用户与物品之间的邻接矩阵。以图1 中例子示例, K = [ [ 1 , 1 , 0 ] , [ 1 , 1 , 1 ] , [ 0 , 0 , 1 ] ] , k ~ = [ 0 , 1 , 0 ] \mathbf{K}=[[1,1,0],[1,1,1],[0,0,1]], \tilde{\mathbf{k}}=[0,1,0] K=[[1,1,0],[1,1,1],[0,0,1]],k~=[0,1,0]。因此,继续拆分,得到:
P ( S ∣ U = u , I = i , d o ( A = a ) ) ≈ f ( U ( a , ( ∑ k ∈ K k P ( k ) ) ) , i , a ) = f ( U ( a , ∑ k ~ ∈ K ~ ( k ~ P ( k ~ ) ) , K ) , i , a ) . (6) \begin{aligned} &P(S \mid U = \mathbf{u}, I=\mathbf{i}, do(A=\mathbf{a})) \\ & \approx f\left(U\left(\mathbf{a},\left(\sum_{k \in \mathcal{K}} \mathbf{k} P(\mathbf{k})\right)\right), \mathbf{i}, \mathbf{a}\right) \\ &= f\left(U\left(\mathbf{a}, \sum_{\tilde{\mathbf{k}} \in \tilde{\mathcal{K}}}(\tilde{\mathbf{k}} P(\tilde{\mathbf{k}})), \mathbf{K}\right), \mathbf{i}, \mathbf{a}\right) \text {. }\end{aligned} \tag{6} P(S∣U=u,I=i,do(A=a))≈f(U(a,(k∈K∑kP(k))),i,a)=f U a,k~∈K~∑(k~P(k~)),K ,i,a . (6)
这里, k ~ P ( k ~ ) ) \tilde{\mathbf{k}} P(\tilde{\mathbf{k}})) k~P(k~)) 即计算变量 k ~ \tilde{\mathbf{k}} k~的期望, P ( k ~ ) = 1 M P(\tilde{\mathbf{k}}) = \frac{1}{M} P(k~)=M1 表示均匀分布,可以得到:
P ( S ∣ U = u , I = i , d o ( A = a ) ) ≈ f ( U ( a , E ( k ~ ) , K ) , i , a ) , = 1 M f ( U ( a , K ) , i , a ) , = 1 M f ( U ( a ~ , A , K ) , i , a ) . (7) \begin{aligned} &P(S \mid U=\mathbf{u}, I=\mathbf{i}, d o(A=\mathbf{a})) \\ &\approx f(U(\mathbf{a}, \mathbb{E}(\tilde{\mathbf{k}}), \mathbf{K}), \mathbf{i}, \mathbf{a}), \\ & =\frac{1}{M} f(U(\mathbf{a}, \mathbf{K}), \mathbf{i}, \mathbf{a}) \text {, } \\ & =\frac{1}{M} f(U(\tilde{\mathbf{a}}, \mathbf{A}, \mathbf{K}), \mathbf{i}, \mathbf{a}) \text {. } \end{aligned} \tag{7} P(S∣U=u,I=i,do(A=a))≈f(U(a,E(k~),K),i,a),=M1f(U(a,K),i,a), =M1f(U(a~,A,K),i,a). (7)
这里的 A ∈ R N × D \mathbf{A} \in \mathbb{R}^{N \times D} A∈RN×D 同样是进行了拆解,以方便计算。
虽然不影响结论,但这里有个计算错误需要指出,即 公式(7) 中第三行不应该为 1 M \frac{1}{M} M1,这里求的是变量 k ~ \tilde{\mathbf{k}} k~的期望,因此 M M M 作为分母,分子应该是常数厂前用户的交互物品总数。(应该是这样吧?评论区欢迎讨论!)
Model Implementation
根据上述所有部分,现在只需要实现 f ( ⋅ ) f(\cdot) f(⋅) 与 U ( ⋅ ) U(\cdot) U(⋅) 即完成了模型所有构造。
U(·)
首先是知识图谱上的 U ( ⋅ ) U(\cdot) U(⋅):
基于TransE得到知识图谱embedding:
L K G = ∑ ( h , r , t ) ∈ T ∑ ( h ′ , r , t ′ ) ∈ T ′ [ γ + d ( e h + e r , e t ) − d ( e h ′ + e r , e t ′ ) ] + . (8) \mathcal{L}_{K G}=\sum_{(h, r, t) \in \mathcal{T}} \sum_{\left(h^{\prime}, r, t^{\prime}\right) \in \mathcal{T}^{\prime}}\left[\gamma+d\left(\mathbf{e}_h+\mathbf{e}_r, \mathbf{e}_t\right)-d\left(\mathbf{e}_{h^{\prime}}+\mathbf{e}_r, \mathbf{e}_{t^{\prime}}\right)\right]_{+}.\tag{8} LKG=(h,r,t)∈T∑(h′,r,t′)∈T′∑[γ+d(eh+er,et)−d(eh′+er,et′)]+.(8)
使用得到的embedding初始化 U U U 和 I I I,并使用图神经网络传播:
p ( l + 1 ) = ∑ q ∈ N p 1 ∣ N p ∣ ∣ N q ∣ q ( l ) . (9) \mathbf{p}^{(l+1)}=\sum_{q \in \mathcal{N}_p} \frac{1} {\sqrt{\left|\mathcal{N}_p\right|\left|\mathcal{N}_q\right|}} \mathbf{q}^{(l)}. \tag{9} p(l+1)=q∈Np∑∣Np∣∣Nq∣1q(l).(9)
f(·)
使用late fusion实现 f ( ⋅ ) f(\cdot) f(⋅):
S u , i , a = f ( u , i , a ) = g ( u , i ) σ ( h ( i , a ) ) . (10) S_{u, i, a}=f(\mathbf{u}, \mathbf{i}, \mathbf{a})=g(\mathbf{u}, \mathbf{i}) \sigma(h(\mathbf{i}, \mathbf{a})).\tag{10} Su,i,a=f(u,i,a)=g(u,i)σ(h(i,a)).(10)
g ( u , i ) = u ⋅ i ⊤ . (11) g(\mathbf{u}, \mathbf{i})=\mathbf{u} \cdot \mathbf{i}^{\top}.\tag{11} g(u,i)=u⋅i⊤.(11)
S i , a = h ( i , a ) = i ⋅ a ‾ ⊤ , where a ‾ = 1 M ∑ a ∈ A a . (12) S_{i, a}=h(\mathbf{i}, \mathbf{a})=\mathbf{i} \cdot \overline{\mathbf{a}}^{\top}, \text { where } \overline{\mathbf{a}}=\frac{1}{M} \sum_{a \in A} \mathbf{a}.\tag{12} Si,a=h(i,a)=i⋅a⊤, where a=M1a∈A∑a.(12)
协同过滤部分
S u , i c f = u c f ⋅ i c f ⊤ . (13) S_{u, i}^{c f}=\mathbf{u}_{c f} \cdot \mathbf{i}_{c f}^{\top}. \tag{13} Su,icf=ucf⋅icf⊤.(13)
模型优化
使用多任务学习方式,将多个loss进行拆分,分别进行训练。分别如下:
L 1 = ∑ ( u , i , j ) ∈ O − ln σ ( S u , i , a + S u , i c f − S u , j , a − S u , j c f ) . (14) \mathcal{L}_1=\sum_{(u, i, j) \in \mathcal{O}}-\ln \sigma\left(S_{u, i, a}+S_{u, i}^{c f}-S_{u, j, a}-S_{u, j}^{c f}\right).\tag{14} L1=(u,i,j)∈O∑−lnσ(Su,i,a+Su,icf−Su,j,a−Su,jcf).(14)
其中, O = { ( u , i , j ) ∣ ( u , i ) ∈ O + , ( u , j ) ∈ O − } \mathcal{O}=\left\{(u, i, j) \mid(u, i) \in \mathcal{O}^{+},(u, j) \in \mathcal{O}^{-}\right\} O={(u,i,j)∣(u,i)∈O+,(u,j)∈O−},即采用BPR损失。
L 2 = ∑ ( u , i , j ) ∈ O m a x ( 0 , σ ( S i , a ) − σ ( S j , a ) − m ) . (15) \mathcal{L}_2 = \sum_{(u, i, j) \in \mathcal{O}} m a x\left(0, \sigma\left(S_{i, a}\right)-\sigma\left(S_{j, a}\right)-m\right). \tag{15} L2=(u,i,j)∈O∑max(0,σ(Si,a)−σ(Sj,a)−m).(15)
损失整体:
L = L 1 + α L 2 + ∥ Θ ∥ 2 (16) \mathcal{L}=\mathcal{L}_1+\alpha \mathcal{L}_2+\| \Theta \|_2 \tag{16} L=L1+αL2+∥Θ∥2(16)
Causal Inference (C2)
解决 C2,即反事实推理,去偏。
去偏采用TIE方式,具体细节不再赘述,可参考论文《CausalRec: Causal Inference for Visual Debiasing Visually-Aware Recommendation》阅读 进行补充。
总之,根据上述 loss 训练完成模型后,在推理阶段,模型遵循
T E = S u , i , a − S u ∗ , i , a ∗ . (17) TE = S_{u, i, a} - S_{u^*, i, a^*}. \tag{17} TE=Su,i,a−Su∗,i,a∗.(17)
N D E = S u ∗ , i , a − S u ∗ , i , a ∗ . (18) N D E=S_{u^*, i, a}-S_{u^*, i, a^*}. \tag{18} NDE=Su∗,i,a−Su∗,i,a∗.(18)
T I E = T E − N D E = S u , i , a − S u ∗ , i , a ∗ − S u ∗ , i , a + S u ∗ , i , a ∗ = g ( u , i ) σ ( h ( i , a ) ) − g ( u ∗ , i ) σ ( h ( i , a ) ) = ( g ( u , i ) − s i ) σ ( h ( i , a ) ) , (19) \begin{aligned}TIE &=TE-NDE \\ &=S_{u, i, a}-S_{u^*, i, a^*}-S_{u^*, i, a}+S_{u^*, i, a^*} \\ &=g(\mathbf{u}, \mathbf{i}) \sigma(h(\mathbf{i}, \mathbf{a}))-g\left(\mathbf{u}^*, \mathbf{i}\right) \sigma(h(\mathbf{i}, \mathbf{a})) \\ &=\left(g(\mathbf{u}, \mathbf{i})-s_i\right) \sigma(h(\mathbf{i}, \mathbf{a})),\end{aligned}\tag{19} TIE=TE−NDE=Su,i,a−Su∗,i,a∗−Su∗,i,a+Su∗,i,a∗=g(u,i)σ(h(i,a))−g(u∗,i)σ(h(i,a))=(g(u,i)−si)σ(h(i,a)),(19)
其中, s i s_i si表示所有 g ( u , i ) g(\mathbf{u}, \mathbf{i}) g(u,i) 的平均值。
结合协同过滤部分,得到最终的去偏预测目标:
y u i = S u i c f + S u i k g = u c f ⊤ ⋅ i c f + ( g ( u , i ) − s i ) σ ( h ( i , a ) ) . (20) y_{u i}=S_{u i}^{c f}+S_{u i}^{k g}=\mathbf{u}_{c f}^{\top} \cdot \mathbf{i}_{c f}+\left(g(\mathbf{u}, \mathbf{i})-s_i\right) \sigma(h(\mathbf{i}, \mathbf{a})) .\tag{20} yui=Suicf+Suikg=ucf⊤⋅icf+(g(u,i)−si)σ(h(i,a)).(20)
需要提一嘴的是,文章的复杂度计算应该是有问题的,光是图神经网络部分就应该是 ( M + N ) 2 (M+N)^{2} (M+N)2 平方级别的,邻接矩阵嘛,起码是横着竖着都算一遍。
综上所有内容,模型整体流程为:使用TransE完成知识图谱embedding训练,并初始化 U U U 和 I I I。通过图神经网络传播( U ( ⋅ ) U(\cdot) U(⋅))完成 S a , k S_{a, k} Sa,k,通过late fusion相乘的方式( f ( ⋅ ) f(\cdot) f(⋅))完成 f ( U ( a , k ) , i , a ) f(U(\mathbf{a}, \mathbf{k}), \mathbf{i}, \mathbf{a}) f(U(a,k),i,a),根据 loss 完成模型优化。 最后根据 TIE 完成test。
作者进行了总结,如算法所示:
Experiments
实验部分就不再多说了,这里贴一个 Overall Experiment Comparison 的对比结果,可见结果还是不错的。
总结
论文提出了一种针对基于知识图谱的因果推荐模型 K G C R KGCR KGCR,通过组合 后门调整 和 反事实推理,得到一个相对完整的因果推荐模型。文章条理清楚,内容详实。可能美中不足的就是存在一些typo,数学表达从前向后会稍显混乱。但整体来说,还是挺在线的。