阿里DIEN
摘要里面表示很多CTR模型都将用户历史行为的向量表示直接作为用户兴趣,没有对用户这些行为背后的隐兴趣进行建模;此外很少有工作考虑用户的兴趣的变化趋势。DIEN设计了兴趣抽取层从历史行为序列中捕获用户隐式兴趣,设计了兴趣进化层建模用户兴趣变化。
简介中,介绍前人工作多是关注不同特征域的特征交叉,很少关注用户兴趣表示,DIN使用attention机制来捕获用户不同兴趣和目标item的相关性,但是这些模型都是将历史行为序列直接当做用户兴趣,没有去挖掘这些行为序列背后的用户真正的兴趣,而且用户兴趣是变化的,捕获用户动态变化的兴趣也十分重要。 DIEN中有2个关键模块,一个是从用户显式行为序列中抽取用户隐式的兴趣,另一个是建模用户兴趣进化过程。在兴趣抽取层,DIEN使用GRU建模用户行为之间的依赖,提出了使用下一个行为来监督当前hidden state的学习的辅助loss,有额外监督的hidden state称为兴趣state,即用户的隐式兴趣。用户兴趣是多样化的,会导致兴趣飘逸现象:用户在相邻的行为这意图可能差异巨大,用户产生一个行为可能依赖于很久之前产生的一个历史行为,每个兴趣都有自己的进化过程。基于兴趣提取层抽取的兴趣序列,使用带attention update gate的GRU来建模用户的兴趣进化轨迹,计算兴趣state和目标item的相关性来加强相关兴趣的影响,降低不相关兴趣的影响。
在相关工作中,很多工作关注特征的交互,Wide&Deep和DeepFM结合低阶特征和高阶特征提升表达效果,PNN有个点积层捕获不同类别特征的交叉,这些模型没有明确的反映用户的兴趣。DIN使用attention来激活历史序列,但是没法捕获这些序列之间的依赖关系。TDSSM结合长期和短期的历史序列来提升推荐质量,DRAEM使用RNN来研究每个用户的动态表示,ATRank使用基于attention的序列框架建模不同的用户行为。
基线模型
四类特征,用户画像、用户行为、item(ad)特征、上下文特征,分别表示为,每个行为都是一个one-hot的向量表示,用户行为特征,其中表示有行为的商品总量,表示用户行为序列长度。
Embedding
每个特征域对应一个Embedding矩阵,例如用户行为序列Embedding矩阵,总共有个行为(商品),表示每个行为embedding的维度。对于指定用户,用户行为的Embedding矩阵,其他各个域类似。
MLP
先对行为序列做pooling操作,然后拼接到一起,作为MLP的输入
Loss
,
DIEN
Interest Extractor Layer
使用GRU来提取兴趣
,,表示隐层维度,表示输入维度,是GRU的输入,表示第个hidden state。
因为用户行为target item时通过最后一个兴趣触发的,因此能对最后一个兴趣state进行label监督,但是中间的兴趣状态没有相应的监督信号。DIEN兴趣提取层使用一个辅助的loss,用t+1的用户行为监督兴趣状态的学习,即用下一个真实的用户行为作为正例。同时从item集合(去除正例行为)中采样一个出来作为负例,有个行为Embedding 序列pair对\{ \mathbf e^i_b, \hat \mathbf e^i_b\},i = 1,2,...,N,其中表示点击的序列Embedding,\hat \mathbf e^i_b \in R^{T \times n_E}表示负采样的序列Embedding,是行为长度,是行为Embedding的维度。
Loss
辅助loss使得每一个hidden state 都能表示兴趣state
Interest Evolving Layer
用户的兴趣在随时间逐渐变化,兴趣在进化过程中有2个特点:
- 因为兴趣的多样性,兴趣可能会发生漂移,用户可能在一段时间内喜欢书籍,另外一段时间喜欢衣服。
- 兴趣互相影响,但是每个兴趣有自己的进化过程,例如对书籍的兴趣和对衣服的兴趣,DIEN仅关注进化过程中兴趣和target item的相关性。
使用和表示兴趣进化层的输入状态和隐层状态,兴趣进化层的输入对应兴趣提取层的隐层状态,,attention分数可以表示为 其中表示广告(target item)Embedding向量,,表示hidden的维度,表示广告Embedding的维度。
三种结合attention机制和GRU的方式
- GRU with attentional input (AIGRU) 直接用户attention分数(标量)乘以兴趣提取层的hidden state向量,这样不相关的兴趣因为attention分数小会减弱其相应的影响。但是效果不会好,因为即输入是零,也会改变GRU的hidden state,这样不相关的兴趣还是会影响兴趣进化过程。
- Attention based GRU(AGRU),使用attention分数替换GRU的更新门 \mathbf h_t^{'} = a_t * \mathbf h_{t-1}^{'} + (1-a_t) * \tilde \mathbf h_{t-1}^{'}
- GRU with attentional update gate (AUGRU)不替换更新gate,但是用attention分数改变更新gate
\tilde \mathbf u_{t}^{'} = a_t * \mathbf u_{t}^{'}
\mathbf h_t^{'} = (1 - \tilde \mathbf u_{t}^{'} ) \circ \mathbf h_{t-1}^{'} + (\tilde \mathbf u_{t}^{'}) \circ \tilde \mathbf h_{t-1}^{'}