wordpress 维基主题/南宁seo推广外包
论文《Sequential Recommendation with Graph Neural Networks》阅读
- 论文概况
- 主要亮点及主要思路
- 主要内容介绍
- 基于度量学习的图构造
- GNN上的兴趣传播
- 簇注意力和询问注意力
- 兴趣提取
- 正则化项
- 相同聚类正则
- 单一分类正则
- 聚簇排序相关性正则
- 预测层
- 总结
论文概况
今天带来的是清华和快手公司联合完成的作品,发表在SIGIR 2021上关于序列化推荐的论文,模型名称为SURGE。
主要亮点及主要思路
- 作者使用GNN完成序列化推荐任务,有别于会话推荐(Session-based Recommendation, SBR),序列化推荐(Sequential Recommendation, SR)由于序列长度比较长,所以直接用GNN效果不太好(过度平滑问题导致GNN只能收集短序列信息,一般最多4跳),所以需要改造图以使图稠密。这里作者使用了度量学习(Metric Learning)完成图构造。
- 作者使用簇(cluster)完成兴趣抽取。
下面,进行主要内容介绍。
主要内容介绍
基于度量学习的图构造
首先模型需要将序列构造成图,但是SR中的序列是长序列且大多不重复,因此无法直接使用GNN。作者这里使用Metric Learning(或称为相似度学习)将相似物品进行靠近完成图构造。具体地,针对每个节点向量(h⃗i∈Rd\vec{h}_i \in \mathbb{R}^{d}hi∈Rd)进行线性变换得到相似度矩阵MMM如下:
Mij=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⊙hi,w⊙hj)(1)
使用多头方式完成多方面语义,改造式(1)如下(注,原文公式2应该写错了):
Mijδ=cos(w⃗δ⊙h⃗i,w⃗δ⊙h⃗j),Mij=1ϕ∑δ=1ϕMijδ(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δ⊙hi,wδ⊙hj),Mij=ϕ1δ=1∑ϕMijδ(2)
根据得到的矩阵M∈Rn×nM\in \mathbb{R}^{n\times n}M∈Rn×n 完成邻接矩阵构造(nnn为当前序列中item数量),将矩阵中排前ϵn2\epsilon n^2ϵn2的item设置为1,其余为0完成一个相对稠密的矩阵构造(A∈Rn×nA \in \mathbb{R}^{n\times n}A∈Rn×n)方便后续GNN学习。
GNN上的兴趣传播
这部分的目的为将原来的节点向量{h⃗1,h⃗2,⋯,h⃗n}\{ \vec{h}_1, \vec{h}_2, \cdots, \vec{h}_n \}{h1,h2,⋯,hn} 更新为 h⃗1′,h⃗2′,⋯,h⃗n′\vec{h}_1^\prime, \vec{h}_2^\prime, \cdots, \vec{h}_n^\primeh1′,h2′,⋯,hn′ ,其中任意h⃗i′∈Rd′\vec{h}_i^\prime \in \mathbb{R}^{d^\prime}hi′∈Rd′。
具体的,上面通过度量学习完成了邻接矩阵AAA的构造,使用 AAA 完成节点聚合(aggregation),具体如下(EijδE_{i j}^{\delta}Eijδ的具体构造方法见后文):
h⃗i′=∥δ=1ϕσ(Waδ⋅Agg (Eijδh⃗j∣j∈Ni)+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}hi′=∥δ=1ϕσ(Waδ⋅ Agg (Eijδ hj∣j∈Ni)+hi)(3)
∥\|∥表示拼接,最终完成多头整合的向量h⃗i′∈Rδd′\vec{h}_{i}^{\prime} \in \mathbb{R}^{\delta d^{\prime}}hi′∈Rδd′
簇注意力和询问注意力
簇(cluster)就是指将原来序列中的nnn个物品根据兴趣整合到mmm个簇中已完成兴趣的集中,询问就是指目标物品(target item),就是将要预测的物品。
不得不说的是,文中关于询问/目标 这一部分的描述感觉上是有问题的,或至少是交代不清,具体还得看代码才能知道他要表达什么。现在按照文中想要表达的意思进行理解和梳理如下。
αi=Attc(Wch⃗i∥h⃗ic∥Wch⃗i⊙h⃗ic)(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(Wchi∥∥hic∥∥Wchi⊙hic)(4)
这里的h⃗ic\vec{h}_{i_{c}}hic 是将图 AAA 中节点 iii 的 kkk-hop邻居节点进行平均得到,由此即可以得到αi\alpha_{i}αi。
同理,
βj=Attq(Wqh⃗j∥h⃗t∥Wqh⃗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(Wqhj∥∥ht∥∥Wqhj⊙ht)(5’)
这里ht⃗\vec{h_t}ht表示目标物品。这里就是我们提出的疑问所在,如果是target-aware,那么这个target和预测物品必须是一一对应的,那么这里的βj\beta_{j}βj应该有∣V∣|\mathcal{V}|∣V∣个(不是nnn个,是所有物品大小——∣V∣|\mathcal{V}|∣V∣个),即预测一个,就对应有一个β\betaβ,之后与β\betaβ相关的参数也都应该如此,我们这里修改原文的β\betaβ如下(后续的参数也都相应修改):
βjt=Attq(Wqh⃗j∥h⃗t∥Wqh⃗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(Wqhj∥∥ht∥∥Wqhj⊙ht)(5)
得到 α\alphaα 和 β\betaβ 后,就可以得到 EEE ,具体如下:
Eijt=softmaxj(αi+βjt)=exp(αi+βjt)∑k∈Niexp(αi+βkt)(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)\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}{h1∗,h2∗,…,hm∗}=S⊤{h1′,h2′,…,hn′},{γ1∗,γ2∗,…,γm∗}=S⊤{γ1,γ2,…,γn},(7)
这里的S∈Rn×mS \in \mathbb{R}^{n \times m}S∈Rn×m就是用来簇聚类的,将nnn个物品聚类形成mmm个簇。γi\gamma_{i}γi 表示重要性是系数,实际上是βi\beta_iβi做 softmax\operatorname{softmax}softmax 完成的,具体做法文中没有介绍。
对于 SSS 的学习,具体如下:
Si:t=softmax(Wp⋅Agg (Aij∗h⃗j,t′∣j∈Ni))(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∗hj,t′∣j∈Ni))(8)
这里我们同样加上了 ⋅t\cdot ^t⋅t 以对target进行标识。 式(8)通过 Wp\mathrm{W}_{\mathbf{p}}Wp 完成了 mmm 个聚簇关系的学习。
正则化项
相同聚类正则
LM=∥A,SS⊤∥F(9)L_M = \| A, SS^\top \|_F \tag{9}LM=∥A,SS⊤∥F(9)
SSS 表示 nnn 个物品被分配到 mmm 个簇的概率,则 SS⊤SS^\topSS⊤ 表示两个物品被分配到同一个簇的概率。这个正则项可以保证在 AAA 中有联系的物品会被尽量分配到一个簇。
单一分类正则
同一个物品被分配到一个簇是最理想的,如果一个物品在各个簇的分配概率比较平均就不好了,因此,提出以下正则:
LA=1n∑i=1nH(Si:)(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\}{h1′,h2′,…,hn′}之前是有时序关系的,在时序上把持先后发生,为保证映射后的聚簇embedding {h⃗1∗,h⃗2∗,…,h⃗m∗}\left\{\vec{h}_{1}^{*}, \vec{h}_{2}^{*}, \ldots, \vec{h}_{m}^{*}\right\}{h1∗,h2∗,…,hm∗}也有相同的时序关系,使用以下正则:
LP=∥PnS,Pm∥2(11)L_P = \|P_nS, P_m\|_2 \tag{11}LP=∥PnS,Pm∥2(11)
其中,Pn=[1,2,⋯,n]P_n = [1, 2, \cdots, n]Pn=[1,2,⋯,n],Pm=[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\}{h1∗,h2∗,…,hm∗}变成{h⃗2∗,h⃗1∗,…,h⃗m∗}\left\{\vec{h}_{2}^{*}, \vec{h}_{1}^{*}, \ldots, \vec{h}_{m}^{*}\right\}{h2∗,h1∗,…,hm∗},不只说明两个聚簇谁是谁,跟时序有关系吗?真心求问,请各位评论区指教。
预测层
通过AUGRU整合{h⃗1∗,h⃗2∗,…,h⃗m∗}\left\{\vec{h}_{1}^{*}, \vec{h}_{2}^{*}, \ldots, \vec{h}_{m}^{*}\right\}{h1∗,h2∗,…,hm∗}得到h⃗s\vec{h}_shs,通过2-layer MLP 完成预测。使用log loss作为损失函数,这里不再赘述。
总结
本文使用Metric Learning完成图构建,使用GNN完成embedding聚合,通过cluster完成兴趣提取,总体来说工作完整。
个人感觉cluster和GNN的工作有点割裂,另外体现时序性关系的唯一一点就是正则化项LPL_PLP,感觉有点牵强附会,而且逻辑上解释不太通。
如果单纯Metric Learning+GNN,那么模型跟时序不时序的其实也没大关系,大概这样。