论文《Sequential Recommendation with Graph Neural Networks》阅读

论文概况

今天带来的是清华和快手公司联合完成的作品,发表在SIGIR 2021上关于序列化推荐的论文,模型名称为SURGE

主要亮点及主要思路

  1. 作者使用GNN完成序列化推荐任务,有别于会话推荐(Session-based Recommendation, SBR),序列化推荐(Sequential Recommendation, SR)由于序列长度比较长,所以直接用GNN效果不太好(过度平滑问题导致GNN只能收集短序列信息,一般最多4跳),所以需要改造图以使图稠密。这里作者使用了度量学习(Metric Learning)完成图构造。
  2. 作者使用簇(cluster)完成兴趣抽取。

下面,进行主要内容介绍。

主要内容介绍

基于度量学习的图构造

首先模型需要将序列构造成图,但是SR中的序列是长序列且大多不重复,因此无法直接使用GNN。作者这里使用Metric Learning(或称为相似度学习)将相似物品进行靠近完成图构造。具体地,针对每个节点向量( h ⃗ i ∈ R d \vec{h}_i \in \mathbb{R}^{d} h iRd)进行线性变换得到相似度矩阵 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} MRn×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} ARn×n)方便后续GNN学习。

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 iRd

具体的,上面通过度量学习完成了邻接矩阵 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 jjNi)+h i)(3)

∥ \| 表示拼接,最终完成多头整合的向量 h ⃗ i ′ ∈ R δ d ′ \vec{h}_{i}^{\prime} \in \mathbb{R}^{\delta d^{\prime}} h iRδ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 ih 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 jh 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 jh 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)=kNiexp(α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) \begin{aligned} &\left\{\vec{h}_{1}^{*}, \vec{h}_{2}^{*}, \ldots, \vec{h}_{m}^{*}\right\} = S^{\top}\left\{\vec{h}_{1}^{\prime}, \vec{h}_{2}^{\prime}, \ldots, \vec{h}_{n}^{\prime}\right\}, \\ &\left\{\gamma_{1}^{*}, \gamma_{2}^{*}, \ldots, \gamma_{m}^{*}\right\} = S^{\top}\left\{\gamma_{1}, \gamma_{2}, \ldots, \gamma_{n}\right\}, \end{aligned} \tag{7} {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} SRn×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 (Aijh j,tjNi))(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,SSF(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=1nH(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,Pm2(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,那么模型跟时序不时序的其实也没大关系,大概这样。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值