赞
踩
今天带来的是清华和快手公司联合完成的作品,发表在SIGIR 2021上关于序列化推荐的论文,模型名称为SURGE。
下面,进行主要内容介绍。
首先模型需要将序列构造成图,但是SR中的序列是长序列且大多不重复,因此无法直接使用GNN。作者这里使用Metric Learning(或称为相似度学习)将相似物品进行靠近完成图构造。具体地,针对每个节点向量(
h
⃗
i
∈
R
d
\vec{h}_i \in \mathbb{R}^{d}
h
i∈Rd)进行线性变换得到相似度矩阵
M
M
M如下:
M
i
j
=
cos
(
w
⃗
⊙
h
⃗
i
,
w
⃗
⊙
h
⃗
j
)
(1)
M_{ij}=\cos(\vec{w} \odot \vec{h}_i, \vec{w} \odot \vec{h}_j) \tag{1}
Mij=cos(w
⊙h
i,w
⊙h
j)(1)
使用多头方式完成多方面语义,改造式(1)如下(注,原文公式2应该写错了):
M
i
j
δ
=
cos
(
w
⃗
δ
⊙
h
⃗
i
,
w
⃗
δ
⊙
h
⃗
j
)
,
M
i
j
=
1
ϕ
∑
δ
=
1
ϕ
M
i
j
δ
(2)
M_{ij}^\delta = \cos(\vec{w}_\delta \odot \vec{h}_i, \vec{w}_\delta \odot \vec{h}_j), M_{ij} = \frac{1}{\phi}\sum\limits_{\delta=1}^{\phi}{M_{ij}^\delta} \tag{2}
Mijδ=cos(w
δ⊙h
i,w
δ⊙h
j),Mij=ϕ1δ=1∑ϕMijδ(2)
根据得到的矩阵 M ∈ R n × n M\in \mathbb{R}^{n\times n} M∈Rn×n 完成邻接矩阵构造( n n n为当前序列中item数量),将矩阵中排前 ϵ n 2 \epsilon n^2 ϵn2的item设置为1,其余为0完成一个相对稠密的矩阵构造( A ∈ R n × n A \in \mathbb{R}^{n\times n} A∈Rn×n)方便后续GNN学习。
这部分的目的为将原来的节点向量 { h ⃗ 1 , h ⃗ 2 , ⋯ , h ⃗ n } \{ \vec{h}_1, \vec{h}_2, \cdots, \vec{h}_n \} {h 1,h 2,⋯,h n} 更新为 h ⃗ 1 ′ , h ⃗ 2 ′ , ⋯ , h ⃗ n ′ \vec{h}_1^\prime, \vec{h}_2^\prime, \cdots, \vec{h}_n^\prime h 1′,h 2′,⋯,h n′ ,其中任意 h ⃗ i ′ ∈ R d ′ \vec{h}_i^\prime \in \mathbb{R}^{d^\prime} h i′∈Rd′。
具体的,上面通过度量学习完成了邻接矩阵 A A A的构造,使用 A A A 完成节点聚合(aggregation),具体如下( E i j δ E_{i j}^{\delta} Eijδ的具体构造方法见后文):
h ⃗ i ′ = ∥ δ = 1 ϕ σ ( W a δ ⋅ Agg ( E i j δ h ⃗ j ∣ j ∈ N i ) + h ⃗ i ) (3) \vec{h}_{i}^{\prime}={\mathop{\|}}_{\delta=1}^{\phi} \sigma\left(\mathrm{W}_{\mathbf{a}}{ }^{\delta} \cdot \text { Agg }\left(E_{i j}^{\delta} \ \vec{h}_{j} \mid j \in \mathcal{N}_{i}\right)+\vec{h}_{i}\right) \tag{3} h i′=∥δ=1ϕσ(Waδ⋅ Agg (Eijδ h j∣j∈Ni)+h i)(3)
∥ \| ∥表示拼接,最终完成多头整合的向量 h ⃗ i ′ ∈ R δ d ′ \vec{h}_{i}^{\prime} \in \mathbb{R}^{\delta d^{\prime}} h i′∈Rδd′
簇(cluster)就是指将原来序列中的 n n n个物品根据兴趣整合到 m m m个簇中已完成兴趣的集中,询问就是指目标物品(target item),就是将要预测的物品。
不得不说的是,文中关于询问/目标 这一部分的描述感觉上是有问题的,或至少是交代不清,具体还得看代码才能知道他要表达什么。现在按照文中想要表达的意思进行理解和梳理如下。
α i = Att c ( W c h ⃗ i ∥ h ⃗ i c ∥ W c h ⃗ i ⊙ h ⃗ i c ) (4) \alpha_{i}=\text {Att}_{c}\left(\mathbf{W}_{\mathrm{c}} \vec{h}_{i}\left\|\vec{h}_{i_{c}}\right\| \mathbf{W}_{\mathbf{c}} \vec{h}_{i} \odot \vec{h}_{i_{c}}\right) \tag{4} αi=Attc(Wch i∥ ∥h ic∥ ∥Wch i⊙h ic)(4)
这里的
h
⃗
i
c
\vec{h}_{i_{c}}
h
ic 是将图
A
A
A 中节点
i
i
i 的
k
k
k-hop邻居节点进行平均得到,由此即可以得到
α
i
\alpha_{i}
αi。
同理,
β
j
=
Att
q
(
W
q
h
⃗
j
∥
h
⃗
t
∥
W
q
h
⃗
j
⊙
h
⃗
t
)
(5’)
\beta_{j}=\text {Att}_{q}\left(\mathbf{W}_{\mathbf{q}} \vec{h}_{j}\left\|\vec{h}_{t}\right\| \mathbf{W}_{\mathrm{q}} \vec{h}_{j} \odot \vec{h}_{t}\right) \tag{5'}
βj=Attq(Wqh
j∥
∥h
t∥
∥Wqh
j⊙h
t)(5’)
这里 h t ⃗ \vec{h_t} ht 表示目标物品。这里就是我们提出的疑问所在,如果是target-aware,那么这个target和预测物品必须是一一对应的,那么这里的 β j \beta_{j} βj应该有 ∣ V ∣ |\mathcal{V}| ∣V∣个(不是 n n n个,是所有物品大小—— ∣ V ∣ |\mathcal{V}| ∣V∣个),即预测一个,就对应有一个 β \beta β,之后与 β \beta β相关的参数也都应该如此,我们这里修改原文的 β \beta β如下(后续的参数也都相应修改):
β j t = Att q ( W q h ⃗ j ∥ h ⃗ t ∥ W q h ⃗ j ⊙ h ⃗ t ) (5) \beta_{j}^t=\text {Att}_{q}\left(\mathbf{W}_{\mathbf{q}} \vec{h}_{j}\left\|\vec{h}_{t}\right\| \mathbf{W}_{\mathrm{q}} \vec{h}_{j} \odot \vec{h}_{t}\right) \tag{5} βjt=Attq(Wqh j∥ ∥h t∥ ∥Wqh j⊙h t)(5)
得到 α \alpha α 和 β \beta β 后,就可以得到 E E E ,具体如下:
E i j t = softmax j ( α i + β j t ) = exp ( α i + β j t ) ∑ k ∈ N i exp ( α i + β k t ) (6) E_{ij}^t = \operatorname{softmax}_{j} \left(\alpha_{i}+\beta_{j}^t\right) = \frac{\exp \left(\alpha_{i}+\beta_{j}^t \right)} {\sum_{k \in \mathcal{N}_{i}} \exp \left(\alpha_{i}+\beta_{k}^t \right)} \tag{6} Eijt=softmaxj(αi+βjt)=∑k∈Niexp(αi+βkt)exp(αi+βjt)(6)
{
h
⃗
1
∗
,
h
⃗
2
∗
,
…
,
h
⃗
m
∗
}
=
S
⊤
{
h
⃗
1
′
,
h
⃗
2
′
,
…
,
h
⃗
n
′
}
,
{
γ
1
∗
,
γ
2
∗
,
…
,
γ
m
∗
}
=
S
⊤
{
γ
1
,
γ
2
,
…
,
γ
n
}
,
(7)
这里的 S ∈ R n × m S \in \mathbb{R}^{n \times m} S∈Rn×m就是用来簇聚类的,将 n n n个物品聚类形成 m m m个簇。 γ i \gamma_{i} γi 表示重要性是系数,实际上是 β i \beta_i βi做 softmax \operatorname{softmax} softmax 完成的,具体做法文中没有介绍。
对于
S
S
S 的学习,具体如下:
S
i
:
t
=
softmax
(
W
p
⋅
Agg
(
A
i
j
∗
h
⃗
j
,
t
′
∣
j
∈
N
i
)
)
(8)
S_{i:}^t = \operatorname{softmax}\left(\mathrm{W}_{\mathbf{p}} \cdot \text { Agg }\left(A_{i j} * \vec{h}_{j,t}^{\prime} \mid j \in \mathcal{N}_{i}\right)\right) \tag{8}
Si:t=softmax(Wp⋅ Agg (Aij∗h
j,t′∣j∈Ni))(8)
这里我们同样加上了 ⋅ t \cdot ^t ⋅t 以对target进行标识。 式(8)通过 W p \mathrm{W}_{\mathbf{p}} Wp 完成了 m m m 个聚簇关系的学习。
L M = ∥ A , S S ⊤ ∥ F (9) L_M = \| A, SS^\top \|_F \tag{9} LM=∥A,SS⊤∥F(9)
S S S 表示 n n n 个物品被分配到 m m m 个簇的概率,则 S S ⊤ SS^\top SS⊤ 表示两个物品被分配到同一个簇的概率。这个正则项可以保证在 A A A 中有联系的物品会被尽量分配到一个簇。
同一个物品被分配到一个簇是最理想的,如果一个物品在各个簇的分配概率比较平均就不好了,因此,提出以下正则:
L
A
=
1
n
∑
i
=
1
n
H
(
S
i
:
)
(10)
L_A= \frac{1}{n}\sum\limits_{i=1}^n{H\left(S_{i:}\right)} \tag{10}
LA=n1i=1∑nH(Si:)(10)
这里的 H ( ⋅ ) H\left( \cdot \right) H(⋅) 指熵函数,实现细节未给出。
物品 { h ⃗ 1 ′ , h ⃗ 2 ′ , … , h ⃗ n ′ } \left\{\vec{h}_{1}^{\prime}, \vec{h}_{2}^{\prime}, \ldots, \vec{h}_{n}^{\prime}\right\} {h 1′,h 2′,…,h n′}之前是有时序关系的,在时序上把持先后发生,为保证映射后的聚簇embedding { h ⃗ 1 ∗ , h ⃗ 2 ∗ , … , h ⃗ m ∗ } \left\{\vec{h}_{1}^{*}, \vec{h}_{2}^{*}, \ldots, \vec{h}_{m}^{*}\right\} {h 1∗,h 2∗,…,h m∗}也有相同的时序关系,使用以下正则:
L P = ∥ P n S , P m ∥ 2 (11) L_P = \|P_nS, P_m\|_2 \tag{11} LP=∥PnS,Pm∥2(11)
其中, P n = [ 1 , 2 , ⋯ , n ] P_n = [1, 2, \cdots, n] Pn=[1,2,⋯,n], P m = [ 1 , 2 , ⋯ , m ] P_m = [1, 2, \cdots, m] Pm=[1,2,⋯,m]。
说实话,不清楚这一步的目的是啥,不同物品映射到不同的簇已经打乱时序关系了,聚簇向量 改变顺序不也不影响吗?这个时序关系起不到作用吧感觉。
比如说,映射过去的向量如果由 { h ⃗ 1 ∗ , h ⃗ 2 ∗ , … , h ⃗ m ∗ } \left\{\vec{h}_{1}^{*}, \vec{h}_{2}^{*}, \ldots, \vec{h}_{m}^{*}\right\} {h 1∗,h 2∗,…,h m∗}变成 { h ⃗ 2 ∗ , h ⃗ 1 ∗ , … , h ⃗ m ∗ } \left\{\vec{h}_{2}^{*}, \vec{h}_{1}^{*}, \ldots, \vec{h}_{m}^{*}\right\} {h 2∗,h 1∗,…,h m∗},不只说明两个聚簇谁是谁,跟时序有关系吗?真心求问,请各位评论区指教。
通过AUGRU整合 { h ⃗ 1 ∗ , h ⃗ 2 ∗ , … , h ⃗ m ∗ } \left\{\vec{h}_{1}^{*}, \vec{h}_{2}^{*}, \ldots, \vec{h}_{m}^{*}\right\} {h 1∗,h 2∗,…,h m∗}得到 h ⃗ s \vec{h}_s h s,通过2-layer MLP 完成预测。使用log loss作为损失函数,这里不再赘述。
本文使用Metric Learning完成图构建,使用GNN完成embedding聚合,通过cluster完成兴趣提取,总体来说工作完整。
个人感觉cluster和GNN的工作有点割裂,另外体现时序性关系的唯一一点就是正则化项 L P L_P LP,感觉有点牵强附会,而且逻辑上解释不太通。
如果单纯Metric Learning+GNN,那么模型跟时序不时序的其实也没大关系,大概这样。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。