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

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

背景

本文介绍一篇较早使用Self-Attention进行序列化推荐的文章,也是目前大多数序列化推荐算法非常重要的Baseline,最典型的场景可以参见标题,该篇文章的思路也是现在推荐系统岗位经常考的一篇,还不速速学习一波。

序列动态是许多当代推荐系统的一个重要特征,它试图根据用户最近执行的操作来捕捉用户活动的“上下文“。本文提出了一个基于self-attention的序列模型(SASRec),它让我们可以捕捉长期语义(如RNN),但是,使用注意机制,它的预测基于相对较少的动作(如MC)。在每一个时间步,SASRec都会从用户的行为历史中找出哪些项目是“相关的”,并使用它们来预测下一个项目。大量的实证研究表明,该方法在稀疏和密集的数据集上都优于各种最新的序列模型(包括基于MC/CNN/RNN的方法)。

此处我们直接介绍模型。

模型

v2-c003ce4d3a4d14a9171954c3975af3e5_b.jpg

方案描述

v2-a7a5dae61095a43ed1f4cb2629655f91_b.jpg

1. Embedding层

v2-6127cd6bfcdc00f007ba287f11c1f55f_b.jpg

A. Positional Embedding

v2-558fcc53330d91271fc2850a3998e704_b.jpg

2. Self-Attention Block

A.Self-Attention Layer

v2-4ad7a98ce285113021eade4349199c5f_b.jpg

C.Point-Wise Feed-Forward Network: 尽管self-attention能将之前item的emebdding使用自适应的权重进行集成,但仍然是一个先线性模型,为了加入非线性能力, 我们使用两层的DDN,

v2-bdfa1cac41b3f4aa676e81d54a72671d_b.jpg

3. Stacking Self-Attention Blocks

在第一个self-attention block之后,学习item的迁移可以学习更加复杂的item迁移,所以我们对self-attention block进行stacking,第b(b>1)的block可以用下面的形式进行定义:

v2-cdc40ee5705587460d39e19649625942_b.jpg

4. Prediction Layer

v2-873157dd4336dcbbd818227c7ced3f25_b.jpg

使用同质(homogeneous)商品embedding的一个潜在问题是,它们的内部产品不能代表不对称的商品转换。然而,我们的模型没有这个问题,因为它学习了一个非线性变换。例如,前馈网络可以很容易地实现同项嵌入的不对称性,经验上使用共享的商品embedding也可以大大提升模型的效果;

显示的用户建模:为了提供个性化的推荐,现有的方法常用两种方法,(1).学习显示的用户embedding表示用户的喜好;(2).考虑之前的行为并且引入隐式的用户embedding。此处使用并没有带来提升。

5. 网络训练

v2-684099a2a86837c0b3ad701ea2169710_b.jpg

方案复杂度分析

1. 空间复杂度

模型中学习的参数来自于self-attention.ffn以及layer normalization的参数,总的参数为:

v2-3d4d8db1c48964728a0c6830ecc4a71b_b.jpg

2. 时间复杂度

我们模型的计算复杂度主要在于self-attention layer和FFN网络,

v2-1cd0b2b09e9bc3fba57281ab76f2d478_b.jpg

里面最耗时间的还是self-attention layer, 不过这个可以进行并行化。

实验

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

  1. 是否SASRec比现有最好的模型(CNN/RNN)要好?
  2. 在SASRec框架中不同的成份的影响怎么样?
  3. SASRec的训练效率和可扩展性怎么样?
  4. attention的权重是否可以学习得到关于位置和商品属性的有意义的模式?

1. 推荐效果比较

v2-e789c62c7c2e998f0713341ebc43155f_b.jpg
  • SASRec在稀疏的和dense的数据集合熵比所有的baseline都要好, 获得了6.9%的Hit Rate提升以及9.6%的NDCG提升;

2. SASRec框架中不同成份的影响

v2-155ea54d12922a3d1aafcece005b5731_b.jpg
  • 删除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的训练效率和可扩展性

v2-b4a0692c6cf9b0a335dae79eba2ed723_b.jpg

v2-1a7f5f0f47c7ada0e2ccd22b23078584_b.jpg
  • SASRec是最快的;
  • 序列长度可以扩展至500左右.

小结

在本文中,作者提出了一个新的基于自我注意的序列模型SASRec。SASRec对整个用户序列进行建模(没有任何递归或卷积操作)。在稀疏和密集数据集上的大量实证结果表明,SASRec模型优于现在最优的基线,并且比基于CNN/RNN的方法快一个数量级。

参考文献

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

v2-925e2de030bde9cd20eae809e2a60b2e_b.jpg


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部