本文为阿里DIN系列方法的简单总结,这里将会总结DIN系列文章的创新之处,以及相应的方法。DIN提出的原因我们在base model里面介绍。
1. Base Model
base model也就是在DIN提出之前常用的方式,包括FM系列也是。base model主要由两部分组成,embedding和MLP。首先通过embedding layer将原始特征转换成固定长度的embedding向量,然后进行特征组合也好,DNN特征提取也好,经过这些之后最后预测点击率。这里存在的一个不足之处就是,我们对于相同的特征在预测不同的target item的时候,这些特征都是一样的,但是用户的兴趣是多样的,因此用户行为序列中对不同item target起的作用应该是不同的。
2. DIN
如图所示为DIN的结构图,主要使用用户画像,candidate特征,用户行为序列和上下文特征作为输入。
- 改进点1,主要是在网络中加入了注意力机制,用candidate和用户序列中的item做交互来得到注意力得分,从而进行加权使得与candidate相关的item的权重更大,与candidate不相关的权重更小。从而使得不同的candidate与相同用户序列特征得到的embedding是变化的。
- Mini-batch Aware Regularization:为了防止过拟合,我们通常会采用L1,L2等正则项方式,但是以L2正则为例,L2正则项是不区分样本的,每一个mini-batch训练后都要更新所有参数,计算开销很大,因此本文提出每次mini-batch中只更新在样本中出现的特征参数。L2可以被近似为下式,具体推导方案可详见论文。其中
表示所有样本中第
维输入特征不为0的次数,
表示第
个mini-batch中是否出现第
维特征不为0,取值为0或1。
- DICE:作者认为PReLU,ReLU这类就好函数的突变点都在0,且固定不变,这对于输入分布在不断变化的训练数据是不适用的,因此引入了类似于BN的均值和方差来重新设计了DICE,公式如下,在测试阶段,均值和方差的确定和BN一样也是利用之前训练时计算的移动平均值。引入了样本分布的均值和方差,这样就可以适应不同分布的数据了。
3. DIEN
在DIN中,模型考虑了用户序列中不同item对不同candidate的权重应该是不同的,但是他没考虑到用户的兴趣是不断变化的,用户的近期的点击或转化行为更加能反应他的兴趣,而一些旧的行为作用就会弱一些。因此本文的作者提出了DIEN。
基于上述问题,作者提出了DIEN来发掘用户的兴趣:
- 兴趣提取层:RNN在序列数据中有较为广泛的应用,本文利用GRU从用户的历史序列中挖掘历史点击行为中的依赖关系。并且设计一个损失函数,利用用户下一个行为来监督学习当前的兴趣,从而更有效的挖掘用户的兴趣信息。
- 兴趣演化层:用户的兴趣是多变的,在不同的时间段可能有不同的兴趣,并且可能与很久之前的兴趣有关联。因此本文提出AUGRU,利用注意力机制和GRU来挖掘用户序列中与目标item强相关的行为。
3.1 兴趣提取层
兴趣提取层,即图中黄色部分,采用GRU来对用户行为序列数据进行特征提取,GRU相比于LSTM速度更快并且相对于传统RNN能缓解梯度消失问题。这里就不对GRU做过多介绍了。同时作者考虑了用户当前的兴趣和下一个行为的强相关性,从而设计了一个损失函数,公式如下,结构如图中的左部虚线框。其中h是当前GRU的输出,e为下一个行为的embedding
这里的[]表示内积将这部分损失和最终的损失合起来一起训练:
3.2 兴趣演化层
每个人的兴趣在不同的时间段是不同的,比如在夏天的时候对短袖更感兴趣,在冬天的时候对长袖更感兴趣,在旅游的时候可能对相机更感兴趣等等。兴趣演化层的优势:
- 兴趣演化模块可以为最终兴趣的表示提供更多的相关历史信息;
- 跟随兴趣演变趋势来预测目标商品的点击率会更好。
兴趣具备两大演变特点:
- 不同阶段用户的兴趣是不同的
- 不同兴趣的演变几乎是独立的,比如春夏秋冬的衣服的兴趣的演变和在不同学习阶段对书籍的兴趣演变是独立的,模型总体上只关心和target item相关的兴趣。
兴趣演化层,是在前面兴趣提取层之后,对每一层GRU的输出进行注意力机制的计算,注意力权重计算公式如下,其中
为target item的embedding,h表示兴趣提取层的GRU的输出,W为可学习权重。通过注意力机制从历史兴趣中得到和当前item强相关的兴趣行为,具体使用方式和GRU结合。
接着将注意力机制和GRU结合,用户对用户的兴趣演化进行建模。作者提出了三种不同的处理方式:
- AIGRU:将注意力机制作用于GRU的输入,将隐藏层的输出和注意力机制相乘,得到与target item强相关的兴趣作为输入。
- AGRU:将注意力机制的权重用于GRU的隐藏层,使得在隐藏层更新的时候关注那些和target item强相关的信息。
这里是标量相乘求和。
- AUGRU:将注意力机制作用于更新门,相比于标量,这样能考虑到不同维之间的关系。GRU中的其他部分不变。
4. DSIN
DIN和DIEN都是直接考虑一串行为序列的,但是它们都忽略了会话(session)这一概念,在一个session内用户行为是高度重构的,而session之间是异构的。这也比较好理解,举个极端点的例子,加入这个用户在一段时间里不是很活跃,可能在1月份的时候逛了淘宝,然后直到双十一才再次打开淘宝,有点击和购买行为,那么这两段时间中的行为之间其实会有很大差别。
DSIN的结构图如上图所示,它的改进点:
- 将用户行为序列分割为不同的会话,利用带偏置编码的self-attention对每个会话进行编码
- 用BiLSTM捕获不同历史会话兴趣的演变
- 设计局部激活单元考虑不同会话兴趣对target item的影响
4.1 Session Division Layer
将用户的行为序列S分割为多个会话Q,
,T表示会话中行为的个数,b表示会话Q中的行为。时间间隔大于30min的相邻行为之间会存在会话的分割。
4.2 Session Interest Extractor Layer
同一会话中的行为是高度相关的,但是用户有时候会有一些比较随意的行为,这些行为会导致我们对用户兴趣的建模存在偏差。为了准确捕捉用户兴趣,作者提出了改进版的自注意力机制。
4.2.1 Bias Encoding
自注意力机制对输入的位置进行编码从而考虑了序列的顺序位置关系。同时,为了捕捉表征中存在的偏差,在位置编码的基础上提出偏差编码
,BE表示第k个session中第t个item的embedding向量在第c个位置的偏置。相当于对于每个session中的每个item的embedding中的每个位置都加上了偏置,
,其中Q为session的表示。
4.2.2 multi-head self-attention
为了使用多头注意力机制,令
,其中
表示第h个头。输出的计算为下式:
其中
为embedding的维度。将多头注意力的输出拼接后输出到前馈神经网络中得到新的输出,如下式。
然后经过avg-pooling进行降维。上述的一系列操作有点类似transformer。
4.3 Session Interest Interacting Layer
从session中提取每个session的兴趣之后,利用BiLSTM提取session兴趣之间的顺序关系。利用正序和逆序的信息进行互补,更好的捕捉依赖关系。
4.4 Session Interest Activating Layer
这一层利用target item和session兴趣之间构建注意力机制,得到在session兴趣中与target item强相关的兴趣。
- 一方面,用self-attention得到的session兴趣与target item求注意力权重,从兴趣中发掘和target item强相关的兴趣。 另一方面,用BiLSTM的输出和target item求注意力权重,从混合了上下文信息,顺序关系的兴趣中发掘个target item 强相关的兴趣。这里类似于DIEN中的AUGRU,用于兴趣演化。
文献&code
paper: DIN:https://ojs.aaai.org/index.php/AAAI/article/view/4545 DIEN:https://dl.acm.org/doi/abs/10.1145/3219819.3219823 DSIN:https://arxiv.org/pdf/1905.06482.pdf code: DIN: https://github.com/zhougr1993/DeepInterestNetwork DIEN: https://github.com/mouna99/dien. DSIN: https://github.com/shenweichen/DSIN