《Graph Contextualized Self-Attention Network for Session-based Recommendation》
推荐系统在帮助用户缓解信息过载问题、并在许多应用领域(如电商、音乐、社交媒体)中选择有趣的内容方面发挥着重要作用。大多数现有的推荐系统都是基于用户历史交互。然而,在许多应用场景中,user id
可能是未知的。为了解决这个问题,人们提出了 session-based
推荐,从而根据用户在当前 session
中的 previous behaviors
序列来预测用户可能采取的 next action
(如点击一个 item
)。
由于 session-based
推荐的高度的实际价值,人们提出了多种 session-based
的推荐方法。
马尔科夫链(Markov Chain: MC
)是一个经典的例子,它假设 next action
是基于前一个 action
。在如此强的假设下,历史交互的独立结合(independent combination
) 可能会限制推荐的准确性。
最近的研究强调了在 session-based
推荐系统中使用 recurrent neural network: RNN
,并且取得了有前景的成果。例如:
《Session-based recommendations with recurrent neural networks》
提出使用 GRU
(RNN
的一种变体)来建模短期偏好。它的改进版本 《Improved recurrent neural networks for session-based recommendations》
进一步提高了推荐性能。
最近,NARM
旨在通过采用全局 RNN
和局部 RNN
同时捕获用户的序列模式(sequential pattern
)和主要意图(main purpose
)。
然而,现有方法通常对 consecutive items
之间的单向转移(transition
)进行建模,而忽略了整个 session
序列之间的复杂转移。
最近,一种新的序列模型 Transformer
在各种翻译任务中实现了 SOTA
的性能和效率。Transformer
没有使用递归或卷积,而是利用由堆叠的self-attention
网络所组成的 encoder-decoder
架构来描绘 input
和 output
之间的全局依赖关系。 self-attention
作为一种特殊的注意力机制,已被广泛用于建模序列数据,并在许多应用中取得了显著成果,如机器翻译、情感分析、序列推荐。Transformer
模型的成功可以归因于它的 self-attention
网络,该网络通过加权平均操作充分考虑了所有信号。尽管取得了成功,但是这种操作分散了注意力的分布,导致缺乏对相邻 item
的局部依赖性(local dependency
),并限制了模型学习 item
的 contextualized representation
的能力。而相邻 item
的局部上下文信息(local contextual information
)已被证明可以增强建模 neural representations
之间依赖关系的能力,尤其是对于注意力模型。
self-attention
的注意力分布是作用在全局的,因此相对而言会忽略相邻item
的重要性。即,对self-attention
而言,通常难以学到一个相邻item
的重要性为1.0
、其它item
的重要性全零的注意力分布。
在论文 《Graph Contextualized Self-Attention Network for Session-based Recommendation》
中,作者提出通过 graph neural network: GNN
来增强 self-attention
网络。
一方面,self-attention
的优势在于通过显式关注所有位置来捕获长期依赖关系(long-range dependency
)。
另一方面,GNN
能够通过编码边属性或节点属性来提供丰富的局部上下文信息。
具体而言,论文引入了一个叫做 GC-SAN
的 graph contextual self-attention network
用于 session-based
的推荐。该网络得益于 GNN
和 self-attention
的互补的优势。
首先,GC-SAN
从所有历史的 session
序列构建有向图(每个 session
构建一个 session graph
)。基于 session graph
,GC-SAN
能够捕获相邻 item
的转移 ,并相应地为图中涉及到的所有节点生成 latent vector
。
然后,GC-SAN
应用 self-attention
机制来建模远程依赖关系,其中 session embedding vector
由图中所有节点的 latent vector
生成。
最后,GC-SAN
使用用户在该 session
的全局兴趣和该用户的局部兴趣的加权和作为 embedding vector
,从而预测该用户点击 next item
的概率。
GC-SAN
和SR-GNN
非常类似,主要差异在于:GC-SAN
采用attention
机制来建模远程依赖关系,而GC-SAN
采用self-attention
机制。除此之外,其它部分几乎完全相同。
这项工作的主要贡献总结如下:
为了改进 session
序列的 representation
,论文提出了一种新的、基于 graph neural network: GNN
的 graph contextual self-attention ntwork: GC-SAN
。GC-SAN
利用 self-attention
网络和 GNN
的互补优势来提高推荐性能。
GNN
用于建模 separated
的 session
序列的局部图结构依赖关系,而多层 self-attention
网络旨在获得 contextualized non-local representation
。
论文在两个 benchmark
数据集上进行了广泛的实验。通过综合的分析,实验结果表明:与 SOTA
方法相比,GC-SAN
的有效性和优越性。
相关工作:session-based
推荐是基于隐式反馈的推荐系统的典型应用,其中 user id
是未知的,没有显式的偏好(如评分)而只仅提供 positive observation
(如购买或点击)。这些 positive observation
通常是通过在一段时间内被动跟踪用户记录而获得的序列形式的数据。在这种情况下,经典的协同过滤方法(如矩阵分解)会失效,因为无法从匿名的历史交互中构建 user profile
(即用户的所有历史交互)。
这个问题的一个自然解决方案是 item-to-item
推荐方法。在 session-based
的 setting
中,可以从可用的 session
数据中,使用简单的 item co-occurrence pattern
预计算 pre-computed
一个 item-to-item
相似度矩阵。
《Item-based collaborative filtering recommendation algorithms》
分析了不同的 item-based
推荐技术,并将其结果与基础的 k-nearest neighbor
方法进行了比较。
此外,为了建模两个相邻 action
之间的序列关系,《Factorizing personalized markov chains for next-basket recommendation》
提出了将矩阵分解和马尔科夫链(Markov Chain: MC
)的力量结合起来进行 next-basket
推荐。
尽管这些方法被证明是有效的且被广泛使用,但是它们仅考虑了 session
的 most recent click
,而忽略了整个点击序列的全局信息。
最近,针对 session-based
推荐系统,研究人员转向神经网络和 attention-based
模型。例如:《Session-based recommendations with recurrent neural networks》
最早探索 Gated Recurrent Unit: GRU
( RNN
的一种特殊形式)用于预测 session
中的 next action
,《Improved recurrent neural networks for session-based recommendations》
后续提出了改进版本从而进一步提高推荐性能。
如今,人们已经提出Graph Neural Network: GNN
以 RNN
的形式来学习图结构化的数据的 representation
,并广泛应用于不同的任务,如图像分类、脚本事件(script event
)预测、推荐系统(《Session-based recommendation with graph neural networks》
)。
另一方面,人们已经在各种应用(如,自然语言处理 natural language processing: NLP
和计算机视觉 computer vision: CV
)中引入了几种 attention-based
机制。标准的普通的注意力机制已经被纳入推荐系统(NARM
、STAMP
)。最近,《Attention is all you need》
提出了完全基于 self-attention
来建模单词之间的依赖关系,无需任何递归或卷积,并且在机器翻译任务上取得了 SOTA
的性能。基于简单的和并行化的 self-attention
机制,SASRec
提出了一种基于 self-attention
的序列模型,其性能优于 MC/CNN/RNN-based
的序列推荐方法。《Csan: Contextual self-attention network for user sequential recommendation》
提出了一个在 feature level
的、 统一的 contextual self-attention network
,从而捕获异质用户行为的多义性(polysemy
),从而进行序列推荐。
大多数现有的序列推荐模型都用 self-attention
机制来捕获序列中的远距离 item-item transition
,并且取得了 SOTA
性能。然而,在相邻 item
之间建立复杂的上下文信息仍然具有挑战性。在本文中,我们通过 GNN
来增强 self-attention network
,同时保持模型的简单性和灵活性。据我们所知,这是对 session-based
推荐的 self-attention network
和 GNN
的首次尝试,其中:self-attention network
可以建模 session
的全局 item-item
信息,GNN
可以通过对构建的图的属性特征进行编码从而学习局部上下文信息。
这里我们介绍了基于 GNN
的 contextualized self-attention
推荐模型 GC-SAN
。我们首先公式化 session-based
推荐问题,然后详细描述我们模型的架构(如下图所示)。
GC-SAN
结合了GNN
和SASRec
,只是将SASRec
的embedding layer
替换为GNN
生成的embedding
。相比之下,
SR-GNN
和GC-SAN
都使用了GNN
,二者区别在于SR-GNN
使用了last click item embedding
作为query
的attention
,而GC-SAN
使用了self-attention
。
session-based
推荐旨在仅基于用户当前的交互序列来预测用户接下来想点击哪个 item
。这里我们给出 session-based
推荐问题的公式如下。
令 session
中涉及的所有 unique item
的集合。对于每个匿名 session
,用户点击 action
的序列记做 time step
item
。正式地,给定action
序列在时刻 prefix
item
的排序列表(ranking list
)。item
的输出概率,其中 item
top-N
个 item
进行推荐。
图构建:GNN
的第一部分是从所有 session
中构建一个有意义的图。给定一个 session
item
session
item
session
序列都可以建模为有向图。
可以通过促进不同节点之间的通信来更新图结构。具体而言,令 session graph
中的入边incoming edge
加权链接、出边outgoing edge
加权链接。例如,考虑一个 session
graph
和矩阵(即 session
序列中可能会重复出现多个 item
,因此我们为每条边分配归一化权重,其计算方法为:边的出现次数除以该边的起始节点的 out-degree
。
注意,我们的模型可以支持各种构建 session graph
的策略,并生成相应的链接矩阵(connection matrix
)。然后我们可以将两个加权的链接矩阵与图神经网络一起应用来捕获 session
序列的局部信息。
节点向量更新:接下来我们介绍如何通过 GNN
获得节点的潜在特征向量(latent feature vector
)。我们首先将每个 item
item
graph session
中时刻
其中:
的物理意义为:首先将节点 embedding
经过投影,然后基于边的权重(由 定义)进行聚合。
然后我们将 previous state
GNN
的输入。因此,GNN layer
的 final output
其中:
sigmoid
函数,
事实上这里是单层
GNN
的更新公式。在SR-GNN
中给出了多层GNN
的更新公式。在SR-GNN
中,GNN
不断迭代直到达到不动点。
self-attention
是注意力机制的一个特例,并已成功应用于许多研究主题,包括 NLP
和 QA
。self-attention
机制可以抽取 input
和 output
之间的全局依赖关系,并捕获整个 input
序列和 output
序列本身的 item-item
转移,而不考虑它们的距离。
Self-Attention Layer
:将 session
序列输入 GNN
之后,我们可以得到 session graph
中所有节点的潜在向量,即:self-attention layer
从而更好地捕获全局 session
偏好:
其中:
因为
attention
矩阵是,而 ,因此这里 softmax
位于右侧。
Point-Wise Feed-Forward Network
:之后,我们应用两个带 ReLU
激活函数的线性变换来赋予模型非线性,并考虑不同潜在维度之间的交互。然而,在 self-attention
操作中可能会发生 transmission loss
。因此,我们在前馈网络之后添加了一个残差连接,这使得模型更容易利用 low-layer
的信息。
其中:
此外,为了缓解深度神经网络中的过拟合问题,我们在训练期间应用了 Dropout
正则化技术。为简单起见,我们将上述整个 self-attention
机制定义为:
多层 self-attention
:最近的工作表明,不同的层捕获不同类型的特征。在这项工作中,我们研究了哪些 level
的层从特征建模中受益最多,从而学习更复杂的 item transition
。
第一层定义为:self-attention layer
(
其中:multi-layer self-attention network
的 final output
。
在若干个自适应地提取 session
序列信息的 self-attention block
之后,我们实现了 long-term
的 self-attentive representation
next click
,我们将 session
的长期偏好和当前兴趣结合起来,然后使用这种组合的 embedding
作为 session representation
。
对于 session
SASRec
,我们将 embedding
作为 global embedding
。local embedding
可以简单地定义为 last clicked-item
的 embedding
向量,即 final session embedding
:
其中: embedding
,
SR-GNN
使用的是投影矩阵来投影:。理论上讲,用投影矩阵的方式更灵活,模型容量更大。当 退化为 时,就等价于线性加权。
最后,在给定 session embedding
item
next click
的概率为:
其中:item
session
next click
的概率。
注意:
是 GNN
的output
,即它和都是相同类型的 embedding
。
然后我们通过最小化以下目标函数来训练我们的模型:
其中:ground truth item
的 one-hot encoding
向量,
我们进行实验来回答以下问题:
RQ1
:所提出的推荐模型 GC-SAN
是否实现了 SOTA
的性能?
RQ2
:关键的超参数(如权重因子、embedding size
)如何影响模型性能?
数据集:
Diginetica
:来自于 CIKM Cup 2016
,这里仅使用交易数据。
Retailrocket
:来自一家个性化电商公司,其中包含六个月的用户浏览记录。
对于这两个数据集,为了过滤噪音,我们过滤掉出现频次少于 5
次的 item
,然后删除 item
数量少于 2
的所有 session
。此外,对于 session-based
的推荐,我们最后一周的 session
数据设为测试集,剩余数据作为训练集。
类似于 《Improved recurrent neural networks for session-based recommendations》
和 《A simple convolutional generative network for next item recommendation》
,对于 session
序列 input
和相应的 label
为:
预处理之后,数据集的统计数据如下表所示:
评估指标:为了评估所有模型的推荐性能,我们采用三个常见指标,即 Hit Rate
(HR@N
)、Mean Reciprocal Rank
(MRR@N
)、Normalized Discounted Cumulative Gain
(NDCG@N
)。HR@N
是对 unranked
的检索结果进行评估,MRR@N
和 NDCG@N
是对 ranked list
进行评估。这里我们考虑 top N
推荐,
baseline
方法:
Pop
:一个简单的 baseline
,它根据训练数据中的流行度来推荐排名靠前的 item
。
BPR-MF
:SOTA
的 non-sequential
的推荐方法,它使用一个 pairwise ranking loss
来优化矩阵分解。
IKNN
:一种传统的 item-to-item
模型,它根据余弦相似度来推荐与候选 item
相似的 item
。
item
向量的生成参考SR-GNN
的baseline
介绍部分。
FPMC
:一个用于 next-basket
推荐的经典的混合模型,结合了矩阵分解和一阶马尔科夫链。注意,在我们的推荐问题中,每个 basket
就是一个 session
。
作者描述有误,应该是每个
basket
就是一个item
。
GRU4Rec
:一种 RNN-based
的深度学习模型,用于 session-based
推荐。它利用 session-parallel
的 mini-batch
训练过程来建模用户行为序列。
STAMP
:一种新颖的 short-term memory priority
模型,用于从 previous
点击中捕获用户的长期偏好、以及从 session
中的 last click
来捕获当前兴趣。
SR-GNN
:最近提出的 session-based
的 GNN
推荐模型。它使用 GNN
生成 item
的潜在向量,然后通过传统的 attention network
来表达每个 session
。
性能比较(RQ1
):为了展示我们的模型 GC-SAN
的推荐性能,我们将其与其它 SOTA
方法进行比较。实验结果如下所示:
非个性化的、基于流行度的方法(即,Pop
)在两个数据集上的效果最差。通过独立地处理每个用户(即,个性化)并使用 pairwise ranking loss
,BPR-MF
比 Pop
表现更好。这表明个性化在推荐任务中的重要性。
IKNN
和 FPMC
在 Diginetica
数据集上的性能优于 BPR-MF
,而在 Retailrocket
数据集上的性能差于 BPR-MF
。实际上,IKNN
利用了 session
中 item
之间的相似性,而 FPMC
基于一阶马尔科夫链。
所有神经网络方法,如 GRU4Rec
和 STAMP
,几乎在所有情况下都优于传统的 baseline
(如:FPMC
和 IKNN
),这验证了深度学习技术在该领域的实力。
GRU4Rec
利用 GRU
来捕获用户的通用偏好(general preference
),而 STAMP
通过 last clicked item
来改善短期记忆。不出所料,STAMP
的表现优于 GRU4Rec
,这表明短期行为对于预测 next item
问题的有效性。
另一方面,通过将每个 session
建模为图并应用 GNN
和注意力机制,SR-GNN
在两个数据集上都优于所有其它 baseline
。这进一步证明了神经网络在推荐系统中的强大能力。
与 SR-GNN
相比,我们的方法 GC-SAN
采用 self-attention
机制自适应地为 previous item
分配权重,而无论它们在当前 session
中的距离如何,并捕获 session
中 item
之间的长期依赖关系。我们以线性方式将long-range self-attention representation
和 short-term interest of the last-click
相结合,从而生成 final session representation
。正如我们所看到的,我们的方法在 HR, MRR, NDCG
指标在所有数据集上超越了所有 baseline
。这些结果证明了 GCSAN
对 session-based
推荐的有效性。
模型分析(RQ2
):这里我们深入分析研究 GC-SAN
,旨在进一步了解模型。限于篇幅,这里我们仅展示 HR@10
和 NDCG@10
的分析结果。我们在其它指标上也获得了类似的实验结果:
GNN
的影响:虽然我们可以从上表中隐式地推断出 GNN
的有效性,但是我们想验证 GNN
在 GC-SAN
中的贡献。我们从 GC-SAN
中移除 GNN
模块,将其替代为随机初始化的 item embedding
,并馈入 self-attention layer
。
下表展示了使用 GNN
和不使用 GNN
之间的效果。可以发现:即使没有 GNN
,GC-SAN
在 Retailrocket
数据集上仍然可以超越 STAMP
,而在 Diginetica
数据集上被 GRU4Rec
击败。
事实上,Retailrocket
数据集的最大 session
长度几乎是 Diginetica
数据集的四倍。一个可能的原因是:短序列长度可以构建更稠密的 session graph
,提供更丰富的上下文信息,而 self-attention
机制在长序列长度下表现更好。这进一步证明了 self-attention
机制和 GNN
在提高推荐性能方面发挥着重要作用。
GNN
在短序列的session-based
推荐中的作用更大(相比长序列的session-based
推荐)。
权重因子 self-attention representation
和 last-clicked action
之间的贡献,如下图 (a)
。可以看到:
仅将全局 self-attention
作为 final session embedding
(即,
0.4 ~ 0.8
之间的效果更好。
这表明:虽然带 GNN
的 self-attention
机制可以自适应地分配权重从而关注长期依赖关系、或更近期的行为,但是短期兴趣对于提高推荐性能也是必不可少的。
这个权重可以通过数据来自适应地学到。
self-attention block
数量 level
的 self-attention layer
从 GC-SAN
中受益最多。下图 (b)
展示了应用不同数量的 self-attention block
的效果,其中 1 ~ 6
。在这两个数据集上,我们可以观察到增加 GCSAN
的性能。
然而,当 block
( GC-SAN
更容易丢失 low-layer
的信息。
embedding size
emebdding size
10 ~ 120
。
在所有 baseline
中,STAMP
和 SR-GNN
表现良好且稳定。因此,为了便于比较,我们使用 STAMP
和 SR-GNN
作为两个 baseline
。从图中可以观察到:
我们的模型 GC-SAN
在所有 STAMP
。
当 SR-GNN
的性能优于 GC-SAN
。一旦超过这个值,GC-SAN
的性能仍然会增长并且最终在 SR-GNN
的性能会略有下降。这可能是因为相对较小的 GC-SAN
捕获 item
潜在因子之间的复杂 transition
,而 SR-GNN
可能会因为较大的