解决的问题
CTR预估在广告和推荐系统中都扮演者重要角色。在CTR预估中,如何从用户的行为序列中抽取出动态变化的用户兴趣是一大课题。然而现有的方法都忽视了用户行为序列的一大特性:用户行为序列是由多个session组成的,而每个session由行为的时间进行划分。我们发现用户在同一session内的行为是高度同质化的,而不同session间的行为是异质的。基于上述观察我们提出了Deep Session Interest Network (DSIN) 模型来利用用户行为序列的多个session。我们首先从每个session内用self-attention机制加bias encoding来抽取用户兴趣,然后利用双向LSTM来建模session间用户兴趣的演化和交互,最后我们利用局部激活单元来自适应地学习多个session兴趣对target item的影响。我们在广告和推荐的数据集上都做了实验,结果显示DSIN能够取得比SOTA方法更好的效果。
模型结构
Base Model
在介绍DSIN前,我们首先介绍Base model的特征,embedding,MLP和loss函数。
特征表示
我们在base model中利用三组特征:用户画像,物品画像和用户行为。每组由一些稀疏特征组成:用户画像包括年龄、性别等;物品画像包括卖家id,品牌id等;用户行为包含用户最近点击的item id
embedding
利用embedding技术,稀疏特征可以表示为E∈RM∗dmodelE \in R^{M * d_{model}}E∈RM∗dmodel,其中MMM是稀疏特征的数量,而dmodeld_{model}dmodel是embedding大小。我们的用户画像就可以表示为XU∈RNu∗dmodelX^U \in R^{N_u * d_{model}}XU∈RNu∗dmodel,物品向量表示为XI∈RNi∗dmodelX^I \in R^{N_i * d_{model}}XI∈RNi∗dmodel,用户行为可以表示为 S=[b1;...;bi;...;bN]∈RN∗dmodelS = [b_1; ...; b_i; ...; b_N] \in R^{N * d_{model}}S=[b1;...;bi;...;bN]∈RN∗dmodel,其中NNN是用户行为的条数,bib_ibi是第iii个行为的embedding
MLP
用户画像、物品画像和用户行为中的稀疏特征embedding会被拼接在一起喂给MLP,最后用一个softmax函数来计算用户对target item的点记录
loss函数
CTR预估常用的loss函数是负对数似然函数:
L=−1N∑(x,y)∈D(ylogp(x)+(1−y)log(1−p(x)))L = -\frac{1}{N} \sum_{(x, y) \in D} (ylog p(x) + (1-y)log(1-p(x)))L=−N1(x,y)∈D∑(ylogp(x)+(1−y)log(1−p(x)))
其中DDD是训练数据集,xxx是网络的输入,表示成[XU,XI,S][X^U, X^I, S][XU,XI,S],y∈{0,1}y \in \{0, 1\}y∈{0,1}表示用户是否点击了target item,p(⋅)p(\cdot)p(⋅)网络的最终输出,表示用户点击item的概率。
DSIN
如前所述,DSIN要解决的问题是抽取每个session中的用户兴趣,并且得到session兴趣间的时序关系。
DSIN在MLP之前有两个部分,一个部分是将用户画像和物品画像转换成embedding vector,另一部分是在建模用户行为,自下而上共有四层:1)session划分层将用户行为序列划分为多个session 2) session兴趣抽取层抽取用户的session兴趣 3)session兴趣交互层获取session间兴趣的序列关系 4)session兴趣激活层将局部激活单元应用到用户session兴趣和target item上。最后session兴趣激活层的输出和用户画像和物品画像的embedding拼接起来喂给MLP进行最终的预测。
session划分层
为了更加精准抓住用户的session兴趣,我们把用户行为序列SSS划分为session序列 QQQ,其中第kkk个session Qk=[b1;...bi;...;bT]∈RT∗dmodelQ_k = [b_1; ...b_i;...; b_T] \in R^{T * d_{model}}Qk=[b1;...bi;...;bT]∈RT∗dmodel,划分方法是相邻行为间的时间间隔大于30分钟。
session兴趣抽取层
我们假设同一个session里的行为是高度相关的。为了抓住这些行为中的内在联系,我们对每个session使用多头self-attention,同时我们还对self-attention做了一些调整。
- Bias Encoding:为了利用序列的时序性,我们引入了bias encoding BE∈RK∗T∗dmodelBE \in R^{K * T * d_{model}}BE∈RK∗T∗dmodel,具体计算方法如下:BEk,t,c=wkK+wtT+wcCBE_{k, t, c} = w_k^K + w_t^T + w_c^CBEk,t,c=wkK+wtT+wcC其中wK∈RKw^K \in R^KwK∈RK是session的bias vector,wT∈RTw^T \in R^TwT∈RT是session内的index,wC∈Rdmodelw^C \in R^{d_{model}}wC∈Rdmodel是行为embedding的unit position,在计算出bias encoding后,用户行为session QQQ就变成Q=Q+BEQ=Q+BEQ=Q+BE
确定Q后,我们对Q进行多头self-attention,attention的结果拼接起来,然后喂给一个前馈网络IkQ=FFN(Concat(head1,...,headH)WO)I_k^Q = FFN(Concat(head_1, ..., head_H)W^O)IkQ=FFN(Concat(head1,...,headH)WO)
在前馈网络中我们同样引入残差和layer normalization
session兴趣交互层
在session兴趣交互层,我们用双向LSTM处理session兴趣,兴趣交互层的输出为Ht=hft+hbtH_t = h_{ft} + h_{bt}Ht=hft+hbt
session兴趣激活层
用户session兴趣激活层对兴趣交互层的输出序列与target item进行attention
tbc