基于用户历史行为数据的广告推荐模型

今天我们来讲解三篇利用用户历史行为数据建模的广告推荐模型,相比于传统的广告推荐模型,他针对用户历史行为进行了更好的建模,部分模型甚至仔细考虑了用户行为之间的时间间隔信息。

第一篇主要参考了IJCAI 2018年的paper《A Brand-level Ranking System with the Customized Attention-GRU Model》。首先来说这个广告预测推荐的场景比较少见,即从品牌的角度来对用户的行为进行预测,输入是一个长度为n的三元组序列(user, brand, timestamp),预测未来某一个时间点用户是否会购买/点击某一个brand下面的商品。整个模型以GRU为基础模型。GRU的公式如下所示:
zm=σ(Wzxm+Uzsm1)
rm=σ(Wrxm+Ursm1)
sm=zmtanh(Whxm+Uh(rmxm1))+(1zm)sm1

所谓的attention方式,我感觉是作者强行把这篇paper往encoder-decoder架构上进行靠拢,即认为输入n的三元组序列就是sorce序列(x1,x2....xn),经过输入encoder变换会生成中间结果序列(h1,h2,.....hn),而输出就是1个单位长度的序列y1,即对应某一个brand是否会购买,其改进的attention机制公式如下:
α0=Attention(y0,h)
g0=j=1Lα0,jhj
s0=GRU(y0,g0)
o1=Softmax(Vso)
其中y0就是要检测的brand的表征形式。最后模型的损失函数为log损失,即一个简单的二分类问题,即用户是否会购买目标brand。
其实到这里,整个模型已经介绍完了,但是在GRU进行encoder处理的过程中,作者对传统的GRU进行了三处改进:

1 Combining the brand features and brand embedding to better represent the brand
也就是说把特征工程得到的向量和模型自适应学习的embedding向量相加作为brand的表征形式,即R(b)=Membedok+vkok是one-hot的形式,vk是brand的人工特征向量,Membed是brand的模型参数形式。而这个vk的生成挺有意思的,我这里着重讲一下,流程图如下所示:
基于用户历史行为数据的广告推荐模型
1 首先从对某个特定的类别角度对所有的item进行排序;
2 按照价格从高到低的顺序把所有的商品划分为7个level;
3 对于某一个特定的brand,其会在不同的level对应不同的商品,那么针对该brand在不同的level的item集合,会对每一个item集合进行8个维度的指标统计,这些指标如下所示:
基于用户历史行为数据的广告推荐模型
这样在经过处理之后,每一个item会对应人工特征工程的56维数据。

2 Considering different types of actions
因为用户针对某一个brand的行为可以分为:购买或者点击两类,针对这两类行为在使用GRU进行用户行为建模的时候,会针对不同的行为进行区别对待。这这里的处理方式十分简单,就是把步骤1生成的R(b)乘上一个参数矩阵,即进行空间的映射变化,方式如下:
R(b)=MclickR(b) if b is clicked
R(b)=MpurchaseR(b) if b is purchased
其中MpurchaseMclick的维度都是R5656,这两个矩阵属于模型的参数,会随着模型一起训练。

3 Integrating the time-gate to model time intervals between actions
这一点是最有意思的,因为用户点击或者购买brand的序列会有一个timestamp信息,这部分时间间隔信息也可以进行专门的编码,即通过time-gate的方式进行引入:
Tm=σ(Wtxm+σ(Qttm))
tm就是两个action之间的时间间隔,这里的单位是秒,最后对GRU的改变如下:
sm=zmTmtanh(Whxm+Uh(rmxm1))+(1zm)sm1

最后在对模型进行训练的时候,其损失函数如下:
Loss=i=1nyilog(p(R(b)))+(1yi)w(1p(R(b)))
可以发现和一般的交叉熵不一样,在负样本那里乘了一个w,这个w的取值范围是[0,1],是一个压缩系数。之所以这样做,是因为有一些正样本没有标注出来,被混在了负样本之间。

整个模型我认为还是有可以改进的地方,比方说他在建模的时候并没有考虑用户因素,即使对所有的brand进行统一建模。如果能把用户信息表征到模型之中,模型的性能也许还能提高,毕竟不同level的用户消费的brand的level也是不一样的。

