数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
十二、SASRec [2018]
序列推荐系统的目标是将用户行为的个性化模型
personalized model
(基于历史活动)与基于用户最近行为的context
概念相结合。从序列动态sequential dynamic
中捕获有用的模式pattern
具有挑战性,主要是因为输入空间的维度随着作为context
的历史行为的数量呈指数增长。因此,序列推荐的研究主要关注如何简洁地捕获这些高阶动态high-order dynamic
。马尔科夫链
Markov Chains: MC
是一个典型的例子,它假设next action
仅依赖于前一个(或者前几个)行为,并已成功用于刻画短程short-range
的item
转移transition
从而用于推荐。另一项工作使用循环神经网络RNN
通过隐状态summarize
所有先前的行为,从而用于预测next action
。这两种方法虽然在特定情况下很强大,但是在某种程度上仅限于某些类型的数据。MC-based
方法通过作出强有力的简化假设,在高度稀疏的setting
中表现良好,但可能无法捕获更复杂场景的复杂动态intricate dynamic
。- 相反,
RNN
虽然具有表达能力,但是需要大量数据(特别是稠密数据)才能超越更简单的baseline
。
最近,一种新的序列模型
Transfomer
在机器翻译任务中实现了state-of-the-art
的性能和效率。与现有的使用卷积模块或循环模块的序列模型不同,Transformer
完全基于一种叫做self-attention
的注意力机制,该机制非常高效并且能够揭示句子中单词之间的句法模式syntactic pattern
和语义模式semantic pattern
。受到这种方法的启发,论文
《Self-Attentive Sequential Recommendation》
寻求将自self-attention
机制应用于序列推荐问题。论文希望这个想法可以解决上述两个问题:一方面能够从过去的所有行为中提取上下文(类似于RNN
),但另一方面能够仅根据少量行为来构建预测(类似于MC
)。具体而言,论文构建了一个Self-Attention based Sequential Recommendation: SASRec
模型, 该模型在每个time step
自适应地为先前的item
分配权重(如下图所示)。所提出的模型在几个
benchmark
数据集上显著优于state-of-the-art
的、MC/CNN/RNN-based
的序列推荐方法。具体而言,论文将模型性能作为数据集稀疏性的函数来进行检查,其中模型性能与前面描述的pattern
密切相关。由于self-attention
机制,SASRec
倾向于在稠密数据集上考虑长期依赖,而在稀疏数据集上关注最近的行为。而这被证明对于自适应地处理不同密度density
的数据集至关重要。此外,
SASRec
的核心组件(即self-attention block
)适用于并行加速,从而使得模型比CNN/RNN-based
的替代方案快一个数量级。此外,论文分析了SASRec
的复杂性和可扩展性,进行了全面的消融研究以展示关键组件的效果,并将注意力权重可视化从而定性地揭示模型的行为。相关工作:有一些工作与我们密切相关。在讨论序列推荐之前,我们首先讨论通用推荐
general recommendation
,然后是时间推荐temporal recommendation
。最后我们介绍了注意力机制,尤其是我们模型核心的self-attention
模块。通用推荐
General Recommendation
:推荐系统专注于根据历史反馈(如点击、购买、喜欢)来建模用户对
item
的偏好。用户反馈可以是显式的(如评分)或隐式的(如点击、购买、评论)。由于解释non-observed
数据的模糊性ambiguity
,建模隐式反馈可能具有挑战。为了解决这个问题,
《Collaborative filtering for implicit feedback datasets》
提出了point-wise
方法、《BPR: bayesian personalized ranking from implicit feedback》
提出了pairwise
方法来解决这些挑战。Matrix Factorization: MF
方法试图发现潜在维度来表示用户的偏好和item
的属性,并通过user embedding
和item embedding
之间的内积来估计交互。此外,另一个方向的工作基于
Item Similarity Models: ISM
,并没有显式地使用潜在因子建模每个用户(如FISM
)。他们学习一个item-to-item
的相似度矩阵,然后用户对item
的偏好是通过该item
与该用户历史交互item
之间的相似性来衡量。最近,由于深度学习在相关问题上的成功,深度学习技术已被引入推荐领域。一个方向的工作旨在使用神经网络来抽取
item
特征(如图像特征、文本特征等等)从而进行content-aware
推荐。另一个方向的工作旨在取代传统的
MF
。例如NeuMF
通过多层感知机来估计用户偏好,而AutoRec
使用自编码器来预测评分。
时间推荐
Temporal Recommendation
:追溯到Netflix Prize
时代,时间推荐通过显式建模用户活动的时间戳,从而在各种任务上显示出强大的性能。TimeSVD++
通过将时间分成若干区间segment
,并在每个区间中分别对用户和item
进行建模,从而取得了很好的效果。 此类模型对于理解那些表现出显著时间漂移temporal drift
的数据集(例如,过去10
年电影偏好如何变化、用户在下午4
点访问什么样的企业)至关重要。序列推荐(或
next-item
推荐)与此不同,因为序列推荐仅考虑操作的顺序,并且建模与时间无关的顺序模式sequential pattern
。本质上,序列模型试图根据用户最近的活动建模用户行为的context
,而不是考虑temporal pattern
本身。序列推荐
Sequential Recommendation
:许多序列推荐系统试图建模item-item
转移矩阵,并将其作为捕获连续item
之间的序列模式的一种手段。例如,FPMC
融合了一个MF
项、以及一个item-item
项从而分别捕获长期偏好和短期转移。本质上,被捕获的短期转移是一阶马尔科夫链Markov Chain: MC
,而高阶马尔科夫链假设next action
与之前的几个行为有关。由于最近一个访问的item
通常是影响用户next action
的最关键因素(本质上是提供context
),因此基于一阶马尔科夫链的方法表现出强大的性能,尤其是在稀疏数据集上。还有一些方法采用考虑更多先前
item
的高阶马尔科夫链。具体而言,Convolutional Sequence Embedding: Caser
是一种CNN-based
方法,将 $ L $ 个先前item
的embedding
矩阵视为image
,并运用卷积运算来抽取转移transition
。除了基于马尔科夫链的方法之外,另一个方向的工作采用
RNN
来建模用户序列。利用GRU4Rec
使用GRU
建模点击序列从而用于session-based
推荐,而《Recurrent neural networks with top-k gains for session-based recommendation》
改进了GRU4Rec
并进一步提高了Top-N
推荐的性能。在每个time step
,RNN
将last step
的状态和当前行为作为输入。尽管人们已经提出了诸如session parallelism
之类的技术来提高效率,但是step
之间的依赖关系使得RNN
的效率更低。注意力机制:注意力机制已被证明在各种任务中是有效的。本质上,这种机制背后的思想是:序列输出
sequential output
中的每个输出都依赖于某些输入的relevant
部分,而这些输入部分是模型应该持续关注的。 基于注意力的方法的额外好处是,方法更容易解释。最近,注意力机制已被引入推荐系统,例如Attentional Factorization Machine: AFM
学习每个特征交互对于content-aware
推荐的重要性。然而,上面使用的注意力技术本质上是原始模型的附加组件
additional component
,如attention+RNN
、attention+FM
等等。最近,一种纯粹基于注意力的sequence-to-sequence
,叫做Transfomer
,在之前RNN/CNN-based
方法主导的机器翻译任务上实现了state-of-the-art
的性能和效率。Transformer
模型在很大程度上依赖于所提出的self-attention
模块来捕获句子中的复杂结构,并检索relevant word
(在source language
)从而生成next word
(在target language
)。受
Transformer
的启发,我们试图建议一个基于self-attention
方法的、新的序列推荐模型,然而序列推荐问题与机器翻译问题有很大不同因此需要专门设计的模型。
12.1 模型
令用户集合为
$ \mathcal U $ ,item
集合为 $ \mathcal I $ ,用户 $ u $ 的行为序列为 $ \mathcal S^u=\left(S_1^u,S_2^u,\cdots,S_{|\mathcal S^u|}^u\right) $ 。在序列推荐的setting
下,给定用户 $ u $ 的行为序列 $ \mathcal S^u $ ,我们寻求预测next item
。在训练过程中,在time step
$ t $ ,模型根据前面的 $ t $ 个item
来预测next item
(即,第 $ t+1 $ 个item
)。如下图所示,可以方便地将模型的输入视为
$ \left(S_1^u,S_2^u,\cdots,S_{|\mathcal S^u|-1}^u\right) $ ,并将预期的输出视为相同序列的shifted
版本: $ \left(S_2^u,\cdots,S_{|\mathcal S^u|}^u\right) $ 。这里我们将描述如何通过一个embedding layer
、若干个self-attention block
、以及一个prediction layer
来构建序列推荐模型。我们还分析了它的复杂性,并进一步讨论了SASRec
与相关模型的不同之处。
12.1.1 Embedding Layer
我们将训练序列
$ \left(S_1^u,S_2^u,\cdots,S_{|\mathcal S^u|-1}^u\right) $ 转换为固定长度的序列 $ \mathbf s=(s_1,s_2,\cdots,s_n) $ ,其中 $ n $ 为模型能够处理的最大长度。如果训练序列长度超过
$ n $ ,那么我们选择最近的 $ n $ 个行为 。如果训练序列长度小于
$ n $ ,那么我们在序列左侧填充padding item
直到序列长度为 $ n $ 。注意,训练序列按照发生时间从远到近的顺序排列,因此
padding item
填充在左侧(代表最远时刻)。
对于每个
item
$ i $ 我们学习一个embedding
向量 $ \mathbf{\vec v}_i\in \mathbb R^d $ ,其中 $ d $ 为embedding
维度。所有item
的embedding
向量构成了embedding
矩阵 $ \mathbf V\in \mathbb R^{|\mathcal I|\times d} $ ,其中第 $ i $ 行表示item
$ i $ 的embedding
向量。对于序列
$ \mathbf s $ ,item
$ s_t $ 的embedding
向量 $ \mathbf{\vec v}_{s_t} $ 记做 $ \mathbf{\vec e}_t $ 表示序列中第 $ t $ 个postion
的item
的embedding
。序列 $ \mathbf s $ 的input embedding matrix
记做 $ \mathbf E\in \mathbb R^{n\times d} $ ,第 $ t $ 行表示position
$ t $ 的item
的embedding
,并且对于padding item
采用常数 $ \mathbf{\vec 0} $ 向量来表示。Positional Embedding
:我们将在后面章节看到,由于self-attention
模型不包含任何循环模块或卷积模块,因此它对于先前item
的position
是无感知的。因此,我们将一个可学习的position embedding
矩阵 $ \mathbf P\in \mathbb R^{n\times d} $ 注入到input embedding
中:其中:
$ \mathbf{\vec p}_t\in \mathbb R^d $ 为序列中第 $ t $ 个position
的position embedding
,它是 $ \mathbf P $ 的第 $ t $ 行。我们还尝试了
《Attention is all you need》
中使用的固定的position embedding
,单发现这在我们的case
中导致性能更差。我们在实验中定量和定性地分析了position embedding
的影响。
12.1.2 Self-Attention Block
《Attention is all you need》
中定义的scaled dot-product attention
为:其中:
$ \mathbf Q\in \mathbb R^{M\times d_k} $ $ \mathbf Q $ 为query
矩阵, $ \mathbf K\in \mathbb R^{M\times d_k} $ 为key
矩阵, $ \mathbf V\in \mathbb R^{M\times d_v} $ 为value
矩阵。 $ M $ 为item
数量(每一行代表一个item
), $ d_k $ 为query/key embedding
的维度, $ d_v $ 为value embedding
的维度,并且 $ d_v $ 可以与 $ d_k $ 相等也可以不等。直观而言,
attention layer
计算所有value
的加权和,其中query
$ i $ 和value
$ j $ 之间的权重与query
$ i $ 和key
$ j $ 之间的交互interaction
有关。比例因子 $ \sqrt d $ 是为了避免内积的值过大(尤其是在维度 $ d $ 较高的情况下),使得softmax
的计算出现数值不稳定从而影响效果。也可以用超参数
$ T $ 来代替 $ \sqrt d $ ,并根据验证集来调优超参数 $ T $ ,这样更灵活。Self-Attention layer
:在机器翻译等NLP
任务中,注意力机制通常采用 $ \mathbf K = \mathbf V $ 。最近,《Attention is all you need》
提出了一个self-attention
方法,它使用相同的对象作为query
、key
、以及value
。在我们的case
中,self-attention
操作将embedding
$ \widehat{\mathbf E} $ 作为输入,通过线性投影将它转换为三个矩阵,然后将投影后的矩阵输入到attention layer
:其中:
$ \mathbf W_Q,\mathbf W_K,\mathbf V_V\in \mathbb R^{d\times d} $ 为待学习的投影矩阵。 $ \mathbf H $ 为每个时刻的、经过self-attention
的representation
,第 $ t $ 行表示第 $ t $ 个输出的representation
(对应于time step
$ t $ )。
引入投影可以使得模型更加灵活。例如,模型可以学习非对称交互
asymmetric interaction
,即<query i, key j>
和<query j, key i>
可以有不同的交互。因果关系
Causality
:由于序列的性质,模型在预测第 $ (t+1) $ 个item
时,只能考虑开始的前 $ t $ 个item
。然而,self-attention layer
的第 $ t $ 个输出包含后续item
的embedding
的输入信息,这不符合真实的情况。因此,我们通过禁止 $ j\gt i $ 时 $ \mathbf{\vec q}_i $ 和 $ \mathbf{\vec k}_j $ 之间的所有连接来修改attention
。即:
key
的时刻不能超过query
的时刻。Point-Wise Feed-Forward Network
:尽管self-attention
能够使用自适应权重聚合所有先前item
的embedding
,但是它仍然是一个线性模型。为了赋予模型非线性并考虑不同潜在维度之间的交互,我们应用一个point-wise
的、双层的feed-forward network: FFN
到所有的 $ \mathbf {\vec h}_t $ 上, $ 1\le t \le n-1 $ ,并且双层FFN
是跨time step
共享权重的:其中:
$ \mathbf W^{(1)},\mathbf W^{(2)}\in \mathbb R^{d\times d} $ 为待学习的参数矩阵, $ \mathbf{\vec b}^{(1)},\mathbf{\vec b}^{(2)}\in \mathbb R^d $ 为待学习的参数向量。注意,
$ \mathbf {\vec h}_t $ 和 $ \mathbf {\vec h}_j $ ( $ t\ne j $ )之间没有交互,这意味着我们仍然阻止了信息泄露(未来信息泄露给历史)。注意,这里只有一个
ReLU
,为什么?个人猜测是为了方便后面直接接入output layer
。
12.1.3 Stacking Self-Attention Blocks
在第一层
self-attention block
之后, $ \mathbf{\vec f}_t $ 基本上聚合了所有先前item
的embedding
,即 $ \left\{\widehat{\mathbf{\vec e}}_j\right\}_{j\le t} $ 。然而,通过另一个基于 $ \mathbf F=\left[\mathbf{\vec f}_1,\cdots,\mathbf{\vec f}_{n}\right]^\top\in \mathbb R^{(n-1)\times d} $ 的self-attention block
来学习更复杂的item transition
可能是有益的。具体而言,我们堆叠self-attention block
(即,一个self-attention layer
和一个FFN
),并且第 $ b $ 个block
( $ B\ge b\gt 1 $ )定义为:然而,当网络更深时,有几个问题变得更加严重:
- 增加的模型容量导致模型过拟合。
- 训练过程变得不稳定(由于梯度消失等)。
- 具有更多参数的模型通常需要更多的训练时间。
受到
《Attention is all you need》
的启发,我们执行以下操作来缓解这些问题:其中:
$ g(x) $ 表示self attention layer
或FFN
。也就是说,对于
block
中的每个layer
$ g $ :- 我们在输入到
$ g $ 之前对输入 $ x $ 应用layer normalization
。 - 我们对
$ g $ 的输出应用dropout
。 - 此外,我们将输入
$ x $ 添加到最终输出。
我们接下来依次介绍这些操作。
残差连接
Residual Connections
:在某些情况下,多层神经网络已经证明了分层hierarchically
地学习有意义特征的能力。然而,在提出残差网络之前,简单地添加更多层并不容易得到更好的性能。残差网络背后的核心思想是:通过残差连接将low-layer
特征传播到更高的层。因此,如果low-layer
特征有用,模型可以轻松地将它们传播到最后一层。同样地,我们假设残差连接在我们的
case
中也很有用。例如,现有的序列推荐方法表明,最近一个访问的item
对预测next item
起着关键作用。然而,经过几个self-attention block
之后,最近一个访问的item
的embedding
与之前的所有item
纠缠在一起。添加残差连接从而将最近一个访问的item
的embedding
传播到最后一层将使模型更容易利用low-level
信息。假设在
time step
$ t $ 来预测next item
,那么self attention layer
的残差连接为:这里有一个细节:是采用
$ \mathbf{\vec e}_t $ (未考虑position embedding
)、还是采用 $ \hat{\mathbf{\vec e}}_t $ (考虑position embedding
)?论文并未提及。这可以通过实验来验证。Layer Normalization
:layer normalization
用于跨特征对输入进行归一化(即,零均值和单位方差),这有利于稳定和加速神经网络的训练。和batch normalization
不同,layer normalization
中使用的统计数据独立于同一个batch
中的其它样本。具体而言,假设输入是包含了一个样本中所有特征的向量
$ \mathbf{\vec x} $ ,则layer normalization
定义为:其中:
$ \odot $ 为逐元素乘积(也叫做Hadamard
积)。 $ \mu\in \mathbb R $ 和 $ \sigma\in \mathbb R $ 分别为单个样本 $ \mathbf{\vec x} $ 中所有元素构成的集合的均值和标准差。 $ \vec\alpha,\vec\beta $ 分别为待学习的比例因子和偏置项。
Dropout
:为了缓解深度神经网络中的过拟合问题,Dropout
正则化技术已被证明在各种神经网络架构中是有效的。Dropout
的思想很简单:在训练期间以概率 $ p $ 随机turn off
神经元,并在测试期间使用所有神经元。除了在
self attention layer
或FFN
上应用dropout
之外,我们还在embedding
$ \widehat{\mathbf E} $ 上应用了一个dropout layer
。
12.1.4 Prediction Layer
在
$ B $ 个self-attention block
之后,给定开始的 $ t $ 个item
我们基于 $ \mathbf{\vec f}_t^{(B)} $ 来预测next item
。具体而言,我们采用一个MF layer
来预测与item
$ i $ 的相关性relevance
:其中:
$ r_{i,t} $ 为给定开始的 $ t $ 个item
的条件下,item
$ i $ 成为next item
的relevance
,也称作交互分interaction score
。 $ \mathbf N\in \mathbb R^{|\mathcal I|\times d} $ 为另一个item embedding
矩阵。
因此,一个更高的
$ r_{i,t} $ 意味着item
$ i $ 更有可能成为next item
。我们根据 $ r_{i,t} $ 排序并生成推荐。Shared Item Embedding
:为了降低模型大小并缓解过拟合,我们考虑在MF layer
中使用item embedding
$ \mathbf V $ :注意:
$ \mathbf{\vec f}_t^{(B)} $ 可以视为一个依赖于 $ \mathbf V $ 的函数: $ \mathbf{\vec f}_t^{(B)} = \psi\left(\mathbf{\vec v}_{s_1},\cdots,\mathbf{\vec v}_{s_t}\right) $ 。使用同一套
item embedding
的一个潜在问题是:它们的内积不能表示非对称的item
转移,例如item
$ i $ 经常在item
$ j $ 之后购买(这意味着 $ \mathbf{\vec v}_i\cdot \mathbf{\vec v}_j $ 需要与 $ \mathbf{\vec v}_j\cdot \mathbf{\vec v}_i $ 不相等,但是从数学上看这是矛盾的)。因此,像FPMC
这样的方法倾向于使用异质heterogeneous
的item embedding
(即, $ \mathbf{\vec v}_i\cdot \mathbf{\vec n}_j\ne \mathbf{\vec v}_j\cdot \mathbf{\vec n}_i $ ) 。然而,我们的模型没有这个问题,因为它学习了非线性变换。例如,
FFN
可以通过同一套item embedding
轻松实现不对称: $ \text{FFN}\left(\mathbf{\vec v}_i\right)\cdot \mathbf{\vec v}_j\ne \text{FFN}\left(\mathbf{\vec v}_j\right)\cdot \mathbf{\vec v}_i $ 。根据经验,使用共享embedding
显著提高了我们模型的性能。Explicit User Modeling
:为了提供个性化推荐,现有方法通常采用以下两种方法之一:- 学习一个显式的
user embedding
从而表达用户的偏好(如MF
、FPMC
、Caser
)。 - 考虑用户之前的行为,并从之前访问的
item
的embedding
中导出一个隐式的user embedding
(如FSIM
、Fossil
、GRU4Rec
)。
我们的方法属于后者,因为我们通过考虑用户的所有行为来生成
embedding
$ \mathbf{\vec f}_t^{(B)} $ 。但是,我们也可以在最后一层插入显式的user embedding
,例如:其中
$ \mathbf U\in \mathbb R^{|\mathcal U|\times d} $ 为一个user embedding
矩阵。然而,我们根据经验发现添加显式的
user embedding
并不能提高性能(可能是因为模型已经考虑了所有用户的行为)。- 学习一个显式的
12.1.5 Network Training
回忆一下我们通过截断或填充从而将每个用户行为序列(排除最后一个行为)
$ \left(S_1^u,S_2^u,\cdots,S^u_{|\mathcal S^u|-1}\right) $ 转换为一个固定长度的序列 $ \mathbf s= (s_1,s_2,\cdots,s_n) $ 。我们定义 $ o_t $ 为在时刻 $ t $ 预期的output
:其中
<pad>
表示padding item
。我们的模型以序列
$ \mathbf s $ 作为输入,对应的序列 $ \mathbf o=(o_1,\cdots,o_{n-1}) $ 作为预期输出(注意,在时刻 $ n $ 我们没有下预期的next item
)。我们采用二元交叉熵损失作为目标函数:其中:
$ \mathbb S $ 为所有用户的所有session
所组成的集合。注意,我们忽略当
$ o_t = \text{} $ 时的损失项。 上式本质是
softmax
交叉熵损失的负采样版本,它是pointwise loss
。我们也可以考虑pairwise loss
。网络通过
Adam
优化器进行优化。在每个epoch
中,我们为每个序列中的每个time step
随机生成一个negative item
$ j $ 。更多实现细节将在后面描述。
12.1.6 复杂度分析
空间复杂度:我们模型中待学习的参数来自
embedding
,以及self-attention layer
、FFN
、layer normalization
中的参数,参数的总数为 $ O(|\mathcal I|d + nd + d^2) $ 。和其它方法相比(如FPMC
的 $ O(|\mathcal U|d + |\mathcal I|) d $ ),我们方法的参数规模是适中的,因为我们方法的参数规模不会随着用户数量的增加而增长,并且在推荐问题中 $ d $ 通常很小。时间复杂度:我们模型的计算复杂度主要来自于
self-attention layer
和FFN
,即 $ O(n^2d + nd^2) $ 。主要的复杂度是来自self-attention layer
的 $ O(n^2d) $ 。然而,我们模型中的一个方便的特性是:每个self-attention layer
中的计算是完全可并行的,这适合GPU
加速。相反,RNN-based
方法(如GRU4Rec
)依赖于time step
(即,time step
$ t $ 的计算必须等待time step
$ t-1 $ 的结果),这导致在序列操作 $ O(n) $ 倍时间。我们经验性地发现我们的方法比采用
GPU
的RNN/CNN-based
方法快十倍以上(结果类似于《Attention is all you need》
中机器翻译任务的结果),并且最大长度 $ n $ 可以轻松地扩展到几百(对现有的benchmark
数据集, $ n $ 达到几百通常是足够的)。在测试阶段,对于每个用户,在计算
embedding
$ \mathbf{\vec f}^{(b)}_t $ 之后,评估过程和标准的MF
方法相同。评估每个item
的计算复杂度为 $ O(d) $ 。处理长的序列:尽管我们的实验从经验上验证了我们方法的效率,但最终它无法扩展到非常长的序列。我们有望在未来调查一些方向:
- 使用
restricted self-attention
(《A time-restricted self-attention layer for asr》
),它仅关注最近的行为而不是所有行为,并且可以在更高的layer
考虑远距离行为distant action
。 - 如
《Personalized top-n sequential recommendation via convolutional sequence embedding》
中那样将长序列分段 。
- 使用
未来工作:
结合丰富的上下文信息(如停留时长、行为类型
action type
、location
、设备等等)来扩展模型。通过这些上下文信息,我们不仅知道行为序列中每个行为作用的
item
,还知道发生该行为的上下文。研究处理非常长的序列。
12.1.7 讨论
我们发现
SASRec
可以视为某些经典协同过滤模型的推广generalization
。我们还在概念上讨论了我们的方法和现有方法如何处理序列建模。SASRec
可以简化为一些现有模型:Factorized Markov Chains: FMC
:FMC
分解一阶的item
转移矩阵,并且依赖于最近的一个item
$ i $ 来预测next item
$ j $ :如果我们将
self-attention block
设为零、使用非共享的item embedding
、并且移除position embedding
,SASRec
将简化为FMC
。此外,
SASRec
还与Factorized Personalized Markov Chains: FPMC
密切相关,后者融合MF
和FMC
从而分别捕获用户偏好和短期动态:其中:
$ \cdot || \cdot $ 表示向量拼接。遵从上面类似于
FMC
的简化操作,并添加显式的user embedding
(通过向量拼接),SASRec
等效于FPMC
。Factorized Item Similarity Models: FISM
:FISM
通过考虑item
$ j $ 与用户之前访问的item
之间的相似性来估计对item
$ j $ 的偏好分数:如果我们使用一个
self-attention layer
(不包含FFN
)、在item
上设置均匀的注意力权重(即 $ 1/|\mathcal S^u| $ ) 、使用非共享的item embedding
、并移除position embeddnig
,则SASRec
将简化为FISM
。因此,我们的模型可以被视为用于next item
推荐的自适应的、分层的、序列的item similarity model
。
MC-based
推荐:马尔科夫链Markov Chains: MC
可以有效地捕获局部序列模式local sequential pattern
,它假设next item
仅依赖于前面的 $ L $ 个item
。现有的MC-based
的序列推荐方法要么依赖于一阶马尔科夫链(如FPMC, HRM, TransRec
)、要么依赖于高阶马尔科夫链(如Fossil, Vista, Caser
)。基于一阶马尔科夫链方法往往在稀疏数据集上表现最好。相比之下,基于高阶马尔科夫链的方法有两个限制:- 需要在训练之前指定马尔科夫链的阶次
$ L $ ,而不是自适应地选择。 - 效率和效果无法很好地随阶次
$ L $ 而scale
,因此 $ L $ 通常很小(例如 $ L \lt 5 $ )。
我们的方法解决了第一个问题,因为
SASRec
可以自适应地关注相关的前面的item
(如,在稀疏数据集上仅关注最近一个item
,以及在稠密数据集上关注更多的item
)。此外,对于第二个问题,我们的模型建模了前面
$ n $ 个item
,并且 $ n $ 根据经验可以扩展到数百,在训练时间适度增加的同时取得了性能的显著提升。- 需要在训练之前指定马尔科夫链的阶次
RNN-based
推荐:另一个方向的工作使用RNN
来建模用户行为序列。RNN
通常用于建模序列,但是最近的研究表明:CNN
和self-attention
在某些序列的setting
中表现得比RNN
更强。我们的
self-attention based
模型可以从item similarity model
中推导出来,这是用于推荐的序列建模的合理替代方案。对于RNN
,除了并行计算效率低下外,它们的最大路径长度(从输入节点到相关的输出节点)为 $ O(n) $ 。相比之下,我们的模型具有 $ O(1) $ 的最大路径长度,这有利于学习长程依赖long-range dependency
。
12.2 实验
我们进行实验并回答以下几个问题:
RQ1
:SASRec
是否超越了state-of-the-art
方法(包括CNN/RNN-based
方法)?RQ2
:SASRec
架构中各种组件的影响是什么?RQ3
:SASRec
的训练效率和可扩展性(关于n
的)如何?RQ4
:注意力权重是否能够学到与position
相关的、或者与item
属性相关的有意义的pattern
?
数据集:我们在来自现实世界应用程序的四个数据集上评估我们的方法。数据集在领域
domain
、平台platform
、稀疏性sparsity
方面差异很大:Amazon
:来自于Amazon.com
的数据集,其中Amazon
上的top-level
产品类别被视为单独的数据集。我们考虑两个类别,美妆Beauty
、游戏Games
。该数据集以高度的稀疏性和可变性variability
而著称。Steam
:来自于一个大型在线视频游戏分发平台Steam
。数据集包含2567538
名用户、15474
款游戏、7793069
条英文评论,时间跨度从2010
年10
月到2018
年1
月。该数据集还包含可能对未来工作有用的丰富信息,如用户游戏时长(小时)、游戏定价信息、媒体评分(对游戏的评分)、游戏类别category
、游戏开发者developer
等等。MovieLens
:用于评估协同过滤算法的、广泛使用的benchmark
数据集。我们使用包含100
万用户评分的版本MovieLens-1M
。
我们遵循与
《Factorizing personalized markov chains for next-basket recommendation 》
、《Translation-based recommendation》
、《Fusing similarity models with markov chains for sparse sequential recommendation》
相同的预处理程序:对于所有数据集,我们将评论或评分的存在视为隐式反馈(即,用户和
item
的交互),并使用时间戳来确定行为的顺序。对于评分,如果太低是不是要移除?否则高分和低分没有差异。
我们丢弃频次低于
5
的用户、以及频次低于5
的item
。我们将每个用户
$ u $ 的历史序列 $ \mathcal S^u $ 划分为三部分 :最近的行为 $ S^u_{|\mathcal S^u|} $ 用于测试、次近的行为 $ S^u_{|\mathcal S^u|-1} $ 用于验证、剩余的行为用于训练。注意,在测试期间,输入序列包括训练行为和验证的行为,即前面的 $ |\mathcal S^u|-1 $ 个行为。这个和
GRU4Rec
的不同。在GRU4Rec
中,仅在用户之间完整的session
划分数据集(即,user-level
),而不对session
内部进行拆分(即,session-level
)。区别在于:user-level
的划分:测试用户是全新的,相当于冷启动cold-start
。session-level
的划分:测试用户不是全新的,已经在训练期间见过用户前面的 $ |\mathcal S^u|-1 $ 个行为,预测最后一个行为。
数据集的统计特性参考下表。我们看到:两个
Amazon
数据集的actions per user
和actions per item
更少,Steam
的actions per item
更高,而MovieLens-1m
是最稠密的数据集。baseline
方法:我们考虑三组baseline
。第一组
baseline
仅考虑用户反馈而不考虑行为顺序的通用推荐方法general recommendation method
:PopRec
:这是一个简单的baseline
,根据item
的热门程度(即数据集中的频次)对item
进行排名。Bayesian Personalized Ranking: BPR
:是一种从隐式反馈中学习个性化排名的经典方法。biased
的矩阵分解模型作为底层的推荐器recommender
。
第二组
baseline
包含基于一阶马尔科夫链的序列推荐方法,它考虑最近一个访问的item
:Factorized Markov Chains: FMC
:一阶马尔科夫链方法。FMC
使用两个item embedding
来分解item
转移矩阵,并根据最近一个访问的item
生成推荐。Factorized Personalized Markov Chains: FPMC
:FPMC
组合了矩阵分解和分解的一阶马尔科夫链,从而捕获了用户的长期偏好以及item-to-item
的转移。Translation-based Recommendation: TransRec
:一种state-of-the-art
的一阶序列推荐方法,它将每个用户建模为一个翻译向量translation vector
从而捕获从current item
到next item
的转移。
最后一组
baseline
包含基于深度学习的序列推荐方法,这些方法考虑了最近访问的一些item
或者所有访问的item
:GRU4Rec
:一种开创性的、使用RNN
来建模用户行为序列的session-based
推荐方法。我们将每个用户的反馈序列视为一个session
。一个用户只有一个
session
。理论上最好进行时间间隔的拆分,将用户行为序列基于时间间隔拆分为多个session
,使得每个session
集中体现用户的某个意图。GRU4Rec+
:GRU4Rec
的改进版本(《Recurrent neural networks with top-k gains for session-based recommendations》
),它采用不同的损失函数和采样策略,并在Top-N
推荐上显示出显著的性能提升。Convolutional Sequence Embeddings: Caser
:最近提出的一种CNN-based
方法,它通过对 $ L $ 个最近item
的embedding
矩阵应用卷积运算来捕获高阶马尔科夫链,并实现了state-of-the-art
的序列推荐性能。
由于其它序列推荐方法(如
PRME, HRM, Fossil
)在类似数据集上的性能逊色于上述baseline
,因此我们不考虑与它们进行比较。我们也不包含TimeSVD++, RRN
等时间推荐方法temporal recommendation method
,因为它们的setting
与我们这里考虑的不同。配置:
- 为了公平地比较,我们使用带
Adam
优化器的TemsorFlow
来实现BPR, FMC, TransRec
。对于GRU4Rec, GRU4Rec++, Caser
,我们使用相应作者提供的代码。 - 对于除了
PopRec
之外所有方法,我们从{10, 20, 30, 40, 50}
中考虑潜在维度 $ d $ 。 - 对于
BPR, FMC, FPMC, TransRec
,我们考虑L2
正则化并且正则化系数从{0.0001, 0.001, 0.01, 0.1, 1}
之间选择。 - 所有其它超参数和初始化策略都是对应方法的作者所建议的。我们使用验证集调优超参数,如果验证集性能在
20
个epoch
内没有提高,那么终止训练。
- 为了公平地比较,我们使用带
SASRec
实现细节:对于默认版本的
SASRec
中的架构,我们使用两个self-attention block
( $ B=2 $ ),并使用待学习的positional embedding
。embedding layer
和prediction layer
中的item embedding
是共享的。我们使用
TensorFlow
实现了SASRec
。优化器是Adam
,学习率为0.001
,batch size = 128
。MovieLens-1m
的dropout rate = 0.2
,而其它三个数据集由于稀疏性因此dropout rate = 0.5
。数据集越稀疏所以
dropout rate
越大?可能需要进行超参数调优来观察实验效果。MovieLens-1m
的最大序列长度 $ n=200 $ ,其它三个数据集的最大序列长度 $ n=50 $ 。
我们在后面检查
SASRec
的不同变体以及不同超参数的性能。SASRec
的代码公布在https://github.com/kang205/SASRec
。评估指标:我们使用两个常见的
Top-N
指标Hit Rate@10, NDCG@10
来评估推荐性能。Hit@10
计算了ground-truth
的next item
出现在推荐列表的top 10
个item
比例(分母为推荐列表的个数,即推荐结果中有多少是命中的)。注意,由于我们对每个用户仅有一个
test item
,因此Hit@10
相当于Recall@10
,并且与Precision@10
成正比(Precision@10
还要除以推荐列表长度,这里是10
)。而
NDCG@10
是一个position-aware
的指标,它在排名靠前的位置分配更大的权重。
为了避免对所有
user-item pair
进行大量的计算,我们对每个用户随机采样100
个negative item
,并将这些negative item
与ground-truth item
进行排名。我们根据这101
个item
的排名来评估Hit@10
和NDCG@10
指标。
12.2.1 不同方法结果比较
下表展示了所有方法在四个数据集上的推荐性能(用于回答问题
RQ1
)。考虑排除
SASRec
以外的其它方法在所有数据集上的表现,我们发现一种通用模式,即:non-neural
方法((a) ~ (e)
)在稀疏数据集上表现更好,而神经网络方法((f) ~ (h)
)在稠密数据集上表现更好。这可能是由于神经网络方法具有更多参数来捕获高阶转移
high order transition
(即,它们具有表达能力但是容易过拟合),而精心设计但更简单的模型在高度稀疏的setting
中更有效。我们的方法
SASRec
在稀疏数据集和稠密数据集上都优于所有baseline
,并且相对于最强的baseline
在Hit Rate
上平均提升6.9%
、在NDCG
上平均提升9.6%
。一个可能的原因是我们的模型可以自适应地关注不同数据集上不同范围内的
item
(例如,在稀疏数据集上仅关注前一个item
,在稠密数据集上关注更多的item
)。我们在后面内容进一步分析了这种行为。
在下图中,我们还通过展示
$ d $ 从10
到50
的变化时所有方法的NDCG@10
指标,从而分析关键超参数 $ d $ 的影响。我们看到我们的模型通常受益于更大的 $ d $ 。对于所有数据集,我们的SASRec
在 $ d\ge 40 $ 时取得令人满意的性能。
12.2.2 消融研究
由于我们的架构中有许多组件,我们通过消融研究来分析它们的影响(用于回答问题
RQ2
)。下表显示了我们的默认方法及其8
个变体在所有四个数据集上的性能( $ d=50 $ ) 。我们将分别介绍这些变体并分析它们的作用:Remove PE(Positional Embedding)
:没有positional embedding
$ \mathbf P $ ,每个item
的注意力权重仅取决于item embedding
。也就是说,该模型根据用户过去的行为进行推荐,但是行为的顺序并不重要。该变体可能适用于用户行为序列通常较短的稀疏数据集。该变体在最稀疏的数据集
Beauty
上的表现优于默认的模型,但是在其它更稠密的数据集上的表现更差。移除
positional embedding
不一定效果下降,主要还是要看数据集的性质。Unshared IE(Item Embedding)
:我们发现,使用两种item embedding
(非共享的item embedding
)会一致性地损害性能,可能是由于过拟合。Remove RC(Residual Connections)
:我们发现,移除残差连接之后模型性能显著更差。这大概是因为lower layer
中的信息(如,最近一个item
的embedding
,第一个block
的output
)无法轻易地传播到最后一层,而这些lower layer
中的信息对于推荐非常有用,尤其是在稀疏数据集上。Remove Dropout
:我们的结果表明,dropout
可以有效地正则化模型从而实现更好的性能,尤其是在稀疏数据集上。结果还暗示了:过拟合在稠密数据集上不严重。过拟合在稠密数据集上也比较严重,只是相对稀疏数据集而言不太严重。
因为稀疏数据集更容易陷入过拟合,因此更需要正则化。
Number of blocks
:- 毫不奇怪, 零个
block
的结果较差,因为模型效果仅取决于最近一个item
。 - 带有一个
block
的变体的表现相当不错。 - 带有两个
block
的变体(即default
模型)的表现仍然进一步提升,尤其是在稠密数据集上,这意味着hierarchical self-attention structure
有助于学习更复杂的item
转移。 - 带有三个
block
的变体可以获得与default
模型(即两个block
)相似的性能。
- 毫不奇怪, 零个
Multi-head
:Transformer
的作者发现使用multi-head
的注意力很有用,它将注意力应用于 $ K $ 个子空间(每个子空间都是 $ d/K $ 维的)。然而,在我们的case
中,two head attention
的性能始终比single-head attention
稍差。这可能是由于我们的问题中的 $ d $ 很小,它不适合分解成更小的子空间(在Transformer
中, $ d=512 $ )。
12.2.3 训练效率和可扩展性
我们评估了我们模型的训练效率的两个方面(用于回答问题
RQ3
):训练速度(一个训练epoch
所花费的时间)、收敛时间(达到令人满意的性能所花费的时间)。我们还根据最大长度 $ n $ 检查模型的可扩展性。所有实验均使用单个GTX-1080 Ti GPU
进行。训练效率:下图展示了使用
GPU
加速的、基于深度学习的方法的效率。GRU4Rec
由于性能较差而被省略。为公平比较,Caser
和GRU4Rec+
有两种训练选项:使用完整的训练数据、或仅使用最近的200
个行为(SASRec
中就是使用最近的200
个行为)。- 在计算速度上,
SASRec
一个epoch
的模型更新时间仅为1.7
秒,比Caser
快11
倍(19.1 s/epoch)
)、比GRU4Rec+
快18
倍(30.7s/epoch
)。 - 在收敛速度上,
SASRec
在ML-1M
数据集上大约在350
秒内收敛到最佳性能,而其它模型需要更长的时间。 - 我们还发现,使用完整数据可以提高
Caser
和GRU4Rec+
的性能。
- 在计算速度上,
可扩展性:与标准
MF
方法一样,SASRec
与用户总数、item
总数、action
总数呈线性关系。一个潜在的可扩展性问题是最大长度 $ n $ ,但是计算可以有效地采用GPU
并行化。这里我们测量SASRec
在不同 $ n $ 的训练时间和性能,从而研究SASRec
的可扩展性,并分析它是否可以在大多数情况下处理序列推荐。下表显示了具有不同序列长度的
SASRec
的性能和效率。- 较大的
$ n $ 的性能会更好,在 $ n=500 $ 左右时性能会达到饱和(可能是因为这个长度已经覆盖了99.8%
的行为序列)。 - 然而,即使
$ n=600 $ ,模型也可以在2000
秒内完成训练,这仍然比Caser
和GRU4Rec+
更快。
因此,我们的模型可以轻松地扩展到多达数百个行为的用户行为序列,这适用于典型的评论数据集和购买数据集。我们计划在未来研究处理非常长的序列的方法。
- 较大的
12.2.4 可视化
回想一下,在
time step
$ t $ ,我们模型中的self-attention
机制根据前面 $ t $ 个item
的position embedding
和item embedding
自适应地为它们分配权重。为了回答RQ4
,我们检查所有训练序列,并通过展示position
上的平均注意力权重、以及item
之间的平均注意力权重来揭示有意义的pattern
。position
上的注意力:下图展示了最近15
个time step
在最近15
个position
上的平均注意力权重的四种热力图。注意,我们在计算平均权重时,分母是有效权重的个数,从而避免短序列中padding item
的影响。我们考虑了不同热力图之间的一些比较:
(a) vs (c)
:这种比较表明:- 对于稀疏数据集
Beauty
,SASRec
倾向于关注更近more recent
的item
。 - 对于稠密数据集
ML-1M
,SASRec
倾向于关注不那么近less recent
的item
。
这是使我们的模型能够自适应地处理稀疏数据集和稠密数据集的关键因素,而现有方法往往仅侧重于某一头。
即,表明我们的
self-attention
机制的行为是自适应的。- 对于稀疏数据集
(b) vs (c)
:这种比较展示了使用positional embedding: PE
的效果。- 没有
positional embedding
(即,(b
),注意力权重基本上均匀分布在先前的item
上。 - 有
positional embedding
(即,(c)
,也是默认的模型),模型对position
更敏感,因为模型倾向于关注最近的item
。
即,表明我们的
self-attention
机制的行为是position-aware
的。- 没有
(c) vs (d)
:由于我们的模型是分层hierarchical
的,这里展示了不同block
之间的注意力是如何变化的。显然,high layer
的注意力往往集中在更近more recent
的position
上。这大概是因为第一个self-attention block
已经考虑了所有之前的item
,而第二个block
不需要考虑很远的position
。即,表明我们的
self-attention
机制的行为是hierarchical
的。此外,既然第二个
block
不需要考虑很远的position
,那么是否使用简单的last representation
就可以?毕竟self-attention block
的计算复杂度比直接引入last representation
更高。
总而言之,可视化表明我们的
self-attention
机制的行为是自适应的、position-aware
的、以及hierarchical
的。item
之间的注意力:展示几个精心挑选的item
之间的注意力权重可能没有统计学意义。在MovieLens-1M
上,每部电影都有多个类别。为了进行更广泛的比较,我们随机选择两个不相交的集合,每个集合包含来自4
个类别的200
部电影:科幻Sci-Fi
、浪漫Romance
、动画Animation
、恐怖Horror
(注,这两个集合共享相同的四个类别)。第一个集合用于query
,第二个集合用于key
。下图展示了两个集合内不同
item
之间的平均注意力权重的热力图(item
粒度的,而不是类别粒度的),每个集合内的item
根据类别进行分组。我们可以看到:热力图大概是一个块对角矩阵block diagonal matrix
,这意味着注意力机制可以识别相似的item
(如,同一个类别的item
),并倾向于在相似item
之间分配更大的权重(SASRec
事先不知道类别,我们也没有将item
类别作为特征馈入模型)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论