zl程序教程

您现在的位置是:首页 >  后端

当前栏目

CIKM'21序列推荐|通过二部图和注意力机制聚合序列信息和时间信息的推荐方法

序列方法 时间 信息 &# 机制 通过 推荐
2023-06-13 09:12:49 时间

Continuous-Time Sequential Recommendation with Temporal Graph Collaborative Transformer https://dl.acm.org/doi/pdf/10.1145/3459637.3482242

时间紧迫的小伙伴可以看背景和总结部分,公式太长可以左右滑动哦

1. 背景

在序列推荐中,现有的许多方法是利用序列中item之间转换的模式进行建模,而忽略了其中包含的时序信息例子:如下图所示,我们想要预测用户4在t5时刻会点击什么item,从序列模式上来看,用户1和用户3上可以看出i2之后跟的是i3,而用户2中i2之后是i4,这里跟i3的更加强烈,倾向于推荐i3;但是从协作信号上来看,用户4和用户2都在时间t1和item i1交互,且都交互了i2,所以更倾向于推荐i4。这就是两种不同角度的信息,作者希望将序列信息和协作信息进行整合

  • 序列信息:反映的是一种先后关系,即item1后面出现item2,这种先后依赖关系,我们通常可以用RNN系列的方法来获得。
  • 协作信号:全称为时序协作信号,反映的是一种和时间有关的信息,即例子中的t1时刻是什么item,t2时刻是什么。

本文提出 Temporal Graph Sequential Recommender (TGSRec) 主要包含两个创新模块:Temporal Collaborative Transformer (TCT) layer 和 graph information propagation 。

  • TCT层利用transformer捕获序列中的时序关系。
  • 第二部分构建连续时间的二部图(CTBG),通过 CTBG 将在每个节点周围学习的时间协作信息传播到周围的邻居。从而将序列模式和协作信息聚合起来。

2. 定义

CTBG:它是一个二部图,两部分节点分别为用户

U

和Item

I

,图可以表示为

\mathcal{B}=\{\mathcal{U},\mathcal{I},\mathcal{E_T}\}

,每条边

e\in \mathcal{E_T}

是一个元组

e=(u,i,t)

,表示用户u和item i 在时间t有交互。令

\mathcal{I_u(t)}

表示在时间戳t之前用户交互过的item的集合,

\mathcal{I} \verb|\|\mathcal{I_u(t)}

表示剩下的item。连续时间推荐问题定义为:推荐系统在时间t,给定用户集合、item集合以及CTBG,为用户从

\mathcal{I} \verb|\|\mathcal{I_u(t)}

集合中推荐itme。连续时间序列推荐:对于给定的未来时间戳t的集合,进行连续时间推荐。现存的方法很多是对序列中下一个item进行预估,而本文是对未来特定时间戳的item进行预估。如果时间戳设置为位置,那么就退化为现存的方法。

3. 方法

如图所示为模型的框架图,主要包含三部分:embedding layer、TCT layer、prediction layer。

3.1 Embedding Layer

3.1.1 Long-Term User/Item Embedding

这部分的embedding

e_i,e_u

通过RNN系列模型得到,后续经过信息传播之后可以得到时序embedding。

3.1.2 Continuous-Time Embedding

连续时间编码将标量的时间戳映射为向量

\Phi: T \mapsto \mathbb{R}^{d_{T}}

,其中

T\in \mathbb{R}^+

时间跨度在表达时序效应揭示序列模式方面起着至关重要的作用。时间编码函数将时间戳嵌入向量中,以便将时间跨度表示为相应编码时间嵌入的点积。因此,将时序效应定义为连续时间空间中时间跨度的函数:对于同一个用户u给定两个元组(u,i,t1), (u,j,t2),时序效应可以定义如下,以此计算两个时间之间的相关性。

\psi\left(t_{1}-t_{2}\right)=\mathcal{K}\left(t_{1}, t_{2}\right)=\Phi\left(t_{1}\right) \cdot \Phi\left(t_{2}\right)

为了使其可以扩展到未见过的数据上,将编码器建模为下式,其中

\omega=\left[\omega_{1}, \ldots, \omega_{T}\right]^{\top}

表示可学习参数,

d_T

表示维度。采用这种方式建模的原理详见论文4.1。

\Phi(t) \mapsto \sqrt{\frac{1}{d_{T}}}\left[\cos \left(\omega_{1} t\right), \sin \left(\omega_{1} t\right), \ldots, \cos \left(\omega_{d_{T}} t\right), \sin \left(\omega_{d_{T}} t\right)\right]^{\top}

3.2 TCT

Temporal Collaborative Transformer 后面简称为TCT模块。TCT具有2个优势:

  • 通过从用户或item的embedding和时序embedding中构建信息,显式的表明相关性的时序效应。
  • 协作注意力模块对自注意力机制进行改进,对用户-item交互的重要性进行建模,识别协作信号。

