一、概述
名称:A Contextualized Temporal Attention Mechanism for Sequential Recommendation
作者:Jibang Wu, Renqin Cai, Hongning Wang
文献类型:会议论文 www2020
年份:2020年1月
源码网站:https://github.com/Charleo85/seqrec
二、主要解决问题
大多数顺序推荐系统的算法关注于对用户行为的结构,但是却忽略了时间和上下文的信息。作者认为用户过去的行为对现在行为的影响会随着时间和上下文发生变化。
=>挖掘用户历史行为中的temporal和context信息。
=>利用Contextualized Temporal Attention Mechanism来学习用户过去行为的权重(不仅关注行为本身,还关注其发生的时间和原因)。
三、解决思路
1、模型描述
用户空间U ,大小为U;物品空间V ,大小为V。
用户的行为序列C = { S 1 , S 2 , . . . , S U } \mathbf{C} = \{ \mathbf{S}^1, \mathbf{S}^2,..., \mathbf{S}^U\} C = { S 1 , S 2 , . . . , S U } ,其中S u = { ( t 1 u , s 1 u ) , ( t 2 u , s 2 u ) , . . . } \mathbf{S}^u = \{ (t^u_1,s^u_1), (t^u_2, s^u_2), ... \} S u = { ( t 1 u , s 1 u ) , ( t 2 u , s 2 u ) , . . . } ,t j u t^u_j t j u 表示时间戳,s j u s^u_j s j u 表示用户u所操作的物品。
模型共分为三个部分:content-based attention,temporal kernels和contextualized mixture。
输入 :原始输入包括窗口大小为L的用户历史记录{ ( t i , s i ) i = 1 L } \{(t_i,s_i)^L_{i=1}\} { ( t i , s i ) i = 1 L } 和当前需要推荐的时间戳t L + 1 t_{L+1} t L + 1 。输入序列的embedding表示:X = [ s 1 , . . . , s L ] ⋅ E i n p u t ∈ R L × d i n \mathbf{X} = [s_1, ..., s_L] \cdot E_{input} \in R^{L \times d_{in}} X = [ s 1 , . . . , s L ] ⋅ E i n p u t ∈ R L × d i n
同时将输入序列的时间信息使用时间戳差来表示:T = [ t L + 1 − t 1 , . . . , t L + 1 − t L ] ∈ R L × 1 \mathbf{T} = [t_{L+1} - t_1,...,t_{L+1} - t_L] \in R^{L \times 1} T = [ t L + 1 − t 1 , . . . , t L + 1 − t L ] ∈ R L × 1
三层模型可以表示为:α = M α ( X ) → β = M β ( T ) → γ = M γ ( X , β , α ) \mathbf{\alpha} = M^{\alpha}(\mathbf{X}) \rightarrow \mathbf{\beta} = M^{\beta}(\mathbf{T}) \rightarrow \mathbf{\gamma} = M^{\gamma}(\mathbf{X, \beta, \alpha}) α = M α ( X ) → β = M β ( T ) → γ = M γ ( X , β , α )
其中,M α M^{\alpha} M α 根据content X来计算每个输入的权重,输出权重序列α ∈ R L × 1 \alpha \in R^{L \times 1} α ∈ R L × 1 ;M β M^{\beta} M β 将时间信息T 通过K temporal kernels计算每个输入的temporal权重β ∈ R L × K \beta \in R^{L \times K} β ∈ R L × K ;M γ M^{\gamma} M γ 从X 中提取context信息,并结合前两个阶段获得的α \alpha α 和β \beta β 来计算得到最终的contextualized temporal权重γ ∈ R L × 1 \gamma \in R^{L \times 1} γ ∈ R L × 1 。
最终被推荐的物品的表示为:x ^ L + 1 = F o u t ( γ T ⋅ X ) ∈ R d o u t × 1 \hat{x}_{L+1} = F^{out} (\gamma ^T \cdot \mathbf{X}) \in R^{d_{out} \times 1} x ^ L + 1 = F o u t ( γ T ⋅ X ) ∈ R d o u t × 1
其中,F o u t F^{out} F o u t 是一个feed-forward层。
2、三阶段模型
α \alpha α 阶段:what is the action :
输入序列embedding表示X,经过d l d_l d l 个self-attentive encoder块(d h d_h d h 个heads,d a d_a d a 个隐藏单元)后得到H d l \mathbf{H}^{d_l} H d l 。如,输入状态H j \mathbf{H}^j H j 经过第j个self attention块的第i个head的输出为:z i j = A t t e n t i o n ( H j W i Q , H j W i K , H j W i V ) z^j_i = Attention(\mathbf{H}^j W^Q_i, \mathbf{H}^j W^K_i, \mathbf{H}^j W^V_i) z i j = A t t e n t i o n ( H j W i Q , H j W i K , H j W i V )
其中,W i Q , W i K , W i V ∈ R d a × d a / d h W^Q_i, W^K_i, W^V_i \in R^{d_a \times d_a / d_h} W i Q , W i K , W i V ∈ R d a × d a / d h ,A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q ⋅ K T d a / d h ) V Attention(\mathbf{Q,K,V}) = softmax(\frac{\mathbf{Q \cdot K^T}}{\sqrt{d_a/d_h}})\mathbf{V} A t t e n t i o n ( Q , K , V ) = s o f t m a x ( d a / d h Q ⋅ K T ) V
第j个self attention块中所有计算得到的head值z i d z^d_i z i d 拼接在一起投影得到:Z j = [ z 1 d , . . . , z d h d ] ⋅ W O Z^j = [z^d_1, ...,z^d_{d_h}] \cdot W^O Z j = [ z 1 d , . . . , z d h d ] ⋅ W O ,其中,W O ∈ R d a × d a W^O \in R^{d_a \times d_a} W O ∈ R d a × d a 。我们利用residue connection来得到第j个attention block的输出:H j + 1 = L N ( H j + F j ( Z j ) ) \mathbf{H}^{j+1} = LN(\mathbf{H}^j + F^j(Z^j)) H j + 1 = L N ( H j + F j ( Z j ) )
其中,F j F^j F j 是一个feed forward层,LN是Layer Normalization函数。
一般attention block到此为止(如BERT4Rec和SASRec)。因为本文中使用self-attention结构是为了对每个输入计算得到基于内容的权重估计,所有需要使用最后一层隐藏层状态H j + 1 H^{j+1} H j + 1 作为query且最后一个物品的输入embedding表示x L T x^T_L x L T 作为key再一次计算Scale Dot-Product :α = s o f t m a x ( ( H j + 1 W 0 Q ) ( x L W 0 K ) T d i n ) \alpha = softmax(\frac{(\mathbf{H}^{j+1} W^Q_0)(x_L W^K_0)^T}{\sqrt{d_{in}}}) α = s o f t m a x ( d i n ( H j + 1 W 0 Q ) ( x L W 0 K ) T )
β \beta β 阶段:when did it happen :
基于观察:用户随意浏览的物品对短期的影响会急剧下降,但是在长期来说仍有着重要的作用。用户仔细浏览过的物品对用户短期的兴趣有着重要的作用。
所以,文章提出了很多temporal kernels来建模这种时间变化,不同的kernel函数ϕ ( ⋅ ) : R L → R L \phi (\cdot): R^L \rightarrow R^L ϕ ( ⋅ ) : R L → R L 如下所示:
ϕ ( T ) = a e − T + b \phi(\mathbf{T}) = ae^{-\mathbf{T}} + b ϕ ( T ) = a e − T + b ,假设一个用户操作的影响会随着时间指数下降,但是永远不会消失。
ϕ ( T ) = − a l o g ( 1 + T ) + b \phi(\mathbf{T}) = -alog(1+\mathbf{T}) + b ϕ ( T ) = − a l o g ( 1 + T ) + b ,假设一个用户操作的影响会随着时间而减弱,最终可以忽略不计。
ϕ ( T ) = − a l T + b \phi(\mathbf{T}) = -al \mathbf{T} + b ϕ ( T ) = − a l T + b ,假设一个用户操作的影响会随着时间线性下降,之后的softmax操作会将某个时间段内的影响置为0。
ϕ ( T ) = 1 \phi(\mathbf{T}) = 1 ϕ ( T ) = 1 ,假设一个用户操作的影响不受时间影响。
因此,根据K个kernel函数集合{ ϕ ( ⋅ ) 1 , . . . , ϕ ( ⋅ ) K } \{\phi(\cdot)^1,...,\phi(\cdot)^K\} { ϕ ( ⋅ ) 1 , . . . , ϕ ( ⋅ ) K } ,我们可以将T 转为K个temporal权重集合:β = [ ϕ 1 ( T ) , . . . , ϕ K ( T ) ] \beta = [\phi^1(\mathbf{T}),...,\phi^K(\mathbf{T})] β = [ ϕ 1 ( T ) , . . . , ϕ K ( T ) ] ,作为下一阶段的输入。
γ \gamma γ 阶段:how did it happen :
这一阶段的目标是基于提取到的context信息融合前两个阶段获得的content和temporal信息。
使用Bidirectional RNN结构来获得context信息。从输入序列embedding表示X中,我们可以计算得到循环隐藏层的状态:C = B i − R N N ( X ) ⊕ C a t t r ∈ R L × d r \mathbf{C} = Bi-RNN(\mathbf{X}) ⊕ C_attr \in R^{L \times d_r} C = B i − R N N ( X ) ⊕ C a t t r ∈ R L × d r
其中,⊕是拼接操作,C a t t r C_attr C a t t r 是可选择的context特征(可以是特定推荐系统中每个行为的属性,表示行为发生时的上下文),本文中只使用了Bi-RNN的输出作为context特征。
行为i的context特征需要映射为一个长度为K的权重向量,每一个元素p i ( k ∣ c i ) p_i(k|c_i) p i ( k ∣ c i ) 都是这个行为经过ϕ k ( ⋅ ) \phi^k(\cdot) ϕ k ( ⋅ ) 后的结果,使用feed forwaed层F γ F^{\gamma} F γ 将它们映射到概率空间R K R^K R K ,然后经过softmax操作得到概率分布:P ( ⋅ ∣ C ) = s o f t m a x ( F γ ( C ) ) \mathbf{P(\cdot | C)} = softmax(F^{\gamma}(\mathbf{C})) P ( ⋅ ∣ C ) = s o f t m a x ( F γ ( C ) )
最后将context和temporal信息进行融合:β c = β ⋅ P ( ⋅ ∣ C ) γ = s o f t m a x ( α β c )
\mathbf{\beta ^ c = \beta \cdot P(\cdot | C)} \\
\gamma = softmax(\alpha \beta^c)
β c = β ⋅ P ( ⋅ ∣ C ) γ = s o f t m a x ( α β c )
3、参数学习
Loss Functions :
模型训练的损失函数:L N L L = − l o g e r i ∑ j ∈ N s e r j L_{NLL} = -log \frac{e^{r_i}}{\sum_{j \in N_s} e^{r_j}} L N L L = − l o g ∑ j ∈ N s e r j e r i
其中,最高相似分数集合{r_v}(v ∈ V v \in V v ∈ V ),对该集合进行负采样(按照流行度按比例采样)得到的样本集合N s ⊆ V N_s \subseteq V N s ⊆ V ,i为目标物品。
基于排序的指标(优化推荐列表的质量)Bayesian Personalized Ranking(BPR)loss:L B P R = − 1 N s ∑ j ∈ N s l o g σ ( r i − r j ) L_{BPR} = -\frac{1}{N_s}\sum_{j \in N_s} log \sigma(r_i - r_j) L B P R = − N s 1 j ∈ N s ∑ l o g σ ( r i − r j )
其中,σ ( x ) = 1 1 + e ( − x ) \sigma(x) = \frac{1}{1+e^(-x)} σ ( x ) = 1 + e ( − x ) 1
TOP1 Loss:L T O P 1 = 1 N s ∑ j ∈ N s σ ( r j − r i ) + σ ( r j 2 ) L_{TOP1} = \frac{1}{N_s} \sum{j \in N_s} \sigma(r_j - r_i) + \sigma(r^2_j) L T O P 1 = N s 1 ∑ j ∈ N s σ ( r j − r i ) + σ ( r j 2 )
Regularization:每经过一个feed forward层后都使用dropout避免过拟合,dropout率为0.2。
四、实验结果
1、使用的数据集
XING:job postings
https://github.com/recsyschallenge/2016/blob/master/TrainingDataset.md
UserBehavior Alibaba:
https://tianchi.aliyun.com/dataset/dataDetail?dataId=649
2、实验结果