序列推荐模型梳理(Sequential Recommendation)

阅读更多,欢迎关注公众号:论文收割机(paper_reader)
因为排版问题,很多图片和公式无法直接显示,欢迎关注我们的公众号点击目录来阅读原文。

序列推荐(sequential recommendation)在推荐系统里是非常重要的任务,它通过对用户(user)行为序列,比如购买商品(item)的序列(sequence)来建模,学到user 兴趣的变化,从而能够对用户下一个行为进行预测。序列推荐的模型,随着整个CS research领域的发展,也是一直在不断变化。从最开始的Markov chain,到后来的RNN,CNN模型,以及现在流行的transformer。每个时期的序列推荐模型,基本上也是对应着该时期用的比较多的NLP模型。本文梳理了序列推荐模型的发展变化,帮助大家理清楚序列推荐系统的设计思路。

 

Markov Chain


 

FPMC: 

Factorizing Personalized Markov Chains for Next-BasketRecommendation

 

Fossil: 

Fusing Similarity Models with Markov Chains for Sparse Sequential Recommendation

 

这是比较早期的时候,当时deep learning还没有开始应用,贝叶斯的方法也是讨论的很多。因此这两篇也是直接用Markov chain来建模购买行为之间的关联性。

FPMC这篇文章的研究的问题是从basket recommendation来入手的,通过历史数据构建商品之间的transition matrix。之后只需要通过建立好的transitionmatrix就可以预测用户下一个可能购买的item是什么了。

之后还有篇比较火的Fossil模型是通过high-order Markov chain来学到更多的信息,再结合相似性模型来解决序列推荐预测中的稀疏性问题。

 

RNN

GRU4Rec: 

Session-basedRecommendations with Recurrent Neural Networks

 

RRN: 

RecurrentRecommender Networks

 

HRNN: 

PersonalizingSession-based Recommendations with Hierarchical Recurrent Neural Networks

上面放的三篇文章举了几个用RNN来解决序列推荐问题的模型,用RNN来解决序列推荐问题的文章非常多。不过从现在的角度来看,最好用的还是GRU4Rec。用RNN模型来训练一个序列推荐模型应该是大家都能想到的思路了,当年的研究者开始解决这个问题的时候,也是发现RNN模型既能够学到这种类似Markov chain的transition信息,也能够通过一些其他的方式,比如LSTM来学到长短期的序列信息,或者是用gated RNN来增加model的学习能力。这一类的方法都是比较直接的,如果希望尝试解决一个序列的问题,那么RNN的模型应该就是第一个可以去尝试的思路。

 

例如GRU4Rec是通过Gated RNN来学到序列中item之间的关联性:

并且通过$z_t$这个gate embedding来控制选择信息输入,$z_t$为:

$\hat{h}_{t}$表示position t上的信息:

其中的$r_t$表示reset gate:

 

CNN


 

3D-CNN:

3D convolutional networks for session-based recommendation with content features

 

Caser:

Personalized top-n sequential recommendation via convolutional sequence embedding

 

HierTCN:

Hierarchical temporal convolutional networks for dynamic recommender systems

 

利用CNN来解决序列推荐的模型还是比较少的,首先是因为CNN只能model从局部到整体这种convolution信息,但是在序列推荐中我们更关心的是序列之间的关联性,所以CNN的模型没有那么自然的过渡。

但是也是有以上提到的这几种模型,也是分别从不同的角度来介绍了CNN在序列推荐中的可能性。相比RNN,CNN有个比较直接的优势是在于可以用来model整体的信息,比如在Caser这篇文章中就提到了union-level的概念:

如图中的item 序列所示所示。(a)表示的是point-level 的预测,也就是通过上一个或者前几个item,来预测下一个item。(b)(c)表示的是union-level的预测,也就是通过前几个item组合起来的信息,来预测下一个或者下几个item。在model这种信息上,CNN就显得具有天然的优势,因为RNN的模型,一般也还是着重于item的序列变化特征,而不是整体的影响。

比如Caser模型,通过将序列每个窗口中的items作为一个整体输入卷积层,得到一个embedding,再用这个embedding来预测下一个item或者后几个items的分类。而HierTCN是将TCN(temporal convolutional network)与GRU结合起来预测。这样就可以在序列的local使用CNN的卷积特性,而序列的整体仍然保持RNN的序列建模特性。

 

Attention/Transformer


 

SASRec:

Self-Attentive Sequential Recommendation

 

Bert4Rec:

BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer

 

SSE-PT:

SSE-PT: Sequential Recommendation Via Personalized Transformer

 

从NLP里的self-attention模型开始,大家就开始疯狂尝试把Transformer用在各个领域里,并且发现确实都能取得很不错效果。尤其这两年推荐系统领域也是变成了一个热点领域,大家也尝试了很多用Transformer来解决序列推荐问题的模型。

SASRec应该算是早期的尝试,虽然整个模型仍是与原始的transformer相似,但是还是有一些自己的insight在里面,而且代码也是开源的工作。Bert4Rec是基于NLP中最近特别火的Bert模型,考虑了双向建模序列。SSE-PT则是考虑了user embedding在序列建模中的重要性,并且提出了需要使用stochasticshared embeddings这一方法来提升performance。

Attention模型确实非常有用,除了这三篇之外,还能找到大约十篇的就在近一年来发表的使用self-attention模型来解决序列推荐问题。所以如果现在还想做序列推荐中的一些研究问题,那么self-attention模型应该是属于SOTA的baseline了。

 

总结


 

本文我们简单梳理了如何去建立模型来完成序列推荐的任务。总而言之,序列推荐中最关键的信息有两点,第一个是序列中item之间的关联性,第二个是user的personalization信息。除了这两点,还可以建立模型去学习结构信息,比如一些层级(hierarchy)信息,又或者是具体的时间(temporal)信息。能够把多种信息利用好,就能够完成序列推荐的任务。

 

更多相关的文章可以点击阅读原文访问我们的GitHub paper list:

https://github.com/DyGRec/Sequential-Recommender-System-Papers

 

阅读更多,欢迎关注公众号:论文收割机(paper_reader)
因为排版问题,很多图片和公式无法直接显示,欢迎关注我们的公众号点击目录来阅读原文。

往期文章:

 

  • 13
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值