此论文是在AGREE(Attentive Group Recommendation)模型上的进一步增强,有兴趣的朋友可以去看上一篇博客讲述的就是AGREE模型。在AGREE模型的基础上,个体用户的表示学习通过利用他们的社会关注者信息得到进一步增强。提出的解决方案由两个部分组成:
(1)层次注意网络学习,利用双层注意网络在层次结构中表示群体和用户。第一层注意力网络聚合每个用户的关注对象,将社会影响合并到群组推荐场景中,第二层注意力机制作为群组成员聚集策略来执行群组推荐。
(2)使用NCF进行交互学习,为用户和组推荐项目。
此部分作为一个分层注意力网络,主要分为两层,分别是:Attentive Group Representation Learning和Attentive User Representation Learning。第一层注意力网络聚合每个用户的关注对象,将社会影响合并到群组推荐场景中,第二层注意力机制作为群组成员聚集策略来执行群组推荐。第一部分是AGREE模型的基础,主要讲解第二部分。
将社会关注者信息整合到关注用户表示学习中,将用户的关注者信息作为用户的属性,并以关注权值进行聚合。专注用户表示学习的目标是获得每个个体用户更为准确的嵌入向量。公式如下:
u
i
=
∑
t
∈
H
i
β
(
i
,
t
)
f
t
+
s
i
u_i=\displaystyle\sum_{t \in H_i}\beta(i,t)f_t+s_i
ui?=t∈Hi?∑?β(i,t)ft?+si?
u
i
u_i
ui?为用户嵌入,
β
(
i
,
t
)
\beta(i,t)
β(i,t)为注意力权重,本文最为主要的部分便是注意力权重的训练,公式如下:
b
(
j
,
t
)
=
h
T
R
e
L
U
(
Q
f
f
t
+
Q
s
s
i
+
b
)
b(j,t)=h^TReLU(Q_ff_t+Q_ss_i+b)
b(j,t)=hTReLU(Qf?ft?+Qs?si?+b)
β
(
i
,
t
)
=
s
o
f
t
m
a
x
(
b
(
i
,
t
)
)
=
e
x
p
(
b
(
i
,
t
)
)
∑
t
∈
H
i
e
x
p
(
b
(
i
,
t
)
)
\beta(i,t)=softmax(b(i,t))=\frac{exp(b(i,t))}{\textstyle\sum_{t\in H_i}exp(b(i,t))}
β(i,t)=softmax(b(i,t))=∑t∈Hi??exp(b(i,t))exp(b(i,t))?
Q
f
Q_f
Qf?和
Q
s
Q_s
Qs?分别是将追随者嵌入和用户偏好嵌入转换为隐含层的注意网络的权值矩阵,b是隐含层的偏差向量。利用ReLU作为隐藏层的激活函数,利用权重向量h将其投影到得分
β
(
i
,
t
)
\beta(i,t)
β(i,t)上,最后利用softmax函数对用户级注意力进行归一化。利用注意力机制的基本原理,动态学习用户关注对象的关注权重,用户关注对象对用户表示的贡献不均衡。
s
i
s_i
si?为用户的一般偏好。
NCF是一种用于项目推荐的多层神经网络框架。它的想法是将用户嵌入和物品嵌入到一个专用的神经网络中,从而从数据中学习交互功能。由于神经网络具有较强的数据拟合能力,因此NCF框架比传统的MF模型具有更强的通用性,后者简单地使用与数据无关的内积函数作为交互函数。因此,选择NCF框架来对嵌入(表示用户、项目和组)和交互功能(预测用户-项目和组-项目交互)执行端到端学习。
pooling layer
对输入的向量
g
l
(
j
)
g_l(j)
gl?(j)和
v
(
j
)
v(j)
v(j)进行逐元素乘积,然后与
g
l
(
j
)
,
v
(
j
)
g_l(j),v(j)
gl?(j),v(j)进行连接。
e
0
=
φ
p
o
o
l
i
n
g
(
g
l
(
j
)
,
v
(
j
)
)
=
[
g
l
(
j
)
?
v
(
j
)
g
l
(
j
)
v
(
j
)
]
e_0=\varphi_{pooling}(g_l(j),v(j))= \begin{bmatrix} g_l(j)\bigodot v(j)\\ g_l(j)\\ v(j) \end{bmatrix}
e0?=φpooling?(gl?(j),v(j))=
?gl?(j)?v(j)gl?(j)v(j)?
?
内积能够有效的捕获到群组和物品之间的交互,同时连接群组和物品本身的信息能够避免信息丢失。
hidden layer
池化层之上是一堆完全连接的层,这些层使模型能够捕获用户、组和项目之间的非线性和高阶相关性。
{
e
1
=
R
e
L
U
(
W
1
e
0
+
b
1
)
e
1
=
R
e
L
U
(
W
1
e
0
+
b
1
)
.
.
.
.
e
h
=
R
e
L
U
(
W
h
e
h
?
1
+
b
h
)
\begin{cases} e_1=ReLU(W_1e_0+b_1)\\ e_1=ReLU(W_1e_0+b_1)\\ ....\\ e_h=ReLU(W_he_{h-1}+b_h) \end{cases}
?
?
??e1?=ReLU(W1?e0?+b1?)e1?=ReLU(W1?e0?+b1?)....eh?=ReLU(Wh?eh?1?+bh?)?
最后一层输出
e
h
e_h
eh?经过下面的公式转化为预测分:
{
r
i
j
^
=
w
T
e
h
,
i
f
e
0
=
φ
p
o
o
l
i
n
g
(
u
i
,
v
j
)
y
i
j
^
=
w
T
e
h
,
i
f
e
0
=
φ
p
o
o
l
i
n
g
(
g
l
(
j
)
,
v
j
)
\begin{cases} \hat{r_{ij}}=w^Te_h,if e_0=\varphi_{pooling}(u_i,v_j)\\ \hat{y_{ij}}=w^Te_h,if e_0=\varphi_{pooling}(g_l(j),v_j) \end{cases}
{rij?^?=wTeh?,ife0?=φpooling?(ui?,vj?)yij?^?=wTeh?,ife0?=φpooling?(gl?(j),vj?)?
w
w
w表示预测层的权重
r
i
j
^
\hat{r_{ij}}
rij?^?和
y
i
j
^
\hat{y_{ij}}
yij?^?分别表示用户对物品的预测分和群组对物品的预测分。设计了两个任务的预测共享相同的隐藏层。这是因为群嵌入是从用户嵌入聚合而来的,这使得它们本质上处于相同的语义空间中。此外,这可以增强用户-项目交互数据对组-项目交互功能的训练,反之亦然,有利于二者的相互强化。
代码链接:SoAGREE