推荐算法炼丹笔记:序列化推荐算法SASRec
作者:一元 ,公众号:炼丹笔记
背景
本文介绍一篇较早使用Self-Attention进行序列化推荐的文章,也是目前大多数序列化推荐算法非常重要的Baseline,最典型的场景可以参见标题,该篇文章的思路也是现在推荐系统岗位经常考的一篇,还不速速学习一波。
序列动态是许多当代推荐系统的一个重要特征,它试图根据用户最近执行的操作来捕捉用户活动的“上下文“。本文提出了一个基于self-attention的序列模型(SASRec),它让我们可以捕捉长期语义(如RNN),但是,使用注意机制,它的预测基于相对较少的动作(如MC)。在每一个时间步,SASRec都会从用户的行为历史中找出哪些项目是“相关的”,并使用它们来预测下一个项目。大量的实证研究表明,该方法在稀疏和密集的数据集上都优于各种最新的序列模型(包括基于MC/CNN/RNN的方法)。
此处我们直接介绍模型。
模型
方案描述
1. Embedding层
A. Positional Embedding
2. Self-Attention Block
A.Self-Attention Layer
C.Point-Wise Feed-Forward Network: 尽管self-attention能将之前item的emebdding使用自适应的权重进行集成,但仍然是一个先线性模型,为了加入非线性能力, 我们使用两层的DDN,
3. Stacking Self-Attention Blocks
在第一个self-attention block之后,学习item的迁移可以学习更加复杂的item迁移,所以我们对self-attention block进行stacking,第b(b>1)的block可以用下面的形式进行定义:
4. Prediction Layer
使用同质(homogeneous)商品embedding的一个潜在问题是,它们的内部产品不能代表不对称的商品转换。然而,我们的模型没有这个问题,因为它学习了一个非线性变换。例如,前馈网络可以很容易地实现同项嵌入的不对称性,经验上使用共享的商品embedding也可以大大提升模型的效果;
显示的用户建模:为了提供个性化的推荐,现有的方法常用两种方法,(1).学习显示的用户embedding表示用户的喜好;(2).考虑之前的行为并且引入隐式的用户embedding。此处使用并没有带来提升。
5. 网络训练
方案复杂度分析
1. 空间复杂度
模型中学习的参数来自于self-attention.ffn以及layer normalization的参数,总的参数为:
2. 时间复杂度
我们模型的计算复杂度主要在于self-attention layer和FFN网络,
里面最耗时间的还是self-attention layer, 不过这个可以进行并行化。
实验
该次实验主要为了验证下面的四个问题:
- 是否SASRec比现有最好的模型(CNN/RNN)要好?
- 在SASRec框架中不同的成份的影响怎么样?
- SASRec的训练效率和可扩展性怎么样?
- attention的权重是否可以学习得到关于位置和商品属性的有意义的模式?
1. 推荐效果比较
- SASRec在稀疏的和dense的数据集合熵比所有的baseline都要好, 获得了6.9%的Hit Rate提升以及9.6%的NDCG提升;
2. SASRec框架中不同成份的影响
- 删除PE: 删除位置embedding ,在稀疏的数据集上,删除PE效果变好,但是在稠密的数据集上,删除PE的效果变差了。
- 不共享IE(Item Embedding): 使用共享的item embedding比不使用要好很多;
- 删除RC(Residual Connection):不实用残差连接,性能会变差非常多;
- 删除Dropout: dropout可以帮助模型,尤其是在稀疏的数据集上,Dropout的作用更加明显;
- blocks的个数:没有block的时候,效果最差,在dense数据集上,相比稀疏数据多一些block的效果好一些;
- Multi-head:在我们数据集上,single-head效果最好.
3. SASRec的训练效率和可扩展性
- SASRec是最快的;
- 序列长度可以扩展至500左右.
小结
在本文中,作者提出了一个新的基于自我注意的序列模型SASRec。SASRec对整个用户序列进行建模(没有任何递归或卷积操作)。在稀疏和密集数据集上的大量实证结果表明,SASRec模型优于现在最优的基线,并且比基于CNN/RNN的方法快一个数量级。
参考文献
- Self-Attentive Sequential Recommendation:http://cseweb.ucsd.edu/~jmcauley/pdfs/icdm18.pdf
- https://github.com/kang205/SASRec
推荐算法炼丹笔记:序列化推荐算法SASRec相关推荐
- 推荐算法炼丹笔记:序列化推荐系统
作者:一元 公众号:炼丹笔记 特约审稿:杰少 背景 序列推荐系统(SRS)不同于传统推荐系统(RSs)包括协同过滤和基于内容的过滤,SRSs试图理解和建模用户的连续行为.用户与物品之间的交互作用以及用 ...
- 推荐算法炼丹笔记:推荐系统采样评估指标及线上线下一致性问题
本文对于推荐系统中的采样评估指标进行了讨论,内容略多, 还有一些数学推导, 有兴趣的可以去阅读文末给出的原始论文链接, 此处直接列出核心观点: 在评估推荐算法的效果时,能不采样就不采样! 除了AUC, ...
- 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
作者:一元, 公众号:炼丹笔记 可解释性和有效性是构建推荐系统的两大关键成份,之前的工作主要关注通过引入辅助信息来获得更好的推荐效果.但这些方法会存在下面的两个问题: 基于神经网络的embedding ...
- 推荐算法炼丹笔记:科学调参在模型优化中的意义
作者:九羽 ,公众号:炼丹笔记 基于Embedding的推荐算法模型一直是近几年研究的热门,在各大国际会议期刊都能看到来自工业界研究与实践的成果.MF(Matrix Factorization)作为传 ...
- 推荐算法炼丹笔记:排序模型CTR点击率预估系列
微信公众号:炼丹笔记 CTR点击率预估系列家谱 炼丹之前,先放一张CTR预估系列的家谱,让脉络更加清晰. (一)FiBiNET:结合特征重要性和双线性特征交互进行CTR预估 1.1 背景 本文发表在 ...
- 推荐算法炼丹笔记:CTR点击率预估系列入门手册
CTR点击率预估系列家谱 炼丹之前,先放一张CTR预估系列的家谱,让脉络更加清晰. (一)FiBiNET:结合特征重要性和双线性特征交互进行CTR预估 1.1 背景 本文发表在RecSys 2019 ...
- 推荐算法炼丹笔记:非采样的负样本
作者:一元,公众号:炼丹笔记 最近推荐相关的研究主要集中在探索神经网络的结构等,然后采用负采样对模型进行高效的学习.然而,这么做会导致有两方面的问题没有被考虑仔细: 负采样会带来较大的波动:基于采样的 ...
- 推荐算法炼丹笔记:序列化推荐算法Bert4Rec
作者:一元 公众号:炼丹笔记 之前和海归博士朋友聊天,他说,这篇文章是他所有的复现算法中,处理序列最好的算法之一.原本以为Bert只常见于NLP中,本文我们一起详细地阅读学习一下如何使用Bert来做推 ...
- 推荐算法炼丹笔记:阿里序列化推荐算法ComiRec
作者:十方 公众号:炼丹笔记 Controllable Multi-Interest Framework for Recommendation 1.ComiRec与众不同之处 该论文是阿里在2020年 ...
最新文章
- 2017 Android 面试题 [ 基础与细节 ]
- python 递归遍历二叉树
- React 简单实例 (React-router + webpack + Antd )
- LeetCode 68. 文本左右对齐(字符串逻辑题)
- 上百台linux的服务器互信,批量自动建立linux服务器之间的ssh互信
- dsp实现快速傅里叶的C语言程序,DSP-快速傅立叶变换(FFT)算法实验
- ubuntu 中怎么安装 jdk 7
- [python]用pywin32库实现鼠标键盘自动控制
- C#反射调用类的私有方法
- keil安装stm32系列
- 计算机网络-域名与IP地址详解
- CEVA-DSP构成
- 被封了?教你如何解封chatgpt账号,中英版都有
- UGUI的DrawCall和Rebuild
- [QT_016]Qt学习之QPlainTextEdit 、QTextEdit 、QTextBrowser
- 袪除疾病的心法(十三)财运篇
- 13. 均匀分布和指数分布
- python load 和loads 区别
- 【问题解决】kersa ModuleNotFoundError: No module named ‘keras_applications‘ kersa_vggface
- Git手写笔记(简单秒懂)详细讲解
热门文章
- 小米开源文件管理器MiCodeFileExplorer-源码研究(3)-使用最多的工具类Util
- Mac os x下配置nginx + php
- ctags对部分目录生成tags
- iPhone磁盘空间/剩余空间代码
- 自定义曲线_完美动力小课堂:AnimationCurve(动画曲线编辑) 如何使用?
- linux下的普通文件的属性,linux下文件目录和属性
- linux 的多进程运行机制,Linux 多进程-2
- 机器学习实践:onnx模型转为Tensorflow2的pb模型2020
- mxnet基础到提高(24)-C++-符号,变量读写
- C指针原理(18)-C指针基础