在 CTR 预估中,从用户的行为序列中捕捉用户动态变化的兴趣一直是一个热门课题。然而现在大部分研究都集中在 Sequence 中 而不是 Session。阿里的同学观察到,每个 Session 中的用户行为都是高度同构的,而 Session 之间都是异构的。
基于这一发现,阿里的同学提出了一种新的 CTR 模型——深度会话兴趣网络(Deep Session Interest Network, DSIN)。该模型主要是基于用户的行为序列来构建多个 Session,利用带有带有偏置的 self-attention 来提取用户的在每个 Session 中兴趣,然后利用 Bi-LSTM 来建模用户兴趣的发展和演化,最后利用局部激活单元自适应的学习各种兴趣对目标 item 的影响。
1.Introduction
先来介绍一下 Sequence 和 Session 的概念。
Sequence 是指用户总的行为序列,而 Session 会考虑给定时间内发生的行为序列。简单来说,Sequence 是由多个 Session 组成的。(虽然之前就有 Session 的概念,但是这里作者强调了一下 Session 的重要性)
作者发现单个 Session 内的具有高度的同构性,而 Session 间则具有高度的异构性。下图为作者参考 Airbnb 那篇论文后基于 30 分钟的 gap 划分 Session 的结果:
我们可以看到该用户在 Session 1 是点击的都是裤子,Session 2 是戒指,Session 3 就变成了衣服,这反应用户兴趣的明确性(Session 内)和变化性(Session 间)。
受此启发,作者提出了 DSIn 模型来对用户的多重 Session 进行建模,建模步骤如下:
- 首先将用户的顺序行为自然的划分为多个 Session;
- 然后使用带有偏置的 Self-Attention 网络去编码每个 Session,self-attention 可以捕捉 Session 内部的关联,进而提取用户的兴趣;
- 接着利用 Bi-LSTM 来捕捉用户不同历史会话兴趣间的发展和演化;
- 最后利用局部激活单元来自适应的学习多种兴趣对目标 Item 的影响。
2.DSIN
具体来看下 DSIN 模型。
下图展示了 DSIN 模型的架构:
DSIN 的最上面的是一个 MLP 结构,其输入由两部分组成,一个是由 User Profile 和 Item Profile 的 Embedding 特征组成的;另一块基于用户行为提取到的特征.
基于用户行为提取到的特征从低到上分为四层,分别为:
- Session division layer:将用户的行为序列(sequence)划分为会话 session;
- Session interest extractor layer:抽取用户会话的兴趣;
- Session interest interacting layer:捕获会话兴趣之间的顺序关系;
- Session interest activating layer:利用局部激活单元自适应目标 Item。
接下来我们看具体内容。
2.1 Session division layer
首先是划分层,输入一段用户的行为序列,然后基于 30 分钟的时间间隔将用户的行为序列划分为多个 session,第 k 个 session 表达为
\mathbf{Q}_ k = [\mathbf{b}_ 1;...;\mathbf{b}_ i;...;\mathbf{b}_ T ] \in \mathbb{R}^{T\times d_ {model}}\ ,T 是该 session 所含行为的长度,
d_{model} 为行为 Embedding 后的长度。
2.2 Session interest extractor layer
同一 session 中的行为之间有着密切的联系,但其中也会包含一些用户随意行为带来的噪声。为了捕捉到同一 session 中行为之间的内在联系,减少不想管行为的影响,作者使用了带有偏置的多头自注意力机制来达到这一目的。
该层的架构如下图所示,从下往上看(multi-head attention 层到 add & norm 层少了一个箭头):
Bias Encoding:在 Transformer 中,self-attention 使用 positional encoding 来考虑 sequence 的顺序性。这里作者设计 Bias Encoding 来捕捉 session 的顺序性和表示空间中的偏置。定义如下:
\mathbf{BE}_{k,t,c} = \mathbf{w}_k^{K} + \mathbf{w}_t^{T} + \mathbf{w}_c^{C} \\
其中,
\mathbf{w}_k^{K} \in \mathbb{R}^K 表示第 k 个 session 的偏置向量;
\mathbf{w}_t^{T} \in \mathbb{R}^T 表示 session 中第 t 个行为(位置)的偏置向量;
\mathbf{w}_c^{C} \in \mathbb{R}^{d_{model}} 表示 Embedding 中第 c 个单元的偏置向量;
\mathbf{BE}_ {k,t,c} \in \mathbb{R}^{K\times T \times d_{model}} 。
所以用户行为 session 为:
\mathbf{Q} = \mathbf{Q} + \mathbf{BE} \\
Multi-head Self-attention:作者利用多头自注意力机制来捕获不同特征子空间对的关系。用户的第 k 个 session 为:
\mathbf{Q}_k = [\mathbf{Q}_{k1};...;\mathbf{Q}_{kh};...;\mathbf{Q}_{kH}] \\
其中,
\mathbf{Q}_{kh} \in \mathbb{R}^{T\times d_h} 为
\mathbf{Q}_{k} 的第 h 个 head,H 为 head 的数量,
d_h = d_{model}/h。
输出
\mathbf{head}_h 为:
\begin{aligned}
\text { head }_{h} &=\text { Attention }\left(\mathbf{Q}_{k h} \mathbf{W}^{Q}, \mathbf{Q}_{k h} \mathbf{W}^{K}, \mathbf{Q}_{k h} \mathbf{W}^{V}\right) \\
&=\operatorname{softmax}\left(\frac{\mathbf{Q}_{k h} \mathbf{W}^{Q} \mathbf{W}^{K^{T}} \mathbf{Q}_{k h}^{T}}{\sqrt{d_{\text {model }}}}\right) \mathbf{Q}_{k h} \mathbf{W}^{V}
\end{aligned} \\
其中,
\mathbf{W}^{Q}, \mathbf{W}^{K}, \mathbf{W}^{V} 为线性矩阵。
简单回顾下 self-attention 的原始公式,以帮助我们进行理解上面公式:
\text{Attention}(Q,K,V) = \frac{QK^T}{\sqrt{d_k}} V
然后将各个 head 的得到向量拼接到一起送入到前馈网络中:
\mathbf{I}_{k}^{Q}=\operatorname{FFN}\left(\text { Concat }\left(\text { head }_{1}, \ldots, \operatorname{head}_{H}\right) \mathbf{W}^{O}\right) \\
其中,FFN 为前馈网络,
\mathbf{W}^{O} 为线性矩阵。
此外,作者还进行了残差连接和逐层归一化。用户第 k 个 session 的兴趣
\mathbf{I}_k 计算如下:
\mathbf{I}_{k} = \text{Avg}(\mathbf{I}_{k}^{Q}) \\
其中,Avg 为平均池化层。
2.3 Session interest interacting layer
接下来作者利用 Bi-LSTM 来捕捉用户不同 Session 间的顺序关系,从而建模用户的兴趣变换。其架构如下图所示:
LSTM 公式如下:
\begin{aligned}
\mathbf{i}_{t} &=\sigma\left(\mathbf{W}_{x i} \mathbf{I}_{t}+\mathbf{W}_{h i} \mathbf{h}_{t-1}+\mathbf{W}_{c i} \mathbf{c}_{t-1}+\mathbf{b}_{i}\right) \\
\mathbf{f}_{t} &=\sigma\left(\mathbf{W}_{x f} \mathbf{I}_{t}+\mathbf{W}_{h f} \mathbf{h}_{t-1}+\mathbf{W}_{c f} \mathbf{c}_{t-1}+\mathbf{b}_{f}\right) \\
\mathbf{c}_{t} &=\mathbf{f}_{t} \mathbf{c}_{t-1}+\mathbf{i}_{t} \tanh \left(\mathbf{W}_{x c} \mathbf{I}_{t}+\mathbf{W}_{h c} \mathbf{h}_{t-1}+\mathbf{b}_{c}\right) \\
\mathbf{o}_{t} &=\sigma\left(\mathbf{W}_{x o} \mathbf{I}_{t}+\mathbf{W}_{h o} \mathbf{h}_{t-1}+\mathbf{W}_{c o} \mathbf{c}_{t}+\mathbf{b}_{o}\right) \\
\mathbf{h}_{t} &=\mathbf{o}_{t} \tanh \left(\mathbf{c}_{t}\right)
\end{aligned}
其中,
\sigma(\cdot) 为 logistic 函数,
\mathbf{i},\mathbf{f},\mathbf{o},\mathbf{c} 分别为输入门、遗忘门、输出门和单位向量。都与
\mathbf{I}_t 具有同样的大小。
隐藏层
\mathbf{H} 计算如下:
\mathbf{H}_t=\overrightarrow{\mathbf{h}_{ft}}\oplus \overleftarrow{\mathbf{h}_{bt}} \\
其中,
\overrightarrow{\mathbf{h}_{ft}} 表示 LSTM 的正向传播的隐藏层状态;
\overleftarrow{\mathbf{h}_{bt}} 表示 LSTM 的反向传播的隐藏层状态。
2.4 Session interest activating layer
与用户兴趣更相关的 Item 更可能被用户点击,所以作者使用注意力机制来刻画 item 和用户兴趣之间的权重。
其架构如下所示:
该层接受了 item 的特征,然后分别与兴趣抽取层的特征和兴趣演化层的特征分别进行自适应学习。
其目的在于,每接收一个 item,模型都会考虑用户的兴趣,并利用 item 的特征和用户的兴趣特征进行加权来控制用户多种兴趣的不同权重,放大相关兴趣,并缩小不相关的兴趣。
兴趣抽取层的特征为:
\begin{aligned}
a_{k}^{I} &=\frac{\left.\exp \left(\mathbf{I}_{k} \mathbf{W}^{I} \mathbf{X}^{I}\right)\right)}{\sum_{k}^{K} \exp \left(\mathbf{I}_{k} \mathbf{W}^{I} \mathbf{X}^{I}\right)} \\
\mathbf{U}^{I} &=\sum_{k}^{K} a_{k}^{I} \mathbf{I}_{k}
\end{aligned} \\
兴趣演化层的特征为:
\begin{aligned}
a_{k}^{I} &=\frac{\left.\exp \left(\mathbf{H}_{k} \mathbf{W}^{H} \mathbf{X}^{I}\right)\right)}{\sum_{k}^{K} \exp \left(\mathbf{H}_{k} \mathbf{W}^{H} \mathbf{X}^{I}\right)} \\
\mathbf{U}^{H} &=\sum_{k}^{K} a_{k}^{H} \mathbf{H}_{k}
\end{aligned} \\
3.Experiments
简单看一下实验部分,数据集是利用的阿里妈妈公开的广告数据集和自身的推荐数据集,评价指标为 AUC。
与不同模型的对比:
结果的可视化:
4.Conclusion
总结:作者首先强调了 session 的重要性,每个用户在单个 session 中是高度同构的,而不同 session 间则是异构的。在此基础上,作者提出了深度会话兴趣网络(Deep Session Interest Network,DSIN),首先将用户的行为序列划分为多个 session,然后利用带有偏置的自注意力机制来提取用户中每个 session 中的兴趣,接着利用 Bi-LSTM 捕捉不同 session 间顺序关系。最后利用本地激活单元来自适应学习用户对目标 item 的不同兴趣表示。DSIN 在两个工业数据集中都取得了不错的成绩。
5.Reference
- Feng Y, Lv F, Shen W, et al. Deep session interest network for click-through rate prediction[J]. arXiv preprint arXiv:1905.06482, 2019.