用户集合 U = { u 1 , u 2 , ⋯ , u m } \mathcal{U}=\{u_1,u_2,\cdots, u_m\} U={u1,u2,⋯,um}
商品集合 V = { v 1 , v 2 , ⋯ , v n } \mathcal{V}=\{v_1,v_2,\cdots, v_n\} V={v1,v2,⋯,vn}
二元矩阵 B ∈ { 0 , 1 } m × n B\in \{0,1\}^{m\times n} B∈{0,1}m×n表示用户-商品交互矩阵。
R ( u , K ) \mathcal{R}(u,K) R(u,K)表示对于用户 u u u的 top- K \text{top-}K top-K推荐列表。
使用
商品aspect集合 A = { a 1 , a 2 , ⋯ , a r } \mathcal{A}=\{a_1, a_2,\cdots, a_r\} A={a1,a2,⋯,ar}
用户-aspect偏好矩阵 X ∈ R m × r X\in \mathbb{R}^{m\times r} X∈Rm×r,每个元素指示着用户对某个aspect的关心程度。
商品-aspect质量矩阵 Y ∈ R n × r Y\in \mathbb{R}^{n\times r} Y∈Rn×r,每个元素表示商品在该aspect上的表现情况。
X i , k = { 0 , 如果用户 u i 没有提到过 a k 这个方面 1 + ( N − 1 ) ( 2 1 + e x p ( − t i , k ) − 1 ) , e l s e X_{i,k}=\begin{cases}0,&\text{如果用户} u_i \text{没有提到过}a_k\text{这个方面}\\1+(N-1)(\frac{2}{1+exp(-t_{i,k})}-1),&else\end{cases} Xi,k={0,1+(N−1)(1+exp(−ti,k)2−1),如果用户ui没有提到过ak这个方面else
Y j , k = { 0 , 如果商品 v j 的评论中没有被提到过 a k 这个方面 1 + N − 1 1 + e x p ( − t j , k ⋅ s j , k ) , e l s e (1) Y_{j,k}=\begin{cases}0,&\text{如果商品} v_j \text{的评论中没有被提到过}a_k\text{这个方面}\\1+\frac{N-1}{1+exp(-t_{j,k}\cdot s_{j,k})},&else\end{cases}\tag{1} Yj,k={0,1+1+exp(−tj,k⋅sj,k)N−1,如果商品vj的评论中没有被提到过ak这个方面else(1)
N N N是系统中的评分规模,一般情况下是五星
评分制。
t i , k t_{i,k} ti,k是用户 u i u_i ui在评论中提到 a k a_k ak这个方面的频次, t j , k t_{j,k} tj,k是商品 v j v_j vj被提到 a k a_k ak这个方面的次数, s j , k s_{j,k} sj,k是上述的评论的平均情感表现。 X X X和 Y Y Y矩阵都通过sigmoid
方法重缩放,使得所有元素归入(1,N)的范围内,从而与系统的评分机制相匹配。
(X?(2-N, N)?)
读者可以通过Explicit Factor Models for Explainable Recommendation based on Phrase-level Sentiment Analysis、Do users rate or review?: boost phrase-level sentiment labeling with review-level sentiment classification来了解更多的矩阵构造过程。
我们反事实解释的目的是为黑盒推荐模型寻找aspect驱动的反事实解释。
对于一个给定的推荐模型,如果商品 v j v_j vj被推荐给用户 u i u_i ui,也就是说 v j ∈ R ( u i , K ) v_j\in \mathcal{R}(u_i, K) vj∈R(ui,K),然后我们寻找一个商品aspect质量(item-aspect quality)向量最小的变化量 Δ = { δ 0 , δ 1 , ⋯ , δ r } \Delta = \{\delta_0, \delta_1, \cdots, \delta_r\} Δ={δ0,δ1,⋯,δr},如果这个变化量作用到商品 v j v_j vj的质量向量上, Y j + Δ Y_j+\Delta Yj+Δ,那么这将导致该商品被从推荐列表中移除。在 Δ \Delta Δ向量中所有元素都是非正的。
如果商品在[aspect(s)]上表现得稍微差一点的话,这个商品将不会再被推荐。
解释复杂度(Explanation Complexity, EC)
解释复杂度是来衡量解释的复杂性的。在我们的基于aspect的可解释推荐设定中,复杂性可以定义为
最终的复杂度计算,使用上述两个结果的和:
C ( Δ ) = ∣ ∣ Δ ∣ ∣ 2 2 + γ ∣ ∣ Δ ∣ ∣ 0 (2) C(\Delta)=\vert\vert \Delta\vert\vert_2^2+\gamma\vert\vert\Delta\vert\vert_0\tag{2} C(Δ)=∣∣Δ∣∣22+γ∣∣Δ∣∣0(2)
解释强度(Explanation Strength ES)
解释强度衡量了解释的有效性。在我们的反事实解释推荐设定中,这个强度可以被理解为施加了微小的改变矩阵 Δ \Delta Δ后可以多大程度上改变商品 v j v_j vj的推荐结果。这个强度可以被定义为商品 v j v_j vj的排序分数在施加了 Δ \Delta Δ之后的降低量。
S ( Δ ) = s i , j − s i , j Δ (3) S(\Delta)=s_{i,j}-s_{i,j_{\Delta}}\tag{3} S(Δ)=si,j−si,jΔ(3)
s i , j Δ s_{i,j_\Delta} si,jΔ是将商品的质量向量 Y j Y_j Yj施加了 Δ \Delta Δ之后,即 Y j + Δ Y_j+\Delta Yj+Δ的排序结果。
实际生活中,公式(2)和公式(3)来衡量复杂度和强度的方式是不确定的,需要根据我们的项目自己设置。
复杂度和解释强度从概念上来看应该是正交的,即没有太大的关联。复杂不一定强度大,强度大的也不一定复杂。根据奥卡姆剃刀原则,如果两个模型的效率大致相同,我们则选择更加简单的那个。
假设我们有一个模型 f f f,这个模型可以预测用户对商品的排序评分,即:
s i , j = f ( X i , Y j ∣ Z , Θ ) s_{i,j}=f(X_i,Y_j|Z,\Theta) si,j=f(Xi,Yj∣Z,Θ)
这里的 X i X_i Xi和 Y j Y_j Yj分别是用户aspect向量和商品aspect向量。 Θ \Theta Θ为模型的参数, Z Z Z为整个模型预测过程中需要的其它附加信息,例如评分、图像、点击、文字等。
本模型中我们使用了一个非常简单的深度神经模型,包括一个融合层(fusion layer)和三个全连接层。
class BaseRecModel(torch.nn.Module):
def __init__(self, feature_length):
super(BaseRecModel, self).__init__()
self.fc = torch.nn.Sequential(
torch.nn.Linear(feature_length * 2, 1024),
torch.nn.ReLU(),
torch.nn.Linear(1024, 256),
torch.nn.ReLU(),
torch.nn.Linear(256, 1),
torch.nn.Sigmoid()
)
def forward(self, user_feature, item_feature):
fusion = torch.cat((user_feature, item_feature), 1)
out = self.fc(fusion)
return out
网络将用户和商品的aspects向量连接起来作为输入,输出一维的商品排序分数,通过sigmoid将输出映射到(0,1)的范围内,训练损失函数使用交叉熵。
L = − ∑ i , j , B i , j = 1 log s i , j − ∑ i , j , B i , j = 0 log ( 1 − s i , j ) = − ∑ i , j B i , j log s i , j + ( 1 − B i , j ) log ( 1 − s i , j ) (5) \begin{align*}L&=-\sum\limits_{i,j,B_{i,j=1}}\log s_{i,j}-\sum\limits_{i,j,B_{i,j}=0}\log (1-s_{i,j})\\&=-\sum\limits_{i,j}B_{i,j}\log s_{i,j} + (1-B_{i,j})\log(1 - s_{i,j})\end{align*}\tag{5} L=−i,j,Bi,j=1∑logsi,j−i,j,Bi,j=0∑log(1−si,j)=−i,j∑Bi,jlogsi,j+(1−Bi,j)log(1−si,j)(5)
本文设计了一种模型来解释topK推荐结果中的每一个推荐商品。
假设商品 v j ∈ R ( u i , K ) v_j\in\mathcal{R}(u_i,K) vj∈R(ui,K),从直觉上来说我们的解释模型的任务是在尽可能保证模型解释强度的同时简化模型的复杂度。
minimize C ( Δ ) = ∣ ∣ Δ ∣ ∣ 2 2 + γ ∣ ∣ Δ ∣ ∣ 0 s.t., S ( Δ ) = s i , j − s i , j Δ ≥ ϵ (7) \begin{align*}\text{minimize }C(\Delta)&=\vert\vert \Delta\vert\vert_2^2+\gamma \vert\vert \Delta\vert\vert_0\\\text{s.t., } S(\Delta)&=s_{i,j}-s_{i,j_{\Delta}}\geq \epsilon\end{align*}\tag{7} minimize C(Δ)s.t., S(Δ)=∣∣Δ∣∣22+γ∣∣Δ∣∣0=si,j−si,jΔ≥ϵ(7)
为了简化,通常可以将 ϵ \epsilon ϵ定义为商品 v j v_j vj的评分和第 K + 1 K+1 K+1个商品的评分之差,
ϵ = s i , j − s i , j K + 1 (8) \epsilon = s_{i,j}-s_{i,j_{K+1}}\tag{8} ϵ=si,j−si,jK+1(8)
而为了进一步简化模型,可以抛弃 ϵ \epsilon ϵ的方式,而直接对更改 V j V_j Vj后的新的评分与第 K + 1 K+1 K+1个商品进行比较,
minimize C ( Δ ) = ∣ ∣ Δ ∣ ∣ 2 2 + γ ∣ ∣ Δ ∣ ∣ 0 s.t., s i , j Δ ≤ s i , j K + 1 (9) \begin{align*}\text{minimize }C(\Delta)&=\vert\vert \Delta\vert\vert_2^2+\gamma \vert\vert \Delta\vert\vert_0\\\text{s.t., } &s_{i,j_{\Delta}}\leq s_{i,j_{K+1}}\end{align*}\tag{9} minimize C(Δ)s.t., =∣∣Δ∣∣22+γ∣∣Δ∣∣0si,jΔ≤si,jK+1(9)
现在的问题是无论目标函数 ∣ ∣ Δ ∣ ∣ 2 2 + γ ∣ ∣ Δ ∣ ∣ 0 \vert\vert \Delta\vert\vert_2^2+\gamma \vert\vert \Delta\vert\vert_0 ∣∣Δ∣∣22+γ∣∣Δ∣∣0还是约束 s i , j Δ ≤ s i , j K + 1 s_{i,j_{\Delta}}\leq s_{i,j_{K+1}} si,jΔ≤si,jK+1都是不可微的。
知乎:关于L0、L1、L2范数的凹凸性:一个直观的几何角度
知乎:为什么不用L0范数做正则化?
由于 ∣ ∣ Δ ∣ ∣ 0 \vert\vert \Delta\vert\vert_0 ∣∣Δ∣∣0是非凸的,我们使用它的最优凸近似L1范数来替代。
对于约束来讲,我们使用铰链损失函数来进行松弛:
L ( s i , j Δ , s i , j K + 1 ) = max ( 0 , α + s i , j Δ − s i , j K + 1 ) (10) L(s_{i,j_{\Delta}},s_{i,j_{K+1}})=\text{max}(0,\alpha + s_{i,j_{\Delta}}-s_{i,j_{K+1}})\tag{10} L(si,jΔ,si,jK+1)=max(0,α+si,jΔ−si,jK+1)(10)
最终的优化函数为
minimize Δ ∣ ∣ Δ ∣ ∣ 2 2 + γ ∣ ∣ Δ ∣ ∣ 1 + λ L ( s i , j Δ , s i , j K + 1 ) (11) \mathop{\text{minimize}}\limits_{\Delta}\vert\vert\Delta\vert\vert_2^2+\gamma\vert\vert\Delta\vert\vert_1+\lambda L(s_{i,j_{\Delta}},s_{i,j_{K+1}})\tag{11} Δminimize∣∣Δ∣∣22+γ∣∣Δ∣∣1+λL(si,jΔ,si,jK+1)(11)
这里 λ \lambda λ和 α \alpha α都是用来控制解释强度的超参数。使用松弛优化的缺点是很难完全保证 v j v_j vj是真的从top-K中移除出去了,移除该商品的可能性很大程度上依赖于对 L L L项的最小化。所以需要后置处理来检测 s i , j Δ s_{i,j_{\Delta}} si,jΔ是否真的比 s i , j K + 1 s_{i,j_{K+1}} si,jK+1小。只有在移除商品的这个设想是成功的时候,才可以产生反事实解释。
我们将会报告解释模型的保真度(fidelity)来展示我们的方法可以解释多少比例的商品。
通过增加 λ \lambda λ的值,模型可以更加集中于解释强度。
在消融实验中还对解释复杂度和强度之间的关系进行了探索。
当我们获得了top-K的推荐列表,即 v j 1 , v j 2 , ⋯ , v j K v_{j_1},v_{j_2},\cdots, v_{j_K} vj1,vj2,⋯,vjK,直觉上来看, v j 1 会比 v j K v_{j_1}会比v_{j_K} vj1会比vjK更加难从推荐列表中移除出去。越靠前的商品移除出推荐列表的解释复杂度可能越高。
通过等式(11),模型可以自动选择aspects的数量来进行解释。但是如果需要的话,我们的方法也可以产生单aspect的解释。为了产生单aspect解释,我们需要对(11)添加一个可训练的独热码向量 a \textbf{a} a来作为掩码,确保在训练中只有一个aspect是在变化的。
minimize Δ ∣ ∣ a ⊙ Δ ∣ ∣ 2 2 + γ ∣ ∣ Δ ∣ ∣ 1 + λ L ( s i , j Δ , s i , j K + 1 ) s.t. ∣ ∣ a ∣ ∣ 1 = 1 , a i ∈ { 0 , 1 } where, s i , j Δ = f ( X i , Y j + a ⊙ Δ ∣ Z , Θ ) (12) \mathop{\text{minimize}}\limits_{\Delta}\vert\vert\textbf{a}\odot\Delta\vert\vert_2^2+\gamma\vert\vert\Delta\vert\vert_1+\lambda L(s_{i,j_{\Delta}},s_{i,j_{K+1}})\\\text{s.t. }\vert\vert\textbf{a}\vert\vert_1=1,a_i\in\{0,1\}\\\text{where, } s_{i,j\Delta}=f(X_i,Y_j+\textbf{a}\odot\Delta|Z,\Theta)\tag{12} Δminimize∣∣a⊙Δ∣∣22+γ∣∣Δ∣∣1+λL(si,jΔ,si,jK+1)s.t. ∣∣a∣∣1=1,ai∈{0,1}where, si,jΔ=f(Xi,Yj+a⊙Δ∣Z,Θ)(12)
当我们强制模型产生单aspect解释的时候, C ( Δ ) C(\Delta) C(Δ)的 l 0 \mathcal{l}_0 l0范数项就会消失,因为 ∣ ∣ Δ ∣ ∣ 0 = 1 \vert\vert \Delta\vert\vert_0=1 ∣∣Δ∣∣0=1,这是一个固定的常量,没有意义。
我们采用用户对商品的评论作为真实的偏好原因,从用户 u i u_i ui对商品的文字评论中,我们提取出用户展示出了积极情绪的aspect,定义为 P i , j = [ p i , j ( 0 ) , p i , j ( 1 ) , ⋯ , p i , j ( r ) ] P_{i,j}=[p_{i,j}^{(0)},p_{i,j}^{(1)},\cdots, p_{i,j}^{(r)}] Pi,j=[pi,j(0),pi,j(1),⋯,pi,j(r)], p i , j ( k ) p_{i,j}^{(k)} pi,j(k)为1的时候,说明 u i u_i ui对商品 v j v_j vj的 a k a_k ak这个aspect具有正向的情感。
对于我们的模型来说,模型会产生向量 Δ = { δ 0 , δ 1 , ⋯ , δ r } \Delta=\{\delta_0,\delta_1,\cdots, \delta_r\} Δ={δ0,δ1,⋯,δr},向量中非零元素对应的aspects将会组成最终的解释。
那么对于任何一个用户-商品对,我们根据真实的情感向量 P i , j P_{i,j} Pi,j计算准确率
和召回率
。
Precision = ∑ k = 1 r p i , j ( k ) ⋅ I ( δ k ) ∑ k = 1 r I ( δ k ) , Recall = ∑ k = 1 r p i , j ( k ) ⋅ I ( δ k ) ∑ k = 1 r p i , j ( k ) (13) \text{Precision}=\frac{\sum\limits_{k=1}^rp_{i,j}^{(k)}\cdot I(\delta_k)}{\sum\limits_{k=1}^r I(\delta_k)},\text{Recall}=\frac{\sum\limits_{k=1}^r p_{i,j}^{(k)}\cdot I(\delta_k)}{\sum\limits_{k=1}^r p_{i,j}^{(k)}}\tag{13} Precision=k=1∑rI(δk)k=1∑rpi,j(k)⋅I(δk),Recall=k=1∑rpi,j(k)k=1∑rpi,j(k)⋅I(δk)(13)
这里的 I ( δ ) I(\delta) I(δ)是识别函数,当 δ ≠ 0 \delta \neq 0 δ=0时, I ( δ ) = 1 I(\delta)=1 I(δ)=1,反之则为0。
准确率代表我们产生的解释中,有多少是用户真的喜欢的。
召回率表示用户真正喜欢的aspects有多少是被我们的解释产生了。
我们计算这两个值的调和平均数 F 1 F_1 F1,
F 1 = 2 ⋅ Precision ⋅ Recall Precision + Recall F_1=2\cdot \frac{\text{Precision}\cdot \text{Recall}}{\text{Precision}+ \text{Recall}} F1=2⋅Precision+RecallPrecision⋅Recall
最终我们平均所有用户-商品对计算出来的精确度、召回率和调和平均数。
面向用户的评估只回答了模型生成的解释是否与用户的喜好一致。然而,这并未告诉我们这个解释是否正确地解释了模型的行为,也就是说模型为什么要把某个商品推荐给某个用户。
为了检测我们的解释是否正确地解释了推荐系统的内在机制,我们使用两个分数:
必要性(Probability of Neccesity, PN)和充分性(Probability of Sufficiency, PS)。
PN:[34]
在因果推理理论中,必要性衡量了条件的必要程度。假设有一个aspects集合 A i , j ⊂ A \mathcal{A}_{i,j}\subset \mathcal{A} Ai,j⊂A组成了商品 v j v_j vj推荐给用户 u i u_i ui的解释。
PN的思想是,如果在反事实世界中, A i , j \mathcal{A}_{i,j} Ai,j中的aspects不存在,那么商品 v j v_j vj不会被推荐给用户 u i u_i ui的可能性有多大。
在这个思想下,我们计算生成的解释中符合PN定义的频率。 R i , K R_{i,K} Ri,K表示用户 u i u_i ui的原始推荐列表。让 v j ∈ R i , K v_j\in R_{i,K} vj∈Ri,K作为模型生成非空解释 A i j ≠ ∅ \mathcal{A}_{ij}\neq \varnothing Aij=∅的一个商品。
对于所有的商品,我们将商品aspect-质量矩阵 Y Y Y中所有出现在 A i , j \mathcal{A}_{i,j} Ai,j中的属性设置为0。通过这种方法,我们创造了一种反事实商品集合 V ∗ \mathcal{V}^* V∗,这为用户 u i u_i ui生成一个反事实推荐列表 R i , K ∗ R_{i,K}^* Ri,K∗。
那么PN分数的计算方式如下:
其中 I ( A i j ≠ ∅ ) I(\mathcal{A}_{ij}\neq \varnothing) I(Aij=∅)为判别函数,如果 A i j ≠ ∅ \mathcal{A}_{ij}\neq\varnothing Aij=∅,则这个函数为1,否则为0。
分母是算法成功生成解释的商品的数量,分子是假设我们移除相关解释涉及的aspects之后,会从商品推荐列表中移除的商品数量。
PS[34]
Probability of Sufficiency,充分性
充分性的思想是,在反事实的世界中, A i j \mathcal{A_{ij}} Aij中的aspect是在系统中仅存的aspects,那么商品 v j v_j vj将仍然被推荐给用户的可能性是多大。
相似的,我们计算生成的解释中符合PS定义的概率。对于集合 V \mathcal{V} V中的所有商品,我们将item-aspect矩阵 Y Y Y中的所有不在 A i j \mathcal{A}_{ij} Aij中的aspects值改成0。这样我们创造了一个新的反事实商品集合 V ′ \mathcal{V}' V′来对用户 u i u_i ui生成反事实推荐列表 R i , K ′ R_{i,K}' Ri,K′,PS分数的计算方式如下:
分母仍然是成功生成解释的数量,分子是生成的解释满足PS定义的数量。然后我们计算PN和PS的调和平均数来衡量整体表现, F N S = 2 ⋅ P S ⋅ P N P S + P N F_{NS}=\frac{2\cdot PS \cdot PN}{PS+PN} FNS=PS+PN2⋅PS⋅PN。
基础推荐模型的深度神经网络结构由一个融合层和三个全连接层组成,三个全连接层除了最后一层使用Softmax外,剩下两层之间的激活函数都是ReLU,全连接层的输出维度分别为{512, 256, 1}。
基础推荐模型为用户生成top-K的推荐列表。在实验中,K被设置为5。对于所有的数据集, λ \lambda λ被设置为100。注意到 l 2 -norm ∣ ∣ Δ ∣ ∣ 2 2 l_2\text{-norm}\vert\vert\Delta\vert\vert_2^2 l2-norm∣∣Δ∣∣22和 l 1 -norm ∣ ∣ Δ ∣ ∣ 1 l_1\text{-norm}\vert\vert\Delta\vert\vert_1 l1-norm∣∣Δ∣∣1的尺度几乎是一致的,所以模型中的 γ \gamma γ总是被设置为1。整个实验中使用的 α \alpha α=0.2,分别根据公式(11)和公式(12)生成多aspect解释和单aspect解释。
由于数据偏差的存在,所有的baseline模型(EFM,MTER,A2CF)都只在用户曾经在评论中提及过的aspects来构建解释,为了在面向用户的评估中与基线模型保持一致,我们使用了 M i ∈ { 0 , 1 } r M_i\in \{0,1\}^r Mi∈{0,1}r来作为 u i u_i ui的mask向量,如果 X i , k ≠ 0 X_{i,k}\neq 0 Xi,k=0,那么 M i , k = 1 M_{i,k}=1 Mi,k=1