关注我们,一起学习~
标题:CARCA: Context and Attribute-Aware Next-Item Recommendation via Cross-Attention
链接:https://arxiv.org/pdf/2204.06519.pdf
代码:https://github.com/ahmedrashed-ml/CARCA
会议:RecSys 2022
1. 导读
本文将用户的上下文信息和商品的属性结合起来考虑,提出上下文和属性感知推荐模型 (CARCA) ,该模型可以通过多头自注意力块将上下文特征和商品属性结合起来。现有的大部分序列推荐方法是采用序列中最近的商品表征和目标商品计算点击来计算评分,而CARCA利用交叉注意力记住计算所有序列商品和目标商品来预测他们的最终分数。利用交叉注意力,计算旧商品和最近商品之间的相关性以及它们对决定接下来推荐哪个项目的影响。
本文的创新点比较简单直接,采用类似Transformer的结构提取用户和交互序列的特征,并构建两个分支,将做分支的注意力机制提取的信息融入有分支,从而构建交叉注意力机制。
2. 问题定义
用户集合
\mathcal{U}=\{1,...,U\},商品集合
\mathcal{I}=\{1,...,I\},交互序列为
\mathcal{D}=((u_1,i_1),...,(u_N,i_N))\in (\mathcal{U} \times \mathcal{I}),目标是构建推荐模型
\hat{p}:\mathcal{U} \rightarrow (\mathbb{R}_0^+)^{\mathcal{I}}预估用户交互商品的概率,损失函数定义为下式,
\mathbb{E}_{(u, i) \sim p} \mathcal{L}(i, \hat{p}(u))这里再考虑商品属性可以表示为
A^{IT} \in \mathbb{R}^{I \times j},上下文信息中考虑交互的额外属性,表示为
\mathcal{D} = ((u_1,i_1,c_1), ...,(u_N,i_N,c_N)),常见的c可以是时间戳。则损失函数变为下式,
\mathbb{E}_{(u, i, c) \sim p} \mathcal{L}(i, \hat{p}(u,c))每个用户的交互序列可以表示为
P_t^{u}=\{i_1^P,...,i_{|P_t^u|}^P\},对应的属性为
A_t^u \in \mathbb{R}^{|P_t^u|\times j},交互的上下文特征为
C_t^u\in \mathbb{R}^{|P_t^u| \times l},系统的目标就是预测推荐的商品列表
\{i_1^O,...,i_{|O_{t+1}|^u}^O\}。
3. 方法
为了捕捉不断变化的用户行为
P_t^u,CARCA 模型利用了两个类似的基于多头自注意力的分支。左分支是一系列自注意力块,用于提取上下文信息和商品特征。右分支由一个多头交叉注意力块组成,该块捕获左分支的特征对目标商品
O_{t+1}^u的影响,同时考虑目标商品的属性和上下文特征。第二个分支还负责为
O_{t+1}^u中的每个目标商品生成排名分数。细节如图所示,
3.1 Embedding层
Embedding层提取初始商品的潜在特征,将one-hot转为稠密embedding送到自注意力块。使用了两个独立的embedding函数
\phi和
\psi。第一个函数
\phi用于提取商品的潜在特征
z_i \in \mathbb{R}^d,
i \in P_{t}^u \cup O_{t+1}^u。第二个函数
\psi 从上下文特征c和商品属性a中提取潜在特征
q_i \in \mathbb{R}^g。将它们拼接作为输入,公式如下,
\begin{array}{l}
z_i=\phi(x_i)=x_iW^{\phi}+b^{\phi}\\
q_{i}=\psi\left(a_{i}, c_{i}\right)=\operatorname{concat}_{c o l}\left(a_{i}, c_{i}\right) W^{\psi}+b^{\psi}, W^{\psi} \in \mathbb{R}^{(j+l) \times g}, b^{\psi} \in \mathbb{R}^{g}\\
e_{i}=\omega\left(z_{i}, q_{i}\right)=\text { concat }_{c o l}\left(z_{i}, q_{i}\right) W^{\omega}+b^{\omega}, W^{\omega} \in \mathbb{R}^{(g+d) \times d}, b^{\omega} \in \mathbb{R}^{d}
\end{array}3.2 自注意力块
用户画像中的用户交互序列embedding为
E^P=\{e_1^P,...,e_{|P_t^u|}^P\},目标商品embedding为
E^O=\{e_1^O,...,e_{|O_{t+1}|}^O\}。
3.2.1 用户画像级别的自注意力
为了提取用户画像级的特征,将
E^P输入到一系列多头自注意力块中。首先是输入到自注意力块的第一部分,公式如下,
\operatorname{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V})=\operatorname{softmax}\left(\frac{\mathbf{Q K ^ { T }}}{\sqrt{\frac{d}{H}}}\right) \mathbf{V}
\begin{aligned}
S^{P} &=\mathrm{SA}\left(\mathbf{E}^{P}\right) \\
&=\text { concat }_{c o l}\left(\operatorname{Attention}\left(\mathbf{E}^{P} \mathbf{W}_{h}^{Q}, \mathbf{E}^{P} \mathbf{W}_{h}^{K}, \mathbf{E}^{P} \mathbf{W}_{h}^{V}\right)\right)_{h=1: H}
\end{aligned}下一步是将自注意力层的输出送到第二部分,逐点的两层前馈网络,类似Transformer,公式如下,
\begin{aligned}
F^{P} &=\operatorname{FFN}\left(S^{P}\right) \\
&=\text { concat }_{\text {row }}\left(\text { Leaky_ReLU }^{2}\left(S_{r}^{P} W^{(1)}+b^{(1)}\right) W^{(2)}+b^{(2)}\right)_{r=1:\left|P_{t}^{u}\right|}
\end{aligned}最后,为了捕捉更具表现力的特征,堆叠一系列自注意力块,其中第b(𝑏 > 1) 块定义如下:
\begin{array}{l}
S^{P,(b)}=\operatorname{SA}\left(\mathbf{F}^{P,(b-1)}\right) \\
F^{P,(b)}=\operatorname{FFN}\left(S^{P,(b)}\right)
\end{array}类似Transformer,利用残差连接、层归一化和dropout以缓解过度拟合和不稳定的问题。一个细微的区别是我们使用了乘法残差连接而不是加法连接,因为它们提供了更好的性能,并且与 ResNet 模型相比,CARCA 的架构相对不是很深。省略了位置编码,因为该信息已经明确存在于上下文特征中,例如交互的时间戳。
3.2.2 交叉注意力层
利用多头交叉注意力块来预测目标商品的似然分数。捕获所有用户画像级特征
F^{P,(b)}和目标商品的交互,而不是仅使用
F^{P,(b)}和目标商品初始embedding
E^O。
计算目标商品集商品的分数
\hat{Y}^O \in \mathbb{R}^{|O^{u}_{t+1}|},将它们的embedding作为查询 (query) 输入提供给多头交叉注意力块,同时使用来自左分支最后一个自注意块的归一化特征
F^{P, (b)}作为键 (key) 和值 (value)。
\begin{aligned}
S^{O} &=\mathrm{CA}\left(\mathbf{E}^{O}, \mathbf{F}^{P,(b)}\right) \\
&=\operatorname{concat}_{\text {col }}\left(\operatorname{Attention}\left(\mathbf{E}^{O} \mathbf{W}_{h}^{Q}, \mathbf{F}^{P,(b)} \mathbf{W}_{h}^{K}, \mathbf{F}^{P,(b)} \mathbf{W}_{h}^{V}\right)\right)_{h=1: H}
\end{aligned}\hat{Y}^{O}=\mathrm{FFN}-\mathrm{Out}\left(S^{O}\right)=\operatorname{concat}_{r o w}\left(\sigma\left(S_{r}^{O} W^{O}+b^{O}\right)\right)_{r=1:\left|O_{t+1}^{u}\right|}
3.3 优化
损失函数采用交叉熵损失函数,公式如下,
\mathcal{L}=-\sum_{u \in U} \sum_{r \in O^{u(+)} \cup O^{u(-)}}\left(Y_{r}^{O} \log \left(\hat{Y}_{r}^{O}\right)+\left(1-Y_{r}^{O}\right) \log \left(1-\hat{Y}_{r}^{O}\right)\right)
4. 结果