DSINDeep_Session_Interest_Networkcenter_0">
推荐系统(十三)阿里深度兴趣网络(三):DSIN模型(Deep Session Interest Network)
推荐系统系列博客:
- 推荐系统(一)推荐系统整体概览
- 推荐系统(二)GBDT+LR模型
- 推荐系统(三)Factorization Machines(FM)
- 推荐系统(四)Field-aware Factorization Machines(FFM)
- 推荐系统(五)wide&deep
- 推荐系统(六)Deep & Cross Network(DCN)
- 推荐系统(七)xDeepFM模型
- 推荐系统(八)FNN模型(FM+MLP=FNN)
- 推荐系统(九)PNN模型(Product-based Neural Networks)
- 推荐系统(十)DeepFM模型
- 推荐系统(十一)阿里深度兴趣网络(一):DIN模型(Deep Interest Network)
- 推荐系统(十二)阿里深度兴趣网络(二):DIEN模型(Deep Interest Evolution Network)
写在前面:
这篇发表在IJCAI’2019S上的文章,实际上有点对不起标题,与阿里前两篇paper(DIN,DIEN)相比,DSIN是一篇典型的离线跑跑实验,发发paper(俗称灌水?)的论文,我的标题把它与DIN 、DIEN组成一个系列,甚至觉得这是对前两篇的不公,毕竟质量悬殊太大…个人对这篇论文的评价:估计写这篇paper的团队纯粹为了KPI,他们大概率根本部署到线上,以这篇paper所描述网络结构的复杂度,即使以阿里的工程能力,个人都觉得很难部署到线上,所以这篇paper只提到了在阿里真的数据集(记住是数据集)上做了评估,只字未提部署到淘宝的线上推荐服务中。这篇文章在工业界没有引起什么注意,我想原因也是这个。
本篇博客将会从以下几个方面介绍DSIN:
- 动机
- DSIN整体网络结构
- Session Division Layer
- Session Interest Extractor Layer
- Session Interest Interacting Layer
- Session Interest Activating Layer
- 总结
一、动机
DSIN的动机挺好的,无论是在DIN还是DIEN中,对于用户行为序列都没有引入session的概念,比如DIEN中直接用用户过去14天的点击序列,实际上这会导致两个问题:1. 序列长度过长,当序列长度达到数百个时,即使有attention的存在,效果也会受到一定影响。2. 跨session的序列item,用户点击的item存在突变,比如前一个session内点的都是电子产品相关的,后一个就是服饰。也就是说session与session间存在异构性,同一个session内的item存在同构性。
动机是非常好的立意点,失败(对于工业场景,对于发paper可以说是成功点)的地方在于为了发paper,各种transformer,双向LSTM堆起来,导致工业场景根本没法用。
DSIN_38">二、DSIN整体网络结构
DSIN" />
整体网络结构自从往上依次为:
- session division layer:用于把用户行为序列切分为一个个session,这里按照时间间隔大于30min来切分的。
- session interest extractor layer:用于提取用户session内的兴趣
- session interest interacting layer:用于学习session内用户兴趣的顺序关系
- session interest activating layer:和DIN、DIEN中一样,算一下target item和用户兴趣因向量之间的相关性当做attention分数。
三、Session Division Layer
这一层没什么,就是简单的把用户行为序列切分成多个session,session切分的依据是时间间隔大于30min。原文:The segmentation of users’ ses- sions exists between adjacent behaviors whose time interval is more than 30 minutes。需要注意的是,这里每个item都是embedding向量,比如session k,用公式表示为: Q k = [ b 1 , . . . , b T ] ∈ R T ∗ d m o d e l Q_k=[b_1,...,b_T] \in R^{T*d_{model}} Qk=[b1,...,bT]∈RT∗dmodel, T T T是session内行为item的个数, b i b_i bi为第 i i i个行为的embedding向量,embedding size为 d m o d e l d_{model} dmodel。
四、Session Interest Extractor Layer
这一层差点直接整个transformer过来,multi-head self-attention整起来,当然直接抄似乎又没什么创新点,要被审稿人喷啊,那好,把自注意力中的positional encoding魔改下,提出个Bias Encoding(BE),直接看公式吧:
B
E
(
k
,
t
,
c
)
=
W
k
K
+
W
t
T
+
W
c
C
(1)
BE_{(k,t,c)} = W^K_k + W^T_t + W^C_c \tag{1}
BE(k,t,c)=WkK+WtT+WcC(1)
W
k
K
W^K_k
WkK 表示第
k
k
k个session的bias vector,
W
t
T
W^T_t
WtT表示session内第
t
t
t个行为的bias vector,
W
c
C
W^C_c
WcC表示行为embedding向量中第
c
c
c个bit。所以,用户行为最终的embedding向量
Q
Q
Q也就变成了
Q
=
Q
+
B
E
Q = Q+BE
Q=Q+BE。
然后,套了一波Multi-head Self-attention,关于Multi-head Self-attention一直久闻其大名,但毕竟在推荐系统中用的还不错,所以也没有很细致的去探究,后面有时间一定补一篇关于Multi-head Self-attention的博客。
经过Multi-head Self-attention后,得到
I
k
Q
I_k^Q
IkQ,即用户第
k
k
k个session的向量(有
Q
Q
Q个item),因此还需要做个pooling,DSIN这里做的average pooling,即:
I
k
=
A
V
G
(
I
K
Q
)
(2)
I_k = AVG(I_K^Q) \tag{2}
Ik=AVG(IKQ)(2)
五、Session Interest Interacting Layer
这一层,直接套了个双向LSTM,没太搞明白套双向的目的,论文中也没有介绍,另外在DIEN中极力克制时间复杂度使用GRU的情况下,这篇DSIN竟然本质倒末又用回了LSTM,并且还是双向的!!!关于LSTM可以参见本人博客:LSTM(Long Short-Term Memory),我这里为了和论文符号保持一致,直接搬下论文的公式:
(
i
n
p
u
t
g
a
t
e
)
i
t
=
σ
(
W
x
i
I
t
+
W
h
i
h
t
−
1
+
W
c
i
c
t
−
1
+
b
i
)
(
f
o
r
g
e
t
g
a
t
e
)
f
t
=
σ
(
W
x
f
I
t
+
W
h
f
h
t
−
1
+
W
c
f
c
t
−
1
+
b
f
)
(
c
e
l
l
v
e
c
t
o
r
)
c
t
=
f
t
c
t
−
1
+
i
t
t
a
n
h
(
W
x
c
I
t
+
W
h
c
h
t
−
1
+
b
c
)
(
o
u
t
p
u
t
g
a
t
e
)
f
t
=
σ
(
W
x
o
I
t
+
W
h
o
h
t
−
1
+
W
c
o
c
t
−
1
+
b
f
)
h
t
=
o
t
t
a
n
h
(
c
t
)
(3)
\begin{aligned} (input\ gate)\ \ \ i_t &= \sigma(W_{xi}I_t + W_{hi}h_{t-1} + W_{ci}c_{t-1} + b_i) \\ (forget\ gate)\ \ \ f_t &= \sigma(W_{xf}I_t + W_{hf}h_{t-1} + W_{cf}c_{t-1} + b_f) \\ (cell\ vector)\ \ \ c_t &= f_tc_{t-1} + i_ttanh(W_{xc}I_t + W_{hc}h_{t-1} + b_c) \\ (output\ gate)\ \ \ f_t &= \sigma(W_{xo}I_t + W_{ho}h_{t-1} + W_{co}c_{t-1} + b_f) \\ h_t &= o_t tanh(c_t) \end{aligned} \tag{3}
(input gate) it(forget gate) ft(cell vector) ct(output gate) ftht=σ(WxiIt+Whiht−1+Wcict−1+bi)=σ(WxfIt+Whfht−1+Wcfct−1+bf)=ftct−1+ittanh(WxcIt+Whcht−1+bc)=σ(WxoIt+Whoht−1+Wcoct−1+bf)=ottanh(ct)(3)
六、Session Interest Activating Layer
这边直接照搬DIN中的attention,也就是用target item和抽取得到的用户兴趣直接算相似度当做attention score,DSIN这里做了一点改动,不仅用target item和Session Interest Interacting Layer得到的
H
k
H_k
Hk算相似度,也用target item和Session Interest Extractor Layer得到的
I
k
I_k
Ik算相似度,如下图中红色框起来的部分所示:
DSIN_attention" width="560" height="477" />
- target item和Session Interest Extractor Layer得到的 I k I_k Ik算相似度:
a k I = exp ( I k W I X I ) ∑ k K exp ( I k W I X I ) U I = ∑ k K a k I I k (4) \begin{aligned} a^I_k &= \frac{\exp(I_kW^IX^I)}{\sum_k^K\exp(I_kW^IX^I)} \\ U^I &= \sum_k^Ka^I_kI_k \end{aligned} \tag{4} akIUI=∑kKexp(IkWIXI)exp(IkWIXI)=k∑KakIIk(4)
- target item和Session Interest Interacting Layer得到的
H
k
H_k
Hk算相似度
a k H = exp ( H k W H X I ) ∑ k K exp ( H k W K X I ) U H = ∑ k K a k H H k (5) \begin{aligned} a^H_k &= \frac{\exp(H_kW^HX^I)}{\sum_k^K\exp(H_kW^KX^I)} \\ U^H &= \sum_k^Ka^H_kH_k \end{aligned} \tag{5} akHUH=∑kKexp(HkWKXI)exp(HkWHXI)=k∑KakHHk(5)
最终,把user profile、item profile的embedding向量与上面得到的 U I U^I UI和 U H U^H UH做一个concat,灌入MLP中。
七、总结
没什么好说的,灌水文一篇,375在招手…,难怪清华推荐会议列表中会把IJCAI降为B类…
参考文献
[1]: Feng Y, Lv F, Shen W, et al. Deep session interest network for click-through rate prediction[J]. arXiv preprint arXiv:1905.06482, 2019.