作者:一元 ,公众号:炼丹笔记

背景

本文介绍一篇较早使用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, 不过这个可以进行并行化。

实验

该次实验主要为了验证下面的四个问题:

  1. 是否SASRec比现有最好的模型(CNN/RNN)要好?
  2. 在SASRec框架中不同的成份的影响怎么样?
  3. SASRec的训练效率和可扩展性怎么样?
  4. 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的方法快一个数量级。

参考文献

  1. Self-Attentive Sequential Recommendation:cseweb.ucsd.edu/~jmcaul
  2. github.com/kang205/SASR

推荐算法炼丹笔记:序列化推荐算法SASRec相关推荐

  1. 推荐算法炼丹笔记:序列化推荐系统

    作者:一元 公众号:炼丹笔记 特约审稿:杰少 背景 序列推荐系统(SRS)不同于传统推荐系统(RSs)包括协同过滤和基于内容的过滤,SRSs试图理解和建模用户的连续行为.用户与物品之间的交互作用以及用 ...

  2. 推荐算法炼丹笔记:推荐系统采样评估指标及线上线下一致性问题

    本文对于推荐系统中的采样评估指标进行了讨论,内容略多, 还有一些数学推导, 有兴趣的可以去阅读文末给出的原始论文链接, 此处直接列出核心观点: 在评估推荐算法的效果时,能不采样就不采样! 除了AUC, ...

  3. 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?

    作者:一元, 公众号:炼丹笔记 可解释性和有效性是构建推荐系统的两大关键成份,之前的工作主要关注通过引入辅助信息来获得更好的推荐效果.但这些方法会存在下面的两个问题: 基于神经网络的embedding ...

  4. 推荐算法炼丹笔记:科学调参在模型优化中的意义

    作者:九羽 ,公众号:炼丹笔记 基于Embedding的推荐算法模型一直是近几年研究的热门,在各大国际会议期刊都能看到来自工业界研究与实践的成果.MF(Matrix Factorization)作为传 ...

  5. 推荐算法炼丹笔记:排序模型CTR点击率预估系列

    微信公众号:炼丹笔记 ​CTR点击率预估系列家谱 炼丹之前,先放一张CTR预估系列的家谱,让脉络更加清晰. (一)FiBiNET:结合特征重要性和双线性特征交互进行CTR预估 1.1 背景 本文发表在 ...

  6. 推荐算法炼丹笔记:CTR点击率预估系列入门手册

    ​CTR点击率预估系列家谱 炼丹之前,先放一张CTR预估系列的家谱,让脉络更加清晰. (一)FiBiNET:结合特征重要性和双线性特征交互进行CTR预估 1.1 背景 本文发表在RecSys 2019 ...

  7. 推荐算法炼丹笔记:非采样的负样本

    作者:一元,公众号:炼丹笔记 最近推荐相关的研究主要集中在探索神经网络的结构等,然后采用负采样对模型进行高效的学习.然而,这么做会导致有两方面的问题没有被考虑仔细: 负采样会带来较大的波动:基于采样的 ...

  8. 推荐算法炼丹笔记:序列化推荐算法Bert4Rec

    作者:一元 公众号:炼丹笔记 之前和海归博士朋友聊天,他说,这篇文章是他所有的复现算法中,处理序列最好的算法之一.原本以为Bert只常见于NLP中,本文我们一起详细地阅读学习一下如何使用Bert来做推 ...

  9. 推荐算法炼丹笔记:阿里序列化推荐算法ComiRec

    作者:十方 公众号:炼丹笔记 Controllable Multi-Interest Framework for Recommendation 1.ComiRec与众不同之处 该论文是阿里在2020年 ...

最新文章

  1. 2017 Android 面试题 [ 基础与细节 ]
  2. python 递归遍历二叉树
  3. React 简单实例 (React-router + webpack + Antd )
  4. LeetCode 68. 文本左右对齐(字符串逻辑题)
  5. 上百台linux的服务器互信,批量自动建立linux服务器之间的ssh互信
  6. dsp实现快速傅里叶的C语言程序,DSP-快速傅立叶变换(FFT)算法实验
  7. ubuntu 中怎么安装 jdk 7
  8. [python]用pywin32库实现鼠标键盘自动控制
  9. C#反射调用类的私有方法
  10. keil安装stm32系列
  11. 计算机网络-域名与IP地址详解
  12. CEVA-DSP构成
  13. 被封了?教你如何解封chatgpt账号,中英版都有
  14. UGUI的DrawCall和Rebuild
  15. [QT_016]Qt学习之QPlainTextEdit 、QTextEdit 、QTextBrowser
  16. 袪除疾病的心法(十三)财运篇
  17. 13. 均匀分布和指数分布
  18. python load 和loads 区别
  19. 【问题解决】kersa ModuleNotFoundError: No module named ‘keras_applications‘ kersa_vggface
  20. Git手写笔记(简单秒懂)详细讲解

热门文章

  1. 小米开源文件管理器MiCodeFileExplorer-源码研究(3)-使用最多的工具类Util
  2. Mac os x下配置nginx + php
  3. ctags对部分目录生成tags
  4. iPhone磁盘空间/剩余空间代码
  5. 自定义曲线_完美动力小课堂:AnimationCurve(动画曲线编辑) 如何使用?
  6. linux下的普通文件的属性,linux下文件目录和属性
  7. linux 的多进程运行机制,Linux 多进程-2
  8. 机器学习实践:onnx模型转为Tensorflow2的pb模型2020
  9. mxnet基础到提高(24)-C++-符号,变量读写
  10. C指针原理(18)-C指针基础