第二篇参考了2018年的IJCAI的paper《Sequential Recommender System based on Hierarchical Attention Network》,他的目标是推荐场景,即根据用户的历史购买的item信息来预测用户未来会购买的item列表。整个模型结构图如下所示:
基于用户历史行为数据的广告推荐模型
其实整个模型还是比较简单的,就是一个双层attention机制的神经网络,其实他的任务描述的还是挺有意思的,给一个用户的1到t时刻的transactions序列信息,表征为L=S1,S2,S3....St,其中St代表了t时刻的用户transactions的item集合,我们需要预测该用户St+1时刻的交易信息。作者之所以使用two level的attention机制,是因为他综合考虑了用户的long-term和short-term信息,其中S1,S2,....St1可以看成是用户long-term的行为信息,St可以看成用户short-term的行为信息。首先作者先使用attention机制对long-term行为信息进行处理,公式如下:
h1,j=Relu(W1vj+b1)
αj=exp(uTh1,j)pLt1uexp(uTh1,p)
ut1long=jLt1uαjvj
当得到了目标用户long-term的表征ut1long之后,把其和short-term的商品再经过一个类似的attention结构,最后得到整体的用户表征uaim,接下来再把这个表征向量uaim和带预测的item vj求内积,即Rj=uaimvj,就能得到该用户对于该商品的预测信息。在进行损失函数构造的时候,该paper利用了parewise的思想,并不是去预测特定商品的绝对分数,而是对于不同商品之间的排序信息进行预测,其公式如下所示:
arg minθInσ(RiRj)+λuv||θuv||2+λa||θa||2

第三篇参考了2017年IJCAI的paper《What to Do Next: Modeling User Behaviors by Time-LSTM》,其实它比前两篇时间都早,是最早提出使用RNN系列模型来解决RS系统(推荐系统)的行为序列时间间隔不一致的问题,该问题如下所示:
基于用户历史行为数据的广告推荐模型
因此为了解决time interval的问题,作者在传统的LSTM的基础上增加了time gate,即既要对用户的long-term信息进行编码,又要对用户的short-term信息进行编码,综合考虑用户的长期偏好和最近的行为偏好。并提出了三种方案,首先我们来简单介绍一下基础的LSTM的公式:
im=σi(xmWxi+hm1Whi+wcicm1+bi)
fm=σf(xmWxf+hm1Whf+wcfcm1+bf)
cm=fmcm1+imσc(xmWxc+hm1Whc+bc)
om=σo(xmWxo+hm1Who+wcocm1+bo)
hm=omtanh(cm)

接下来,我们详细介绍一下三种引入了time gate的LSTM结构,其整体结构图如下所示:
基于用户历史行为数据的广告推荐模型
(我看这些图片比较头晕,所以就直接上公式了)

Time-LSTM 1
Tm=σt(xmWxt+σ(tmWtt)+bt)
cm=fmcm1+imTmσc(xmWxc+hm1Whc+bc)
om=σo(xmWxo+tmWto+hm1Who+wcocm1+bo)
Tm在其中的作用主要体现在两点:
1 一方面Tm可以对于输入信息进行过滤;
2 另一方面tm首先被存储在了Tm之中,然后该信息会被传递到cm中,接下来就会被一次传递到cm+1,cm+2....之中,因此tm会帮助对用户的长期兴趣进行建模。

Time-LSTM 2
在该改进的模型之中,增加了两个gate,分别是T1mT2m,它们的计算公式如下:
T1m=σt(xmWx1+σ(tmWt1)+b1)
s.t Wt1<=0
T2m=σt(xmWx2+σ(tmWt2)+b2)
之所以有Wt1<=0的限制,是因为为了保证当最近一次的tm比较小的时候Tm会输出比较大的值,而当tm比较大的时候Tm会输出比较小的值,也是为了把最近的tm信息进行编码。
zm=fmcm1+imT1mσc(xmWxc+hm1Whc+bc)
cm=fmcm1+imT2mσc(xmWxc+hm1Whc+bc)
om=σo(xmWxo+tmWto+hm1Who+wcozm+bo)
hm=omσh(zm)

Time-LSTM 3
这个其实和LSTM 2是非常相似的,只不过就是把忘记门拿掉了,公式如下:
zm=1imT1mcm1+imT1mσc(xmWxc+hm1Whc+bc)
cm=(1im)cm1+imT2mσc(xmWxc+hm1Whc+bc)