文章目录
介绍
现在有很多地方都需要推荐系统,比如网购平台、音乐平台、影视平台等等。一个应用如果能更准确地进行内容推送,那么自然用户的黏性会更强,有更强的竞争力。
但是现在出现了一个问题,我们以往做的一些工作都是基于用户历史记录进行的推荐,现在由于隐私政策的问题,有时候我们不能得到用户的长历史,我们能拿到手的只有用户当前在网页/app里面的行为,这个短历史我们就叫session。
举个例子,当你下载淘宝的软件之后,在没有登陆的情况下搜索你想要的东西,这个时候淘宝对你一无所知。你先点击了adidas的一件上衣,又点击了nike的一条裤子,然后又点击了李宁的一件上衣,这三个click就组成了你当前的一个session。我们要做的就是基于这三个点击对你下次想点击的东西进行预测,通过这个模型,我们可能会给你推荐安踏的衣服,或者adidas的另一版型的衣服。
总而言之,这个session-based方法可以在不侵犯用户隐私的情况下仍然进行有一定质量的推荐,值得我们进行研究。
模型介绍
从大体上来看,session-based recommendationo有两种分支,一种是把session看作一个sequence,利用诸如处理流数据的RNN模型得到隐层向量,并基于此搭建预测模型。
另一种则是基于图神经网络GNN的方法,通过构建有向图,利用GNN的方法学习表达向量,基于此进行预测。
今天要介绍的两个都是属于第一类的模型
NARM
每一个商品实际上都可以用一个id进行标识,这个和NLP任务里面把每一个单词都转化成id的思路是一样的。那么类似的,我们也可以有每一个商品的embedding,以此为基础把数据喂到RNN里面。
这个模型其实很简单,编码上分为两部分,Global encoder 和 Local Encoder。
global encoder
通过我们上面提到的与NLP任务类似的地方,我们这里为了方便理解可以把这个session看作一句话的等价,我们先通过word2id把商品转化为了id,得到了他们的embedding,然后把他们送进RNN里面。
在这篇文章里,作者使用的是GRU。
说起来fancy,但是这个global encoder得到的第一部分编码实际上就是RNN最后的隐层向量而已。
c t g = h t c_t^g=h_t ctg=ht
local encoder
这个地方使用到了attention。
对于session里面的每一个商品,他的attention权重是:
α t j = v T σ ( A 1 h t + A 2 h j ) \alpha_{tj} = v^T\sigma(A_1h_t + A_2h_j) αtj=vTσ(A1ht+A2hj)
这里 A 1 , A 2 , v A_1,A_2,v A1,A2,v都是参数, h t h_t ht表示最后一个隐层,实际上就是刚才提的global encoder得到的东西,而 h j h_j