3.2.1 时序信息构建

通过将上述的long-term embedding和时间embedding结合构建每一层TCT的输入信息。第

l

层时间t时的用户输入信息为下式,将两类embedding拼接,其中e表示时序embedding,φ表示时间embedding。

\boldsymbol{h}_{u}^{(l-1)}(t)=\boldsymbol{e}_{u}^{(l-1)}(t) \| \Phi(t)

对于item的信息,首先对于时间t之间,用户u交互过的item进行采样,得到S个样本

\mathcal{N}_{u}(t)=\left\{\left(i, t_{s}\right) \mid\left(u, i, t_{s}\right) \in \mathcal{E_t} \space and \space t_s < t \right\}

,这些样本相当于是用户u的邻居。计算方式和user的信息计算方式类似:

\boldsymbol{h}_{i}^{(l-1)}\left(t_{s}\right)=\boldsymbol{e}_{i}^{(l-1)}\left(t_{s}\right) \| \Phi\left(t_{s}\right)

对于初始输入的时序embedding就是user和item的long-term embedding。

3.2.2 信息传播

通过线性方式将上述信息整合为时序embedding,公式如下,其中

\pi

函数是通过时序协作注意力机制计算历史交互对用户u在t时刻预测的重要性,w为可学习参数。

\boldsymbol{e}_{\mathcal{N}_{u}}^{(l)}(t)=\sum_{\left(i, t_{s}\right) \in N_{u}(t)} \pi_{t}^{u}\left(i, t_{s}\right) \boldsymbol{W}_{v}^{(l)} \boldsymbol{h}_{i}^{(l-1)}\left(t_{s}\right)

3.2.3 时序协作注意力机制

这部分就是计算上述的

\pi

权重,计算公式如下,其中w为可学习参数,这里就是传统的注意力机制,可以发现通过线性变换后计算历史交互item和当前时间t的用户的信息之间的相关性,从而计算权重。

\pi_{t}^{u}\left(i, t_{s}\right)=\frac{1}{\sqrt{d+d_{T}}}\left(\boldsymbol{W}_{k}^{(l)} \boldsymbol{h}_{i}^{(l-1)}\left(t_{s}\right)\right)^{\top} \boldsymbol{W}_{q}^{(l)} \boldsymbol{h}_{u}^{(l-1)}(t)
\pi_{t}^{u}\left(i, t_{s}\right)=\frac{\exp \left(\pi_{t}^{u}\left(i, t_{s}\right)\right)}{\sum_{\left(i^{\prime}, t_{s}^{\prime}\right) \in N_{u}(t)} \exp \left(\pi_{t}^{u}\left(i^{\prime}, t_{s}^{\prime}\right)\right)}

考虑到上述的信息h是用协作信号和时序效应拼接而成的,因此上式中的点积可以改写为下式,而通过多层的TCT可以将协作信号和时序效应仅仅的耦合在一起。

\boldsymbol{e}_{u}^{(l-1)}(t) \cdot \boldsymbol{e}_{i}^{(l-1)}\left(t_{s}\right)+\Phi(t) \cdot \Phi\left(t_{s}\right)

3.2.4 信息聚合

通过FFN将邻居的历史时序embedding和用户的信息聚合到一起,如下式,FFN为两层全连接层和ReLU激活函数,输出值可以作为一下层的输入也可以作为最终的输出。

\boldsymbol{e}_{u}^{(l)}(t)=\operatorname{FFN}\left(\boldsymbol{e}_{\mathcal{N}_{u}}^{(l)}(t) \| \boldsymbol{h}_{u}^{(l-1)}(t)\right)

上述过程是针对获取用户的时序embedding的过程,将最开始的query换成item的long-term embedding可以获得item对应的embedding。

3.3 预测

得到user和item的embedding

e_{u}^{(l)},e_{i}^{(l)}

后,计算相似度,如下式:

r(u, i, t)=\boldsymbol{e}_{u}^{(L)}(t) \cdot \boldsymbol{e}_{i}^{(L)}(t)

损失函数可以采用BPR损失函数或交叉熵损失函数。

4. 实验

可以发现效果还是比较明显的。

5. 总结

本文所做的主要工作在于将用户行为序列中的序列信息和协作信号进行聚合,从而更全面的考虑序列行为中的信息,例子在背景中介绍了。这两部分通俗解释(个人理解):将历史行为序列中的时序信息和item之间的序列关系进行建模。CTBG是用户和被点击item之间构成的二部图,通过TCT进行信息传播和注意力机制的信息聚合,从而将两类信息进行加权聚合。一方面通过信息时间效应的embedding和时序embedding拼接后,经过多层TCT后,将这些信息融合在一起,从而获得时序embedding;另一方面,通过信息传播,将邻居节点和当前节点进行信息融合,这部分相当于将序列信息和时序信息进行了融合,因为邻居节点就是在位置上在当前节点前后被点击的item。