title:Self-Supervised Graph Co-Training for Session-based Recommendation
link:https://arxiv.org/pdf/2108.10560.pdf
code:https://github.com/xiaxin1998/COTREC
from:CIKM 2021
1. 导读
新年快乐,新年第一篇开张啦,一起来学习吧
本文针对会话推荐提出COTREC方法,该方法通过自监督学习图协同训练来对稀疏的序列进行增强,从而提升模型的性能。
一方面通过构建两类图分别从会话内和会话间两个角度来对关系进行挖掘。 另一方面在两个图上构建了两个不同的图编码器,它们利用不同的连接信息来生成为标签,通过对比学习相互监督。并且利用KL散度对两个编码器进行约束。
2. 方法
2.1 符号 H=\{i_1,...,i_N\} 表示商品的集合,N是商品数,会话session表示为
s=[i_{s,1},...,i_{s,m}] 按时间排序,
i_{s,k} \in H 表示交互的商品,将商品的特征映射到相同的空间,用
x_i^{(l)} \in \mathbb{R}^{d^{(l)}} 表示商品
i \in I (I就是H,表示的有点冗余)在第
l 层DNN后得到维度为
d^{(l)} 的表征。所有的商品表征为
X^{(l)} \in \mathbb{R}^{N \times d^{(l)}} ,
X^{(0)} 为随机初始化的商品表征。会话s表示为向量,通过模型预测
i_{s,m+1} 对应的商品,返回排序后的商品集合
y=\{y_1,...,y_N\} ,然后选取top-K。
2.2 COTREC image.png
2.2.1 两个图 为了进行协同训练,首先通过利用会话的内部和相互连接模式从会话数据中导出两个不同的图,即商品图和会话图。从商品的视角 来说,构建一个有向图,根据商品(i_a, i_b)在会话中的点击顺序,边的权重
E_{ab} 为模式[i_a, i_b]出现的次数。从会话的角度 ,构建会话间的无向图,对于两个会话s_j, s_k他们边的权重
E_{jk} 为两个会话中共同包含的商品数除以两个会话包含商品总数。这两个图能够相互提供互补信息,同时保持独立并在一定程度上表现出不同。
2.2.2 编码器 构建了两种不同的图之后,再构建两个基于图卷积的编码器对上面两个图进行编码,提取信息。
2.2.2.1 商品编码器 这部分采用简化的图卷积来作为编码器,定义如下,其中
\hat{A}_I=A_I+I ,I为单位阵。D和A_I分别为度矩阵和邻接矩阵。W为可学习参数,X为embedding。下标
I 对应的是商品集合。
\mathbf{X}_{I}^{(l+1)}=\hat{\mathbf{D}}_{I}^{-1} \hat{\mathbf{A}}_{I} \mathbf{X}_{I}^{(l)} \mathbf{W}_{I}^{l}
经过L层图卷积后,将每一层的输出求均值聚合得到商品的embedding
X_I=\frac{1}{L+1}\sum_{l=0}^L{X_I^{(l)}} 。单纯通过这样的卷积方式无法考虑到会话中商品的顺序关系,因此这里加入位置编码矩阵
P_r=[p_1,...,p_m] ,其中m为会话的长度,
p_m\in \mathbb{R}^d 表示位置m的位置embedding。会话中第t个商品的embedding可以表示为下式,
\mathbf{x}_{I}^{t *}=\tanh \left(\mathbf{W}_{1}\left[\mathbf{x}_{I}^{t} \| \mathbf{p}_{m-t+1}\right]+\mathbf{b}\right)
然后利用soft-attention注意力机制对会话中不同商品加权后得到整个会话的表征,公式如下,其中
x_s 是会话中所有表征的均值,f,c,W是可学习参数。
\alpha_{t}=\mathbf{f}^{\top} \sigma\left(\mathbf{W}_{2} \mathbf{x}_{s}+\mathbf{W}_{3} \mathbf{x}_{I}^{t *}+\mathbf{c}\right), \theta_{I}=\sum_{t=1}^{m} \alpha_{t} \mathbf{x}_{I}^{t *}
2.2.2.2 会话编码器 会话图从另一个角度描述商品和会话关系。同样也利用图卷积进行编码,先通过将会话中的商品embedding
X^{(0)} 求均值后来对会话节点初始化得到embedding
\Theta^{(0)}_S (这里和上面的x_s应该是不一样的,这里是在没经过图卷积的embedding上求均值,而x_s是在经过图卷积后的embedding上求均值)。此处的图卷积定义如下,可以发现公式和商品编码器是类似的。在经过L层卷积后,将所有层的输出求均值,得到最终的会话节点表征
\Theta_S 。
\Theta_{S}^{(l+1)}=\hat{\mathbf{D}}_{S}^{-1} \hat{A}_{S} \Theta_{S}^{(l)} \mathbf{W}_{S}^{(l)}
2.2.3 用图协同训练挖掘自监督信号 上面构建了两个图编码器,它们可以相互提供互补信息。因此,通过利用来自另一个视图的信息来细化每个编码器是很自然的。这可以通过遵循协同训练来实现。给定会话视角下的会话𝑝,使用其在商品视角中学习的表征来预测其正和负的下一个商品 ,公式如下,其中
\theta_I^p 表示在商品视角下的会话p的表征(通过商品编码器中最后的公式计算得到),
y_I^p \in \mathbb{R}^{N} 是从会话p基础上预测的所有商品的分数。
\mathrm{y}_{I}^{p}=\operatorname{Softmax}\left(\operatorname{score}_{I}^{p}\right), \quad \text { score }_{I}^{p}=\mathrm{X}_{I} \theta_{I}^{p}
选择置信度最高的前 K 个项目作为正样本,作为增强的真值来监督会话编码器。形式上,正样本选择 如下,
c_{S}^{p^{+}}=\text {top-} K\left(\mathrm{y}_{I}^{p}\right)
至于选择负样本的方法 ,一个直截了当的想法是取得分最低的商品。但是,这种方式只能选择贡献不大的简单样本,因此换一种,从排名前10%的商品中,出去正样本,然后随机采样得到K个负样本
c_{S}^{p^{-}} 。这些商品可以被视为可以提供足够信息的难负样本,同时也不太可能落入误导学习的假阴性集合中。使用类似的方式为商品编码器选择有信息的样本,如下式
\mathrm{y}_{S}^{p}=\operatorname{Softmax}\left(\operatorname{score}_{S}^{p}\right), \quad \text { score }_{S}^{p}=\mathrm{X}^{(0)} \theta_{S}^{p}
在每一个训练的batch中,这些正负样本都是重新构建的,然后去优化两个编码器。这个过程背后的直觉是,在一个图中获得高置信度成为下一个商品的样本在另一个图中也应该是有价值的。迭代这个过程预计会产生更多信息丰富的样本(也就是更难的样本)。反过来,编码器也在富含信息的样本的监督下优化,这将递归地提取更难的样本。
2.2.4 对比学习 使用生成的伪标签,用于改进编码器的自监督任务可以通过对比目标进行。在基于会话的场景中,假设会话中最后点击的商品与下一个商品最相关 。因此,可以最大化(最小化)最后点击商品的表征与预测商品样本之间的一致性,同时将给定的会话表征作为会话上下文。给定一个会话𝑝和预测值,最大化商品对之间互信息的下限,作为学习目标如下式,其中
x^{last} 表示会话中最后点击的商品的embedding,
\psi(x_1,x_2,x_3)=\exp(f(x_1+x_2,x_3+x_2)/\tau) ,其中τ是超参数,实验中设置为0.2,f()函数是计算两个向量的余弦相似度。
\begin{array}{l}
\mathcal{L}_{ssl}=-\log \frac{\sum_{i \in c_I^{p^+}}{\psi(x_{I}^{last},\theta_I^{p},x_I^i)}}{\sum_{i \in c_I^{p^+}}{\psi(x_{I}^{last},\theta_I^{p},x_I^i)}+\sum_{j \in c_I^{p^-}}{\psi(x_{I}^{last},\theta_I^{p},x_I^j)}} \\
-\log \frac{\sum_{i \in c_S^{p^+}}{\psi(x_{(0)}^{last},\theta_S^{p},x_{(0)}^i)}}{\sum_{i \in c_S^{p^+}}{\psi(x_{(0)}^{last},\theta_S^{p},x_{(0)}^i)}+\sum_{j \in c_S^{p^-}}{\psi(x_{(0)}^{last},\theta_S^{p},x_{(0)}^j)}}
\end{array} 2.2.5 协同训练中的发散约束 文中协同训练时考虑的两个角度都是从同一数据中挖掘不同的信息。一方面,这种扩充不需要两个足够独立的数据源,这是优势。但另一方面,它可能会以某种方式导致模式崩溃问题,即,在经过多次学习迭代后,当给定相同的会话时,两个编码器变得相似并生成相同的标签。因此,有必要使两个编码器在一定程度上有所不同。从理论上讲,针对一个编码器的对抗性示例会误导它产生错误的预测。但是,如果两个编码器被训练成能够抵抗彼此生成的对抗性示例并且仍然输出正确的预测,那么就可以使得两个编码器有所不同。定义散度约束如下,其中Prob_I()和Prob_S()表示会话p中每个商品的概率,
Prob_I(X_I)=Softmax(X_I\theta_I^p) ,
Prob_S(X_S)=softmax(X_I\theta_S^p) ,
\Delta 表示对抗性扰动,
\begin{aligned}
\mathcal{L}_{\text {diff }}=& K L\left(\operatorname{Prob}_{I}\left(\mathbf{X}_{I}\right), \operatorname{Prob}_{S}\left(\mathbf{X}_{I}+\Delta_{a d v}^{I}\right)\right) \\
&+K L\left(\operatorname{Prob}_{S}\left(\mathbf{X}_{I}\right), \operatorname{Prob}_{I}\left(\mathbf{X}_{I}+\Delta_{a d v}^{S}\right)\right)
\end{aligned} 为了创建对抗样本,采用 [1] 中提出的 FGSM 方法,该方法通过快速梯度计算在模型参数上添加对抗扰动。在文中,在商品embedding上添加了对抗性扰动。扰动 Δ 更新为下式,其中
l_{adv}() 表示在对抗性样本上的损失函数。
\Delta_{a d v}=\epsilon \frac{\Gamma}{\|\Gamma\|} \quad \text { where } \quad \Gamma=\frac{\partial l_{a d v}(\hat{y} \mid \mathrm{x}+\Delta)}{\partial \Delta} .
2.2.6 模型优化 由于商品视图可以以更细粒度的粒度反映商品的连接性,因此使用商品视图上的编码器作为主要编码器来预测最终的候选商品以进行推荐。公式如下,
\hat{z}_i=\theta_i^{sT}x_i
\hat{y}=softmax(\hat{z})
损失函数采用交叉熵函数,如下
\mathcal{L}_{r}=-\sum_{i=1}^{N} \mathbf{y}_{i} \log \left(\hat{\mathbf{y}}_{i}\right)+\left(1-\mathbf{y}_{i}\right) \log \left(1-\hat{\mathbf{y}}_{i}\right) .
总损失为L=L_r+αL_ssl+βL_diff。伪代码如下,
3. 实验结果
image.png
4. 文献
[1] Ian J Goodfellow, Jonathon Shlens, and Christian Szegedy. 2014. Explaining and harnessing adversarial examples. arXiv preprint arXiv:1412.6572 (2014).