深度会话兴趣网络Deep Session Interest Network for Click-Through Rate Prediction,跟 DIN, DIEN 相比,最大的不同在于对用户的历史点击行为划分为不同session,对每个session使用Transformer学习session embedding,最后使用BiLSTM对session序列建模。
在推荐系统中,用户兴趣是十分广泛的,但在一个较短的时间内,用户的兴趣是集中的,我们称这段时间为一个Session。例如:把间隔30分钟以上的不同行为item划归成不同的Session。
模型结构
User Behaviors 部分
一共包括四层。
1、第一层是Session Division Layer是对用户的历史行为划分到不同session;
这一层将用户的行文进行切分,首先将用户的点击行为按照时间排序,判断每两个行为之间的时间间隔,前后的时间间隔大于30min,就进行切分。文章将间隔超过30分钟作为session的划分,比如将历史点击序列
S
\mathcal S
S 转换为session
Q
\mathcal Q
Q,第
k
k
k个session表示为:
Q
k
=
[
b
1
,
⋯
,
b
i
,
⋯
,
b
T
]
∈
R
T
×
d
m
o
d
e
l
Q_k =[b_1,\cdots,b_i,\cdots,b_T] \in R^{T\times d_{model}}
Qk=[b1,⋯,bi,⋯,bT]∈RT×dmodel
其中,
T
T
T是第
k
k
k个session的长度,
d
m
o
d
e
l
d_{model}
dmodel是输入item的embedding大小。
2、第二层是Session Interest Extractor Layer是学习session的表征;
在每一个session内,每个用户的行为是高度相关的。为了刻画相同session内行为间的相关性,DSIN使用了Bias Encoding。DSIN使用multi-head self-attention对每个session建模。为了刻画不同session间的顺序。
2.1 Bias Encoding
为了利用序列间的顺序关系,self-Attention机制将位置编码应用于输入的嵌入。此外,还需要捕获位于不同session的会话的顺序关系和偏差。所以,定义基于位置编码的偏差bias为:
B
E
(
k
,
t
,
c
)
=
w
k
K
+
w
t
T
+
w
c
C
\bold {BE}_{(k,t,c)} = \bold w_k^K + \bold w_t^T + \bold w_c^C
BE(k,t,c)=wkK+wtT+wcC
其中,
w
k
K
\bold w_k^K
wkK是session的bias,
w
t
T
\bold w_t^T
wtT是位置的bias,
w
c
C
\bold w_c^C
wcC是每个物品的bias。
入bias encoding后,用户的session表示为:
Q
=
Q
+
B
E
Q = Q +BE
Q=Q+BE
2.2 Multi-head Self-attention
在推荐系统中,用户的点击行为会受各种因素影响。多头自我注意机制(Multi-head Self-attention)可以捕获不同表示子空间中的关系。每个head的输出可以表示为:
head
h
=
Attention
(
Q
k
h
W
Q
,
Q
k
h
W
K
,
Q
k
h
W
V
)
=
softmax
(
Q
k
h
W
Q
W
K
Q
k
h
T
d
model
)
Q
k
h
W
V
\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} \mathbf{Q}_{k h}^{T}}{\sqrt{d_{\text {model }}}}\right) \mathbf{Q}_{k h} \mathbf{W}^{V} \end{aligned}
head h= Attention (QkhWQ,QkhWK,QkhWV)=softmax(dmodel QkhWQWKQkhT)QkhWV
其中,
Q
k
h
\mathbf{Q}_{k h}
Qkh 表示第 k 个 session的第 h 个 head。
然后将 head 的输出concat到一起,再接入一个FFN网络(全连接网络):
I
k
Q
=
F
F
N
(
C
o
n
c
a
t
(
h
e
a
d
1
,
⋯
,
h
e
a
d
H
)
W
O
)
\mathbf I_k^Q = FFN(Concat(head_1,\cdots,head_H)W^O)
IkQ=FFN(Concat(head1,⋯,headH)WO)
其中,
W
O
W^O
WO表示线性矩阵。
经过Multi-head self attention处理之后,每个session得到的结果仍然是
T
×
d
m
o
d
e
l
\mathbf T \times d_{model}
T×dmodel 大小,随后,经过一个avg pooling操作,将每个session兴趣转换成一个
d
m
o
d
e
l
d_{model}
dmodel 维向量
I
k
=
A
v
g
(
I
k
Q
)
\mathbf I_k = \mathbf {Avg}(\mathbf I_k^Q)
Ik=Avg(IkQ)
论文同时还依次进行残差连接和层归一化。
3、第三层是Session Interest Interacting Layer是学习session之间的演变;
使用双向LSTM建模session之间的演变。双向意味着存在向前和向后RNN,以及隐藏状态H的计算如下:
H
t
=
h
f
t
⃗
⊕
h
b
t
⃗
\mathbf H_t =\vec {\mathbf h_{ft}} \oplus \vec {\mathbf h_{bt}}
Ht=hft⊕hbt
上式中的两项分别表示前向的隐藏层状态和反向的隐藏层状态。
4、第四层是Session Interest Activating Layer是学习当前item和历史点击session的相关性。
这部分主要是通过Attention机制刻画Item和session之间的相关性。用户的session与目标物品越相近,越应该赋予更大的权重。使用注意力机制来刻画这种相关性:
a
k
H
=
exp
(
H
k
W
H
X
I
)
)
∑
k
K
exp
(
H
k
W
H
X
I
)
U
H
=
∑
k
K
a
k
H
H
k
\begin{aligned} a_{k}^{H} &=\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}
akHUH=∑kKexp(HkWHXI)exp(HkWHXI))=k∑KakHHk
其中
X
I
\mathbf X^I
XI是目标item的embedding
其他部分
最后,就是把四部分的向量:用户特征向量、待推荐物品向量、会话兴趣加权向量UI、带上下文信息的会话兴趣加权向量UH进行横向拼接,输入到全连接层中,得到输出。