知识框架
简介
SASRec(Self-Attentive Sequential Recommendation)是加州大学圣地亚哥分校于2018年提出的序列推荐模型
序列推荐模型
有以下几类:
(1)基于马尔可夫链:模型比较简单。对于用户行为丰富的数据集,效果好
(2)基于RNN:模型比较复杂。对于用户行为稀疏的数据集,效果好
(3)基于CNN:如Caser(将用户最近发生行为的L个item看作“image”,使用“卷积”)
已有工作的不足
已有的模型效果,受用户行为是否稀疏影响较大,且无法较好地捕捉长期记忆
解决方案
提出基于self-attention的序列推荐模型SASRec:
(1)可以捕捉长期记忆
(2)基于attention机制可以对比较相关的行为进行预测
符号表示
模型结构和Loss设计
模型结构
整体结构如下:
可以将上述结构分为四部分:Embedding Layer、Self Attention Block、Stacking Self-Attention Blocks,Prediction Layer
Embedding Layer
- 行为序列处理
(1)对于给定的行为序列,按照模型可承受的最大长度n做截断得到s = (s1; s2; : : : ; sn);
(2)当序列长度<n时,在序列左侧重复增加padding,paddding值是零向量,原序列padding后的长度和为n;
(3)序列中的每一个item通过embedding层得到的向量维度是d
- 位置向量
(1)学习“位置向量”,并和序列的item向量求和
(2)相比于“Attention is All Your Need”中固定“位置向量”,采用可学习的位置向量具有更好的效果
- 最终的embedding
如下图中的公式(1)所示
Self Attention Block
- Attention表示
引入标量d:避免Q、K内积过大,特别是高纬的时候
- Self-Attention layer
在RNN中,attention的Q、K、V分别设置为decoder的隐藏层、encoder的隐藏层、encoder的隐藏层,保证K=V。在self-attention中,保证Q=K=V。
在公式(2)的基础上,引入矩阵W,增加模型的学习能力。具体指:可以学习到不对称的交叉,如<query i, key j>、<query j, key i>,会产生不同的结果。
在计算Attention的过程中,为了防止信息泄漏,需要保证j>i时的Qi、Kj的内积是零向量
其中,
第i个Self Attention Block的输出:
Stacking Self Attention Blocks
采用多层self-attention block取得更好的效果
- 面临的问题
当网络变得更深的时候,暴露出一些问题:
(1)过拟合;
(2)梯度消失;
(3)增大模型复杂度,需要更多的训练时间
- 解决方案
对于(2),采用残差连接;对于(1)、(3)采用dropout、LayerNorm
1、残差连接
实现:将低layer的特征传播到高层。
说明:对于序列推荐,用户历史最近一次访问的行为对于预测next item起到关键作用。由于采用self-attention机制,最后一次访问的行为已经和历史行为关联起来,因而通过增加“残差连接”使得模型可以利用低layer的特征
2、LayerNorm
作用:稳定、加速NN训练
数学表达:
3、dropout
作用:解决“过拟合”问题
实现:
(1)训练阶段:以概率p随机舍弃神经元;
(2)测试阶段:使用所有的神经元
Prediction Layer
- item embedding
因为模型中已经进行了“非线性变换”,所以可以有效地解决“对称的item embedding”问题。
因而,可以用“共享的item embedding”,而且可以显著提升模型性能
目前,生成隐式的用户向量的两种方式:
(1)如MF、FPMC、Caser等;
(2)基于item的embedding得到,如GRU4Rec等
我们采用的方法:方式2。也尝试采用在最后一层插入一个隐式的用户embedding,但是发现增加后并没有提升效果(可能是模型已经考虑用户的行为了)
模型训练
根据用户行为序列长度进行截断/Padding,随机采样负样本,采用交叉熵作为损失函数
复杂度分析
空间复杂度:
时间复杂度:
,其中self-attention layer的时间复杂度是
讨论
本文的SASRec模型:可以退化到已有的模型(MC、FMC、FISM)
对于基于MC的序列推荐,在用户序列长度特别小的时候,有不错的表现。常用的序列长度要求L<5
模型效果
讨论的问题
问题一:SASRec比包含CNN/RNN在内的模型具有SOTA效果吗?
问题二:在SASRec中不同部分都是必不可少(有正向效果)的吗?
问题三:SASRec的训练难度、规模
问题四:attention学习到了位置、item属性信息了吗?
Baseline
有如下8个模型:
(1)POP:热门
(2)Bayesian Personalized Ranking(BPR)-MF:基于pairwise loss的矩阵分解
(3)FMC:结合一阶马尔可夫链
(4)FPMC:结合MF、一阶马尔可夫链
(5)Translation-based Recommendation (TransRec):SOTA的一阶序列推荐模型
(5)GRU4Rec:基于session、GRU的序列推荐
(6)GRU4Rec+:相比(5),更改了loss、采样方式
(7)Caser:基于CNN、高阶马尔可夫链的序列推荐
评估
根据上述8个模型的最优结果进行对比
离线:HR@K、NDCG@K,K取10
负采样:为了降低计算复杂度,随机采样top100的item作为副样本。从而可以将评价指标更改为:对于每个用户预测的负样本的list-wise loss
数据集
都是公开数据集
数据集 | 说明 | 数据集网址 |
Amazon | 从Amazon数据集中筛选出“Beauty”、“Games”两个类别的商品数据 | http://jmcauley.ucsd.edu/data/amazon/ |
Steam | 来自于Steam平台的数据 | https://cseweb.ucsd.edu/~jmcauley/datasets.html#steam_data |
MovieLens 1m | 包含100万用户 |
离线效果
- 问题一
结论:SASRec比包含CNN/RNN在内的模型具有SOTA效果;当d>=40时,SASRec具有更明显的效果
具体指标如下:
- 问题二
结论:在我们场景下,Multi-head的效果不佳,比如single-head,也许是因为d的数量偏小(Transformer的论文中的d=512)
具体指标如下:
- 问题三
结论:相比Caser、GRU4Rec+,SASRec的训练速度更快,收敛时间更短
具体指标如下:
而且,借助于GPU,可以实现基于几百行为序列长度的行为的高效训练
- 问题四
结论1:通过可视化,展现出self-attention机制可以实现自适应、position-aware、层次性:
(1)自适应:无论稀疏还是稠密数据集,都可以自适应地应对;
(2)position-aware:可以使得更关注于最近的行为;
(3)层次性:越高层的layer更关注于最近的行为。推测是因为第一层已经考虑了历史行为,之后层不需要过多关注于位置了
具体展示如下:
结论2:attention可以辨识出相似的item
代码实现
结尾
亲爱的读者朋友:感谢您在繁忙中驻足阅读本期内容!您的到来是对我们最大的支持❤️
正如古语所言:"当局者迷,旁观者清"。您独到的见解与客观评价,恰似一盏明灯💡,能帮助我们照亮内容盲区,让未来的创作更加贴近您的需求。
若此文给您带来启发或收获,不妨通过以下方式为彼此搭建一座桥梁: ✨ 点击右上角【点赞】图标,让好内容被更多人看见 ✨ 滑动屏幕【收藏】本篇,便于随时查阅回味 ✨ 在评论区留下您的真知灼见,让我们共同碰撞思维的火花
我始终秉持匠心精神,以键盘为犁铧深耕知识沃土💻,用每一次敲击传递专业价值,不断优化内容呈现形式,力求为您打造沉浸式的阅读盛宴📚。
有任何疑问或建议?评论区就是我们的连心桥!您的每一条留言我都将认真研读,并在24小时内回复解答📝。
愿我们携手同行,在知识的雨林中茁壮成长🌳,共享思想绽放的甘甜果实。下期相遇时,期待看到您智慧的评论与闪亮的点赞身影✨!
万分感谢🙏🙏您的点赞👍👍、收藏⭐🌟、评论💬🗯️、关注❤️💚~
自我介绍:一线互联网大厂资深算法研发(工作6年+),4年以上招聘面试官经验(一二面面试官,面试候选人400+),深谙岗位专业知识、技能雷达图,已累计辅导15+求职者顺利入职大中型互联网公司。熟练掌握大模型、NLP、搜索、推荐、数据挖掘算法和优化,提供面试辅导、专业知识入门到进阶辅导等定制化需求等服务,助力您顺利完成学习和求职之旅(有需要者可私信联系)
友友们,自己的知乎账号为“快乐星球”,定期更新技术文章,敬请关注!