数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
二十二、BERT4Rec [2019]
准确描述用户的兴趣是有效推荐系统的核心。在许多现实世界的
application
中,用户当前的兴趣本质上是动态dynamic
的和演变evolving
的,受到用户的历史行为的影响。例如,一名用户可能在购买一个Nintendo Switch
后不久就购买配件(如,Joy-Con
控制器),然而该用户在正常情况下不会购买console
配件。为了建模用户行为中的这种序列动态
sequential dynamics
,人们已经提出了各种方法来根据用户的历史交互historical interactions
进行序列推荐sequential recommendations
。这些方法的目标是:预测用户在给定该用户历史交互的情况下,该用户接下来可能交互的下一个item
。最近,大量工作采用序列神经网络sequential neural networks
,如Recurrent Neural Network: RNN
,用于序列推荐并获得有前景的结果。先前工作的基本范式是:使用从左到右的序列模型将用户的历史交互编码为向量(即,用户偏好的hidden representation
),并基于该hidden representation
进行推荐。尽管它们的流行性和有效性,
BERT4Rec
的作者认为这种从左到右的单向模型不足以学到用户行为序列的最佳representation
。如下图
(c)
和(d)
所示,主要限制是:对于历史行为序列中item
,此类单向模型限制了item
的hidden representation
的能力,其中每个item
只能对来自previous items
的信息进行编码。另一个限制是:以前的单向模型最初是针对具有自然顺序
natural order
的序列数据sequential data
引入的,如文本序列数据text series data
、时间序列数据time series data
。它们通常假设数据上的严格排序的序列ordered sequence
,这对于真实世界的application
并不总是正确的。事实上,由于各种不可观察
unobservable
的外部因素,用户历史交互中的item
选择可能不遵循严格的顺序假设order assumption
。在这种情况下,在用户行为序列建模中同时结合来自两个方向的上下文context
至关重要。
为了解决上述限制,
BERT4Rec
寻求使用双向模型来学习用户历史行为序列的representation
。具体而言,受BERT
在文本理解方面的成功所启发,《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》
提出将深度双向自注意力模型deep bidirectional self-attention model
应用于序列推荐,如上图(b)
所示。在representation power
方面,深度双向模型在文本序列建模任务上的优异结果表明:将双向的上下文结合起来对sequence representations learning
是有益的。对于严格的顺序假设,BERT4Rec
比单向模型更适合建模用户行为序列,因为双向模型中的所有item
都可以利用左右两个方向的上下文。然而,为序列推荐训练双向模型并不简单,也不直观。传统的序列推荐模型通常通过预测输入序列中每个位置的
next item
来从左到右进行训练。如上图所示,在深度双向模型中同时联合调节jointly conditioning
左侧和右侧的上下文,会导致信息泄露,即允许每个位置间接see the target item
。这可能会使预测未来变得没有价值,并且网络不会学到任何有用的东西。为了解决这个问题,
BERT4Rec
引入了完形填空任务Cloze task
来代替单向模型中的目标(即,序列地预测next item
)。具体而言,BERT4Rec
在输入序列中随机地mask
一些item
(即,用特殊token
[mask]
来替换它们),然后根据它们周围的上下文来预测这些masked item
的id
。 通过这种方式,BERT4Rec
通过允许输入序列中每个item
的representation
同时融合左侧和右侧上下文,从而避免信息泄露并学习bidirectional representation mode
。除了训练双向模型之外,完成填空目标的另一个优点是:它可以产生更多的样本来在多个epoch
中训练更强大的模型。例如,完形填空目标可以
mask
掉一个item
,也可以一次mask
掉多个item
。而传统的session-based
推荐一次只能预测一个目标。然而,完形填空任务的一个缺点是:它与最终任务(即序列推荐)不一致。为了解决这个问题,在测试过程中,我们在输入序列的末尾附加了特殊的
token
[mask]
来指示我们需要预测的item
,然后根据其final hidden vector
进行推荐。对四个数据集的广泛实验表明,我们的模型始终优于各种state-of-the-art baselines
。即,测试期间用
[mask]
替代target item
。论文的贡献如下:
- 作者提出通过完形填空任务用双向自注意力网络来建模用户行为序列。据作者所知,这是第一个将深度双向序列模型和完形填空目标引入推荐系统领域的研究。
- 作者将
BERT4Rec
与state-of-the-art
的方法进行比较,并通过对四个benchmark
数据集的定量分析证明双向架构和完形填空目标的有效性。 - 作者进行了一项全面的消融研究,从而分析所提出模型中关键组件的贡献。
相关工作:这里我们简要回顾与我们密切相关的几个工作,包括通用推荐
general recommendation
、序列推荐、以及注意力机制。通用推荐:推荐系统的早期工作通常使用协同过滤
Collaborative Filtering: CF
从而根据用户的交互历史来建模用户偏好。在各种协同过滤方法中,矩阵分解
Matrix Factorization: MF
是最流行的一种,它将用户和item
投影到一个共享的向量空间中,并通过user
向量和item
向量之间的内积来估计用户对item
的偏好。协同过滤的另一个方向是
item-based
邻域方法。它通过使用预计算precomputed
的item-to-item
相似度矩阵,通过测量目标item
与用户交互历史中的item
的相似性从而评估用户对目标item
的偏好。最近,深度学习已经极大地改变了推荐系统。早期的先驱工作是用于协同过滤的两层
Restricted Boltzmann Machine: RBM
,在Netflix Prize
中由论文《Restricted Boltzmann Machines for Collaborative Filtering》
提出。- 基于深度学习的一个方向旨在通过将从辅助信息(如文本、图像、声音)中学到的
distributed item representation
集成到协同过滤模型中,从而提高推荐性能。 - 基于深度学习的另一个方向试图取代传统的矩阵分解模型。例如,
Neural Collaborative Filtering: NCF
通过多层感知机而不是内积来估计用户偏好,而AutoRec
和CDAE
使用自编码器框架来预测用户的评分。
- 基于深度学习的一个方向旨在通过将从辅助信息(如文本、图像、声音)中学到的
序列推荐:不幸的是,上述方法都不适用于序列推荐,因为它们都忽略了用户行为的顺序
order
。早期的序列推荐工作通常使用马尔科夫链
Markov chain: MC
,从而从用户历史交互中捕获序列模式sequential pattern
。例如:《An MDP-Based Recommender System》
将recommendation generation
形式化为序列优化问题sequential optimization problem
,并采用马尔科夫决策过程Markov Decision Processe: MDP
来解决它。- 后来,
《Factorizing Personalized Markov Chains for Next-basket Recommendation》
结合 马尔科夫链和矩阵分解的能力,通过分解个性化马尔科夫链Factorizing Personalized Markov Chain: FPMC
来建模序列行为和通用兴趣。 - 除了一阶马尔科夫链之外,
《Translation-based Recommendation》
和《Fusing Similarity Models with Markov Chains for Sparse Sequential Recommendation》
还采用高阶马尔科夫链来考虑更多previous items
。
最近,
RNN
及其变体Gated Recurrent Unit: GRU
、Long Short-Term Memory: LSTM
在建模用户行为序列方面变得越来越流行。这些方法的基本思想是:将用户以前的记录通过各种循环架构和损失函数,编码为一个向量(即,用于执行预测的、用户偏好的representation
),包括具有ranking loss
的session-based GRU
(GRU4Rec
)、Dynamic REcurrent bAsket Model: DREAM
、user-based GRU
(《Sequential User-based Recurrent Neural Network Recommendations》
)、attention-based GRU
(NARM
)、以及具有新的损失函数(即BPR-max
和TOP1-max
)和改进的采样策略的improved GRU4Rec
(《Recurrent Neural Networkswith Top-k Gains for Session-based Recommendations
)。除了循环神经网络
recurrent neural network
之外,人们还引入了各种深度学习模型来进行序列推荐。例如:《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》
提出了一个卷积序列模型Caser
,它同时使用水平卷积滤波器和垂直卷积滤波器来学习序列模式。《Sequential Recommendation with User Memory Networks》
和《Improving Sequential Recommendation with Knowledge-Enhanced Memory Networks》
使用Memory Network
来改善序列推荐。STAMP
使用具有注意力的MLP
网络来同时捕获用户的通用兴趣general interest
和当前兴趣current interest
。
注意力机制:注意力机制在建模序列数据方面显示出巨大的潜力,例如机器翻译和文本分类。最近,一些工作尝试使用注意力机制来提高推荐性能和可解释性。例如,
NARM
将注意力机制融合到GRU
中,从而在session-based
推荐中同时捕获用户的序列行为和主要意图main purpose
。上述工作基本上将注意力机制视为原始模型的附加组件
additional component
。相比之下,Transformer
和BERT
仅建立在multi-head self-attention
之上,并且在文本序列建模上取得了state-of-the-art
结果。最近,人们越来越热衷于应用单纯的attention-based
神经网络来建模序列数据,从而提高模型的效果和效率effectiveness and efficiency
。对于序列推荐,《Self-Attentive Sequential Recommendation》
引入了一个名为SASRec
的、两层的Transformer
解码器(即,Transformer
语言模型)来捕获用户的序列行为,并在几个公共数据集上实现了state-of-the-art
的结果。SASRec
与我们的工作密切相关。然而,它仍然是一个使用因果注意力掩码casual attention mask
的单向模型。而我们使用双向模型在完形填空任务的帮助下,编码用户的行为序列。
22.1 模型
问题定义:令
$ \mathcal U=\{u_1,u_2,\cdots,u_{|\mathcal U|}\} $ 为用户集合, $ \mathcal V=\{v_1,v_2,\cdots,v_{|\mathcal V|}\} $ 为item
集合。 $ \mathcal S_u=\left[v_1^{(u)},\cdots,v_t^{(u)},\cdots,v_{n_u}^{(u)}\right] $ 为用户 $ u $ 的历史交互序列interaction sequence
(按时间顺序排列), $ v_t^{(u)}\in \mathcal V $ 为用户 $ u $ 在time step
$ t $ 交互的item
, $ n_u $ 为用户 $ u $ 的历史交互序列的长度。给定历史交互序列
$ \mathcal S_u $ ,序列推荐旨在预测用户 $ u $ 在time step
$ n_u+1 $ 即将交互的item
。该问题可以形式化为:建模用户 $ u $ 在time step
$ n_u + 1 $ 所有可能交互的item
的概率:这里我们介绍了一种新的序列推荐模型,称作
BERT4Rec
。BERT4Rec
采用来自Transformer
的Bidirectional Encoder Representation
来完成一个新任务,即序列推荐。BERT4Rec
建立在流行的self-attention layer
(即,Transformer layer
)的基础之上。如下图
(b)
所示,BERT4Rec
由 $ L $ 个双向Transformer layer
堆叠而成。在每一层,BERT4Rec
通过Transformer layer
并行地修改每个位置的representation
,这种修改是通过交换前一层所有位置的信息来实现的。不像图(d)
中RNN-based
方法那样step-by-step
地学习forward
相关的信息,self-attention
机制赋予BERT4Rec
直接捕获任何距离的依赖关系的能力。这种机制导致全局感受野,而像Caser
这样的CNN-based
方法通常具有有限的感受野。此外,与RNN-based
方法相比,self-attention
可以直接并行化。比较下图
(b), (c), (d)
,最明显的区别是:SASRec-based
和RNN-based
方法都是left-to-right
的单向结构,而我们的BERT4Rec
使用双向自注意力来建模用户的行为序列。通过这种方式,我们提出的模型可以获得用户行为序列更强大的representation
,从而提高推荐性能。
22.1.1 Transformer Layer
如上图
(b)
所示,给定长度为 $ t $ 的输入序列,我们通过应用《Attention is All you Need》
中的Transformer layer
,在每一层 $ l $ 同时迭代计算在每个位置 $ i $ 处的hidden representation
$ \mathbf{\vec h}_i^{(l)}\in \mathbb R^d $ ,其中 $ d $ 为representation
维度。这里,我们将 $ \mathbf{\vec h}_i^{(l)} $ 堆叠起来得到矩阵 $ \mathbf H^{(l)}\in \mathbb R^{d\times t} $ ,因为我们在实践中同时计算所有位置的注意力函数(而不是step-by-step
地计算)。如上图
(a)
所示,Transformer layer
Trm
包含两个子层:一个Multi-Head Self-Attention
子层、一个Position-wise Feed-Forward Network
。Multi-Head Self-Attention
:注意力机制已经成为各种序列建模任务中不可或缺的一部分,它允许捕获representation pair
之间的依赖关系,而无需考虑representation pair
在序列中的距离。 以前的工作表明,联合处理来自不同位置的、不同representation
子空间的信息是有益的。因此,我们在这里采用multi-head self-attention
而不是执行单个注意力函数。具体而言:multi-head attention
首先将 $ \mathbf H^{(l)} $ 线性投影到 $ h $ 个子空间中,使用不同的、可学习的线性投影。- 然后并行采用
$ h $ 个注意力函数来生成output representation
。 - 最后这
$ h $ 个output representation
被拼接成单个representation
并再次进行线性投影。
其中:
每个
head
的投影矩阵 $ \mathbf W_{Q,i}^{(l)}\in \mathbb R^{d/h\times d},\mathbf W_{K,i}^{(l)}\in \mathbb R^{d/h\times d},\mathbf W_{V,i}^{(l)}\in \mathbb R^{d/h\times d} $ 以及线性投影矩阵 $ \mathbf W_{O}^{(l)}\in \mathbb R^{d\times d} $ 都是可学习的参数。 $ [\cdot;\cdot] $ 为向量拼接,这里的Attention()
函数是Scaled Dot-Product Attention
:其中:
query
$ \mathbf Q $ 、key
$ \mathbf K $ 、value
$ \mathbf V $ 从相同的矩阵 $ \mathbf H^{(l)} $ 以学到的不同的投影矩阵来投影得到。引入温度 $ d/h $ 是为了产生更平缓的注意力分布,从而避免极小的梯度。注意:由于这里的
$ \mathbf V\in \mathbb R^{d\times t} $ ,而 $ \mathbf Q^\top\mathbf K\in \mathbb R^{t\times t} $ ,因此 $ \mathbf V $ 在左侧。
Position-wise Feed-Forward Network
:如前所述,自注意力子层主要基于线性投影。为了赋予模型非线性nonlinearity
、以及不同维度之间的交互interaction
,我们将Position-wise Feed-Forward Network
应用于注意力子层的输出,在每个位置独立separately
地、且等同地identically
应用。Position-wise Feed-Forward Network
由两个仿射变换组成,中间有一个Gaussian Error Linear Unit: GELU
激活函数:其中:
$ \Phi(x) $ 是标准高斯分布的累积分布函数。 $ \mathbf W^{(l)}_1 \in \mathbb R^{4d\times d},\mathbf W^{(l)}_2\in \mathbb R^{d\times 4d},\mathbf{\vec b}^{(l)}_1\in \mathbb R^{4d},\mathbf{\vec b}^{(l)}_2\in \mathbb R^{d} $ 为可学习的参数,并且跨所有位置共享。
在这项工作中,遵循
OpenAI GPT
和BERT
的工作,我们使用更平滑的GELU
激活函数而不是标准的ReLu
激活函数。注意,这里通过
$ \mathbf W_1^{(l)} $ 将representation
先膨胀,然后再通过 $ \mathbf W_2^{(l)} $ 执行压缩。堆叠
Transformer Layer
:如前所述,我们可以使用self-attention
机制轻松地捕获整个用户行为序列中的item-item
交互。通过堆叠self-attention layer
来学习更复杂的item transition pattern
通常是有益的。然而,随着网络的加深,网络变得更加难以训练。因此,我们在两个子层的每个子层周围使用一个残差连接,然后是layer normalization
,如上图(a)
所示。此外,我们还将
dropout
应用于每个子层的输出,dropout
发生在layer normalize
之前。即,每个子层的输出为: $ \text{LN}\left(\mathbf{\vec x} + \text{Dropout}\left(\text{sublayer}\left(\mathbf{\vec x}\right)\right)\right) $ ,其中: $ \text{sublayer}\left(\cdot\right) $ 是子层自己实现的函数,如多头自注意力函数MH()
、或逐位置的前向反馈网络PFFN()
。 $ \text{LN}(\cdot) $ 是layer normalization
函数。我们使用LN
对同一层中的所有隐单元的输入进行归一化,从而稳定和加速网络训练。
总之,
BERT4Rec
将每一层的hidden representation
调整为:
22.1.2 Embadding Layer
如前所述,由于没有任何递归模块或卷积模块,因此
Transformer layer Trm
不知道输入序列的顺序order
。为了利用输入的序列信息,我们将Positional Embedding
注入到Transformer layer stack
底部的input item embedding
中。对于给定的item
$ v_i $ ,它的input representation
$ \mathbf{\vec h}_i^{(0)} $ 是通过对相应的item embedding
和positional embedding
相加得到:其中:
$ \mathbf{\vec e}_i\in \mathbb R^d $ 为item
$ v_i $ 的embedding
向量, $ \mathbf{\vec p}_i\in \mathbb R^d $ 为位置索引 $ i $ 的positional embedding
。所有
item
的embedding
构成item embedding
矩阵 $ \mathbf E\in \mathbb R^{|\mathcal V|\times d} $ ,所有位置的embedding
构成positional embedding
矩阵 $ \mathbf P\in \mathbb R^{N\times d} $ , $ N $ 为用户行为序列的最大长度。在这项工作中,我们使用可学习的
positional embedding
而不是固定的正弦embedding
,从而获得更好的性能。positional embedding
矩阵 $ \mathbf P $ 允许我们的模型识别该模型正在处理的是输入的哪一部分。但是,positional embedding
矩阵 $ \mathbf P $ 也对我们的模型可以处理的最大序列长度施加了限制,即不超过 $ N $ 。因此,当 $ t\gt N $ 时,我们需要截断输入序列 $ \left[v_1^{(u)},\cdots,v_t^{(u)}\right] $ 从而获取最近的 $ N $ 个item
。如果是固定的正弦
embedding
作为positional embedding
,那么模型没有最大序列长度的限制。
22.1.3 输出层
在
$ L $ 层Transformer Layer
之后,我们得到输入序列的所有item
的final output
$ \mathbf H^{(L)} $ 。假设我们在time step
$ t $mask
了item
$ v_t $ ,然后我们根据 $ \mathbf{\vec h}_t^{(L)} $ 来预测被masked
的item
$ v_t $ 。具体而言,我们应用了一个带GELU
激活的两层前馈网络来生成target item
的输出分布:其中:
$ \mathbf W_P\in \mathbb R^{d\times d} $ 为可学习的投影矩阵, $ \mathbf{\vec b}_P\in \mathbb R^d,\mathbf{\vec b}_O\in \mathbb R^{|\mathcal V|} $ 为bias
项, $ \mathbf E\in \mathbb R^{|\mathcal V|\times d} $ 为所有item
的embedding
矩阵。我们在输入层和输出层使用共享的
item embedding
矩阵来缓解过拟合并减小模型大小。一方面,由于
$ v_t $ 被mask
了,因此在所有Transformer Layer
中都不会泄露 $ v_t $ 的信息。另一方面,位置
$ t $ 得到的final representation
$ \mathbf{\vec h}_t^{(L)} $ 包含了所有剩余的item
的信息从而用于预测 $ v_t $ 。
22.1.4 模型学习
训练阶段:传统的单向序列推荐模型通常通过预测输入序列的每个位置的
next item
来训练模型。具体而言,输入序列 $ [v_1,\cdots,v_t] $ 的target
$ [v_2,\cdots,v_{t+1}] $ 是输入序列的右移一位。然而,在双向模型中联合调节conditioning
左右上下文会导致每个item
的final output representation
包含target item
的信息。这使得预测未来变得没有意义,并且网络不会学到任何有用的东西。假如
target item
为序列中最后一个item
,那么在双向模型中,序列中第一个item
、第二个item
、... 其它所有位置item
都能访问到target item
的信息。这个问题的一个简单解决方案是:从原始长度为
$ t $ 的行为序列创建 $ t-1 $ 个样本(即,带有next item
作为label
的子序列,如 $ ([v_1],v_2) $ 和 $ ([v_1,v_2],v_3) $ ),然后使用双向模型对每个子序列进行编码从而预测target item
。然而,这种方法非常耗时和耗资源,因为我们需要为序列中的每个位置创建一个新样本并分别预测它们。为了有效地训练我们提出的模型,我们将一个新目标,即完形填空任务
Cloze task
(也被称作Masked Language Model: MLM
),应用于序列推荐。这是一项由一部分语言组成的测试,其中某些单词被删除,模型需要预测缺失的单词。在我们的例子中,对于每个training step
,我们随机mask
输入序列中所有item
的 $ \rho $ 比例(即,用特殊token
"[mask]"
替换),然后仅根据左右上下文预测被masked item
的原始ID
。例如:与
"[mask]"
相对应的final hidden vector
被馈送到一个output softmax
,就像在传统的序列推荐中一样。最终,我们将每个masked input
$ \mathcal S_u^\prime $ 的损失定义为masked target
的负对数似然:其中:
$ \mathcal S_u^\prime $ 为用户行为历史 $ \mathcal S_u $ 的masked
版本,如 $ [v_1,[\text{mask}]_1,v_3,[\text{mask}]_2,v_5] $ 。 $ \mathcal S_u^m $ 为 $ \mathcal S_u $ 中随机masked
的item
集合,如 $ \{ [\text{mask}]_1, [\text{mask}]_2 \} $ 。 $ v_m^* $ 为被masked item
$ v_m $ 的ground truth
,如 $ \{ [\text{mask}]_1 = v_2, [\text{mask}]_2=v_4\} $ 。 $ P(\cdot) $ 为模型预测输出为ground truth
的概率。
完形填空任务的另一个优点是它可以生成更多样本来训练模型。假设一个长度为
$ n $ 的序列,传统的序列预测会产生 $ n $ 个不同的样本用于训练,而BERT4Rec
可以在多个epoch
中获得 $ C_n^k $ 个样本(假设我们随机mask
$ k $ 个item
)。这允许我们训练更强大的双向representation
模型。测试阶段:如前所述,我们在训练和最终的序列推荐任务之间造成了不匹配
mismatch
,因为完形填空任务的目标是预测当前的masked item
,而序列推荐任务的目标是预测未来。为了解决这个问题,我们将特殊token
"[mask]"
附加到用户行为序列的末尾,然后根据该token
的final hidden representation
来预测next item
。为了更好地匹配序列推荐任务(即,预测
next item
),在训练期间我们还生成mask
输入序列中最后一个item
的样本。它的作用类似于用于序列推荐的微调,可以进一步提高推荐性能。mask
输入序列中最后一个item
的样本是否可以给予更大的样本权重?这样可以让模型更focus
这类样本,从而缓解训练阶段和测试阶段不匹配的问题。或者直接使用domain adaption
方法。因为机器学习有一个核心假设:训练样本和测试样本的分布要保持一致。
22.1.5 讨论
我们讨论我们的模型与之前相关工作的联系。
SASRec
:显然,SASRec
是我们的BERT4Rec
的从左到右的单向版本,具有single head attention
以及causal attention mask
。不同的架构导致不同的训练方法。
SASRec
预测序列中每个位置的next item
,而BERT4Rec
使用完形填空目标来预测序列中的masked item
。CBOW& SG
:另一个非常相似的工作是Continuous Bag-of- Word: CBOW
和Skip-Gram: SG
。CBOW
使用target word
上下文中所有的词向量(同时使用左侧和右侧)的均值来预测target word
。它可以视为BERT4Rec
的一个简化案例:如果我们在BERT4Rec
中使用一个self-attention layer
、对所有item
使用均匀的注意力权重、取消共享的item embedding
、移除positional embedding
、并且仅mask center item
,那么我们的BERT4Rec
就变成了CBOW
。- 与
CBOW
类似,SG
也可以看作是BERT4Rec
在化简之后的、类似的简化案例(除了保留一个item
之外,mask
所有其它item
)。
从这个角度来看,完形填空可以看作是
CBOW
和SG
目标的通用形式。此外,
CBOW
使用简单的聚合操作来建模单词序列,因为它的目标是学习良好的word representation
,而不是sentence representation
。相反,我们寻求学习一个强大的行为序列representation
模型(即,本文中的深度自注意力网络)来进行推荐。BERT
:虽然我们的BERT4Rec
受到NLP
中的BERT
的启发,但是它仍然与BERT
有几个不同之处:- 最关键的区别是:
BERT4Rec
是用于序列推荐的端到端模型,而BERT
是用于sentence representation
的预训练模型。BERT
利用大规模的、任务无关的语料库为各种文本序列任务训练sentence representation
模型,因为这些任务共享相同的、关于语言的背景知识。然而,这个假设在推荐任务中并不成立。因此,我们针对不同的序列推荐数据集,端到端地训练BERT4Rec
。 - 与
BERT
不同,我们移除了next sentence loss
和segment embedding
,因为在序列推荐任务中,BERT4Rec
仅将用户的历史行为建模为一个序列。
- 最关键的区别是:
未来方向:
- 将丰富的
item
特征(如商品的类别和价格、电影的演员表)引入到BERT4Rec
中,而不仅仅是建模item ID
。 - 将用户组件引入到模型中,以便在用户有多个
session
时进行显式的用户建模。
另外,也可以将
SR-GNN
中的GNN
组件代替这里的item embedding
。- 将丰富的
22.2 实验
数据集:我们在四个真实世界的代表性数据集上评估所提出的模型,这些数据集在领域和稀疏性方面差异很大。
Amazon Beauty
:这是从Amazon.com
爬取的一系列商品评论数据集。人们根据Amazon
上的top level
商品类别将数据拆分为单独的数据集。在这项工作中,我们采用Beauty
类别。Steam
:这是从大型的在线视频游戏分发平台Steam
收集的数据集。MovieLens
:这是一个用于评估推荐算法的、流行的benchmark
数据集。在这项工作中,我们采用了两个版本,即MovieLens 1m: ML-1m
和MovieLens 20m: ML-20m
。
对于数据集预处理,我们遵循
SASRec
、FPMC
、Caser
中的常见做法。对于所有数据集,我们将所有数字评分、或者存在评论转换为数值为1
的隐式反馈(即,用户与item
存在交互)。此后,我们将交互记录按用户分组,并根据时间戳对这些交互记录进行排序,从而为每个用户构建交互序列。为了确保数据集的质量,按照惯例,我们仅保留至少存在五个反馈的用户。处理后的数据集的统计数据如下表所示。
任务设置:为了评估序列推荐模型,我们采用了
leave-one-out
评估(即,next item
推荐)任务,该任务在SASRec
、FPMC
、Caser
中已被广泛使用。对于每个用户,我们将行为序列的最后一个item
作为测试数据,将倒数第二个item
作为验证集,并利用剩余的item
进行训练。为了简单的、公平的评估,我们遵循
SASRec
、FPMC
、Caser
中的通用策略,将测试集中的每个ground truth item
与100
个随机采样的、用户未与之交互的negative item
进行配对。为了使采样可靠和具有代表性,这100
个negative item
根据流行度进行采样。因此,任务变成将这些negative item
与每个用户的ground truth item
进行排名。每个
ground truth item
独立地采样100
个negative item
,而不是所有ground truth item
共享相同的negative item
。评估指标:为了评估所有模型的排名,我们采用了多种评估指标,包括
Hit Ratio: HR
、Normalized Discounted Cumulative Gain: NDCG
、Mean Reciprocal Rank: MRR
。考虑到每个用户仅有一个ground truth item
,因此HR@k
等价于Recall@k
且与Precision@k
成正比,MRR
相当于Mean Average Precision: MAP
。在这项工作中,我们使用
$ k=1,5,10 $ 来报告HR
和NDCG
。对于所有这些指标,值越高则代表性能越好。baseline
:POP
:它是最简单的baseline
,根据item
的热门程度来排序,其中热门程度根据交互次数来判断。BPR-MF
:它使用pairwise ranking loss
来优化带隐式反馈的矩阵分解。NCF
:它使用MLP
而不是矩阵分解中的内积来建模user-item
交互。FPMC
:它通过将矩阵分解与一阶马尔科夫链相结合,从而捕获用户的通用口味general taste
以及序列行为。GRU4Rec
:它使用带ranking based loss
的GRU
来建模用户行为序列从而用于session-based
推荐。GRU4Rec+
:它是GRU4Rec
的改进版本,具有新的损失函数和新的采样策略。Caser
:它同时以水平卷积和垂直卷积两种方式来使用CNN
来建模高阶马尔科夫链,从而进行序列推荐。SASRec
:它使用从左到右的Transformer
语言模型来捕获用户的序列行为,并在序列推荐上实现了state-of-the-art
的性能。
配置:
对于
NCF
、GRU4Rec
、GRU4Rec+
、Caser
、SASRec
,我们使用相应作者提供的代码。对于BPR-MF
和FPMC
,我们使用TensorFlow
实现它们。对于所有模型中的通用超参数,我们考虑隐层维度
$ d\in \{16,32,64,128,256\} $ , $ l_2 $ 正则化系数范围 $ \{1,0.1,0.01,0.001,0.0001\} $ , $ \text{dropout rate}\in \{0,0.1,0.2,\cdots,0.9\} $ 。所有其它超参数(如
Caser
中的马尔科夫阶次)和初始化策略,要么遵循原始论文作者的推荐,要么根据验证集进行调优。我们报告每个baseline
在其最佳超参数设置下的结果。我们使用
TensorFlow
实现BERT4Rec
。所有参数都使用[−0.02, 0.02]
范围内的截断正态分布进行初始化。我们使用
Adam
训练模型,学习率为 $ 10^{-4} $ , $ \beta_1=0.9 $ , $ \beta_2=0.999 $ , $ l_2 $ 权重衰减为 $ 0.01 $ ,学习率线性衰减。当梯度的
$ l_2 $ 范数超过阈值 $ 5 $ 时,梯度会被裁剪。为了公平比较,我们设置层数
$ L=2 $ 和head
数量 $ h=2 $ ,并使用与SASRec
中相同的最大序列长度,即:对于ML-1m
和ML-20m
数据集, $ N=200 $ ;对于Beauty
和Steam
数据集, $ N=50 $ 。对于
head
的设置,我们根据经验将每个head
的维度设置为32
(如果 $ d\lt 32 $ ,则为single head
)。我们使用验证集调优
mask
比例 $ \rho $ ,结果各个数据集上的最佳比例为:Beauty
为 $ \rho=0.6 $ 、Steam
为 $ \rho=0.4 $ 、ML-1m
和ML-20m
为 $ \rho=0.2 $ 。所有模型都是在单个
NVIDIA GeForce GTX 1080 Ti GPU
上从零开始训练的而没有任何预训练,batch size = 256
。
22.2.1 整体性能比较
下表总结了所有模型在四个
benchmark
数据集上的最佳结果。最后一列是BERT4Rec
相对于最佳baseline
的提升。我们省略了NDCG@1
的结果,因为在我们的实验中它等于HR@1
。可以看到:非个性化
POP
方法在所有数据集上的性能最差,因为它没有使用历史行为记录来建模用户的个性化偏好。在所有
baseline
方法中,序列方法(如,FPMC
和GRU4Rec+
)在所有数据集上始终优于非序列方法(如,BPR-MF
和NCF
)。与BPR-MF
相比,FPMC
的主要改进在于它以序列的方式来建模用户的历史行为记录。这一观察结果验证了:考虑序列信息有利于提高推荐系统的性能。
在序列推荐
baseline
中,Caser
在所有数据集上都优于FPMC
,尤其是在稠密数据集ML-1m
上,这表明高阶马尔科夫链有利于序列推荐。然而,高阶马尔科夫链通常使用非常小的阶次 $ L $ ,因为它们对于阶次 $ L $ 不是很好地scalable
的。这导致Caser
的性能比GRU4Rec+
和SASRec
更差,尤其是在稀疏数据集上。此外,
SASRec
的性能明显优于GRU4Rec
和GRU4Rec+
,这表明self-attention
机制是一种更强大的序列推荐工具。根据结果,很显然
BERT4Rec
在所有方法中,在四个数据集上的所有指标都是最佳的。与最强的baseline
相比,它平均而言获得了7.24%
的HR@10
相对提升、11.03%
的NDCG@10
相对提升、11.46%
的MRR
相对提升。
问题一:收益是来自于双向自注意力模型还是来自于完形填空目标?
为了回答这个问题,我们尝试通过将完形填空任务限制为一次仅
mask
一个item
来隔离这两种因素的影响。通过这种方式,我们的BERT4Rec
(带有一个mask
)和SASRec
之间的主要区别在于:BERT4Rec
通过联合地调节jointly conditioning
左右上下文来预测target item
。注意,这里要求被
masked
的item
是随机的,不能固定为最后一个item
。如果固定地mask
最后一个item
,那么BERT4Rec
就等价于SASRec
。由于篇幅有限,我们在下表中报告了
Beauty
和ML-1m
的实验结果,其中 $ d=256 $ 。结果表明:带有一个mask
的BERT4Rec
在所有指标上都显著优于SASRec
。这证明了bidirectional representation
对于序列推荐的重要性。此外,最后两行表明完形填空目标也提高了性能。完形填空任务以及
mask
比例 $ \rho $ 的详细分析参考后面的超参数研究部分。问题二:双向模型为何、以及如何优于单向模型?
为了回答这个问题,我们试图通过在
Beauty
测试期间可视化the last 10 items
的平均注意力权重来揭示有意义的模式,如下图所示。由于篇幅有限,我们仅报告了不同层和不同head
的四个具有代表性的注意力热力图。从结果中可以看到:不同
head
的注意力不同。例如,在layer 1
中,head 1
倾向于关注左侧的item
,而head 2
更喜欢关注右侧的item
。不同层的注意力不同。显然,
layer 2
的注意力往往集中在更近more recent
的item
上。这是因为layer 2
直接连接到输出层,而recent item
在预测未来方面起着更重要的作用。另一个有趣的模式是:图
(a)
和(b)
中的head
也倾向于关注[mask]
(因为最后一个item
是被masked
的)。这可能是self-attention
将sequence-level state
传播到item level
的一种方式。最后也是最重要的一点,与单向模型只能关注左侧的
item
不同,BERT4Rec
中的item
倾向于同时关注两侧的item
。这表明双向对于用户行为序列建模是必不可少且有益的。
22.2.2 超参数研究
接下来我们检查了超参数的影响,包括隐层维度
$ d $ 、mask
比例 $ \rho $ 、最大序列长度 $ N $ 。在分析一个超参数时,我们将剩余的超参数固定在最佳设置。限于篇幅,这里仅报告NDCG@10
和HR@10
。隐层维度
$ d $ :下图显示了隐层维度 $ d $ 的变化(同时保持其它最佳超参数不变)如何影响模型的NDCG@10
和HR@10
指标,可以看到:- 最明显的观察是:每个模型的性能随着维度
$ d $ 的增加而趋于收敛。更大的隐层维度并不一定会带来更好的模型性能,尤其是在Beauty
和Steam
等稀疏数据集上。这可能是由于过拟合造成的。 - 在细节方面,
Caser
在四个数据集上的表现不稳定,这可能会限制其有用性usefulness
。self-attention based
方法(即,SASRec
,BERT4Rec
)在所有数据集上都取得了卓越的性能。 - 最后,我们的模型在所有数据集上始终优于所有其它
baseline
,即使在隐层维度 $ d $ 相对较小的时候。
考虑到我们的模型在
$ d\ge 64 $ 时取得了令人满意的性能,我们在下面的分析中仅报告 $ d=64 $ 的结果。- 最明显的观察是:每个模型的性能随着维度
mask
比例 $ \rho $ :如前所述,mask
比例 $ \rho $ 是模型训练中的关键因素,它直接影响损失函数。显然,mask
比例 $ \rho $ 不应该太小,否则不足以学习一个强大的模型;同时也不应该太大,否则模型很难训练,因为此时需要根据少量的上下文来猜测太多的masked item
。为了验证这一点,我们研究了mask
比例 $ \rho $ 如何影响不同数据集的推荐性能。下图展示了
mask
比例 $ \rho $ 从0.1
到0.9
之间变化的结果。- 考虑
$ \rho\gt0.6 $ 在所有数据集上的结果,此时出现了一个通用模式,即:模型性能随着 $ \rho $ 的增加而降低。 - 从前两列的结果中,很容易看出
$ \rho=0.2 $ 在所有数据集上的表现都优于 $ \rho = 0.1 $ 。
这些结果验证了我们上面所说的。
此外,我们观察到最优
$ \rho $ 高度依赖于数据集的序列长度:- 对于具有短序列长度的数据集(如
Beauty
和Steam
),在 $ \rho=0.6 $ (Beauty
) 和 $ \rho=0.4 $ (Steam
) 时获得最佳性能。 - 对于具有长序列长度的数据集(如
ML-1m
和ML-20m
),在 $ \rho=0.2 $ 时获得最佳性能。
这是合理的,因为与短序列数据集相比,长序列数据集中的大
$ \rho $ 意味着需要预测的item
更多。以ML-1m
和Beauty
为例, $ \rho=0.6 $ 意味着:- 对于
ML-1m
我们需要平均每个序列预测 $ 98=\lfloor 163.5\times 0.6\rfloor $ 个item
。 - 对于
Beauty
我们仅需要平均每个序列预测 $ 5=\lfloor 8.8\times 0.6\rfloor $ 个item
。
前者对于模型训练而言太难了。
注:下图的
x
轴文字有误,应该是Mask proportion
而不是Dimensionality
。- 考虑
最大序列长度
$ N $ :下表展示了Beauty
和ML-1m
数据集上不同的最大长度 $ N $ 对模型推荐性能和训练速度的影响。我们观察到:适当的最大长度
$ N $ 也高度依赖于数据集的平均序列长度:Beauty
更喜欢较小的 $ N=20 $ ,而ML-1m
在 $ N=200 $ 上实现最佳性能。这表明用户的行为受到短序列数据集上more recent items
的影响、受到长序列数据集上less recent items
的影响。这是因为
Beauty
数据集的平均序列长度很短,而ML-1m
数据集的平均序列长度很长。因此,二者的最佳 $ N $ 值对应于20
和200
。通常而言,模型不能一致地从较大的
$ N $ 中受益,因为较大的 $ N $ 往往会引入额外的信息和更多的噪音。然而,随着 $ N $ 的变大,我们的模型表现得非常稳定。这表明我们的模型可以处理包含噪音的历史记录中的informative items
。BERT4Rec
的一个可扩展性问题是:每层的计算复杂度为 $ O(n^2d) $ ,与序列长度 $ n $ 成二次方( $ n $ 可以小于最大长度 $ N $ )。幸运的是,下表中的结果表明,使用GPU
可以有效地并行化self-attention layer
。
22.2.3 消融研究
最后,我们对
BERT4Rec
的一些关键组件进行了消融实验,从而更好地了解它们的影响,包括positional embedding: PE
、position-wise feed-forward network: PFFN
、layer normalization: LN
、residual connection: RC
、dropout
、self-attention
的层数 $ L $ 、multi-head attention
的head
数量 $ h $ 。下表显示了我们的默认版本
$ L=2,h=2 $ 及其变体在所有四个数据集上的结果,其中维度 $ d=64 $ 并且其它超参数(如 $ \rho $ )保持在最佳设置。我们分别介绍每个变体并分析它们的作用:PE
:结果表明,移除positional embedding
会导致BERT4Rec
在长序列数据集(即ML-1m
和ML-20m
)上的性能急剧下降。如果没有
positional embedding
,每个item
$ v_i $ 的hidden representation
$ \mathbf{\vec h}_i^{(0)} $ 仅取决于item embedding
。此时,模型无法获得序列的顺序信息,例如模型对于不同位置的"[mask]"
,使用相同hidden representation
来预测不同的target item
(假设unmask
的item
保持不变) 。这使得模型有问题。这个问题在长序列数据集上更为严重,因为它们有更多的masked item
需要预测。PFFN
:结果表明,长序列数据集(如ML-20m
)从PFFN
中获益更多。这是合理的,因为PFFN
的目的是整合来自多个head
的信息。正如关于head
数量 $ h $ 的分析中所讨论的那样,这些来自多个head
的信息是长序列数据集所偏好的。LN, RC, Dropout
:引入这些组件主要是为了缓解过拟合。显然,它们在Beauty
等小型数据集上更有效。为了验证它们在大型数据集上的有效性,我们在 $ L=4 $ 层的ML-20m
上进行了实验。结果表明:当没有RC
时,NDCG@10
降低了约10%
(这个结果不在下表中)。层数
$ L $ :结果表明,堆叠Transformer layer
可以提高性能,尤其是在大型数据集(如ML-20m
)上。这验证了通过深度自注意力架构学习更复杂的item transition pattern
是有益的。在数据集Beauty
上, $ L=4 $ 的性能下降主要是由于过拟合引起的。head
数量 $ h $ :我们观察到长序列数据集(如ML-20m
)受益于较大的 $ h $ ,而短序列数据集(如Beauty
)更喜欢较小的 $ h $ 。这种现象与《Why Self-Attention? A Targeted Evaluation of Neural Machine Translation Architectures》
中的实验结果一致,即大 $ h $ 对于使用multi-head self-attention
捕获长距离依赖关系至关重要。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论