session-based recommender systems(SBRSs)
目的:模拟用户对下一item的动态偏好
存在的问题:目前的SBRSs的大多数研究,仅基于长会话做推荐,忽略了短对话
短对话:不超多5个items
长对话:超过5个items
实际上,现实世界中的数据集中,短对话占很大的比例。现有的研究,通常在数据预处理时,将短会话过滤掉了,使得next-item prediction的挑战减少。因为短会话包含非常少的items,embedding的上下文信息很有限。
SBRSs的分类
- single-session based SBRSs
仅基于当前会话
=> GAP1: 可用的信息很非常有限,难以充分理解用户的偏好 - multi-session based SBRSs
- 联合用户的历史会话
GAP2: 忽略了与当前用户相似的其他用户的丰富信息 - 将来自其他用户的与当前会话相似的会话合并到当前会话的next-item prediction中
- Step1: 使用固定长度的one-hot向量或包含items的embeddings的均值向量表示当前会话
- Step2: 使用当前会话的表示作为key,从整个数据集中检索与当前会话相似的几个会话,作为预测当前会话next-items的参考
=> 由于过于简化会话表示以及key中有限的信息,经常会得到一些不相关会话
GAP3: 如何高效的找出那些真的与当前会话相关和有效的历史会话并将它们合并到当前短会话中用于next-item 预测
- 联合用户的历史会话
IN ter- SE ssion collavorative R ecommender neT work(INSERT)包含3个modules:
(1) local module – 从当前短会话中推断用户的偏好
(2) global module – 从其他会话中学习有用的先验知识,包括当前用户和其他用户的历史会话,设计了一个similar session retrieval network(SSRN)
(3) prediction module – 首先根据从global module中学习到的先验知识对local module中推断的偏好进行调整和优化,然后基于最佳偏好预测next-item
问题定义
U
=
{
u
1
,
.
.
.
,
u
n
}
U = \lbrace u_1, ..., u_n\rbrace
U={u1,...,un} – 表示数据集中的所有
n
n
n 个用户的集合
V
=
{
v
1
,
.
.
.
,
v
m
}
V = \lbrace v_1, ..., v_m\rbrace
V={v1,...,vm} – 表示数据集中的所有
m
m
m 个items的集合
S
u
=
{
s
1
u
,
.
.
.
,
s
∣
S
u
∣
u
}
S_u = \lbrace s_1^u, ..., s_{|S_u|}^u\rbrace
Su={s1u,...,s∣Su∣u} – 每个用户
u
∈
U
u\in U
u∈U的会话序列,按照发生的时间排序
u
u
u 的第
l
l
l 个会话
s
l
u
∈
S
u
s_l^u \in S_u
slu∈Su由items序列组成,
s
l
u
=
{
v
i
u
,
l
,
.
.
.
,
v
∣
S
l
u
∣
u
,
l
}
s_l^u = \lbrace v_i^{u, l}, ..., v_{|S_l^u|}^{u, l}\rbrace
slu={viu,l,...,v∣Slu∣u,l},按照发生时间排序
对于在当前用户 u c u_c uc 的当前会话 s l u c s_l^{u_c} sluc中预测的目标项 v t u c , l v_t^{u_c, l} vtuc,l
在当前会话 s l u c s_l^{u_c} sluc中出现在 v t u c , l v_t^{u_c, l} vtuc,l之前的所有项组成了会话期间的上下文 C i a = { v 1 u c , l , . . . , v t − 1 u c , l } C_{i a} = \lbrace v_1^{u_c, l}, ..., v_{t-1}^{u_c, l}\rbrace Cia={v1uc,l,...,vt−1uc,l}
给定 C i a C_{ia} Cia,SBRS旨在预测 s l u c s_l^{u_c} sluc 中的 v t u c , l v_t^{u_c, l} vtuc,l
训练了一个概率性分类器对每个候选项 v ∈ V v \in V v∈V 预测条件概率 p ( v ∣ { C i a , S } ) p(v|\lbrace C_{ia}, S\rbrace) p(v∣{Cia,S}),S包含了训练集中的所有历史会话,最终选择top-K个条件概率形成推荐列表
INTER-SESSION COLLABORATIVE RECOMMENDER NETWORK
关键的思想:利用从其他会话学习到的有用的先验知识,可以有效地约束当前短会话中给定的有限项的用户偏好表示的假设空间
三个modules:
(1)local module – 根据
C
i
a
C_{ia}
Cia推断得到的用户偏好表示
h
c
h_c
hc
p
(
v
∣
C
i
a
)
=
s
o
f
t
m
a
x
(
M
L
P
(
h
c
)
)
p(v|C_{ia})=softmax(MLP(h_c))
p(v∣Cia)=softmax(MLP(hc))
(2)global module – 基于S学习的先验知识的d维向量表示
β
(
S
)
\beta(S)
β(S)
基于特征调制函数
ψ
\psi
ψ 使用先验知识
β
(
S
)
\beta(S)
β(S)对
h
c
h_c
hc 进行调整和优化
ψ
(
h
c
,
S
)
=
h
c
+
β
(
S
)
\psi(h_c, S) = h_c + \beta(S)
ψ(hc,S)=hc+β(S)
重写条件概率函数
p
(
v
∣
C
i
a
,
S
)
=
s
o
f
t
m
a
x
(
M
L
P
(
ψ
(
h
c
,
S
)
)
)
p(v|C_{ia}, S)=softmax(MLP(\psi(h_c, S)))
p(v∣Cia,S)=softmax(MLP(ψ(hc,S)))
(3)prediction module
1. Local Module
Step1: 将
C
i
a
C{ia}
Cia 中的每个item
v
i
v_i
vi embed为d维向量表示
x
i
x_i
xi
Step2: 将
x
i
x_i
xi 输入到基于GRU的RNN中
h
i
=
G
R
U
(
x
i
,
h
i
−
1
)
h_i = GRU(x_i, h_{i-1})
hi=GRU(xi,hi−1)
第一个隐层状态
h
0
h_0
h0 使用零向量进行初始化
对于
C
i
a
C{ia}
Cia的每个item,我们将对应的GRU输出
h
i
h_i
hi看作在
i
i
i 处的用户偏好的embedding「因为GRUs可以自然的从
v
i
v_i
vi 和会话中在
v
i
v_i
vi 之前的items中提取的有用特征」「此外,由于循环模型是基于RNN的,所以当有新的items出现,the local
module可以生成用户偏好embeddings,并且保留了会话中的序列模式」
在本论文中,使用在
∣
C
i
a
∣
|C_{ia}|
∣Cia∣最近的用户偏好embedding作为用户的当前偏好,用于在
s
l
u
c
s_l^{u_c}
sluc 中进行next-item预测
h
c
=
h
∣
C
i
a
∣
h_c = h_{|C_{ia}|}
hc=h∣Cia∣
2. Global Module
- Current User‘s Prior Knowledge Learning Module(CUPKL)
- Other Users’ Prior Knowledge Learning Module(OUPKL)
目的:分别从当前用户的历史会话 H ( u c ) \mathbb{H}(u_c) H(uc)和与当前会话有相似用户偏好的其他用户会话 S ( u c ) \mathbb{S}(u_c) S(uc)中学习到先验知识,分别为 β ( H ( u c ) ) \beta(\mathbb{H}(u_c)) β(H(uc)) 和 β ( S ( u c ) ) \beta(\mathbb{S}(u_c)) β(S(uc))
在CUPKL和OUPKL中都包含了一个SSRN(similar session retrieval network)用于计算会话之间的相似度还有一个Session Encoder用于对候选相似会话中的用户偏好进行编码
2.1 Forming Candidate Similar Session Sets
问题:从整个数据集中检索相似的会话将产生不相关的会话以及很高的计算壁垒
解决:使用两个相似候选集用于模型检索:一个是
s
l
u
c
s_l^{u_c}
sluc 之前的
u
c
u_c
uc 会话的会话集:
H
(
u
c
)
=
{
s
1
u
c
,
.
.
.
,
s
l
−
1
u
c
}
\mathbb{H}(u_c) = \lbrace s_1^{u_c}, ..., s_{l-1}^{u_c}\rbrace
H(uc)={s1uc,...,sl−1uc}
另外一个是几个与当前用户有着相似偏好的用户的会话集
我们首先选择与
u
c
u_c
uc 最相似的用户作为与
u
c
u_c
uc 交互的大多数相同items交互的用户。在数学上,我们计算每个用户
u
τ
u_\tau
uτ和
u
c
u_c
uc之间的相似度:
s
i
m
u
(
u
τ
,
u
c
)
=
∣
Ω
τ
∩
Ω
c
∣
∣
Ω
τ
∣
×
∣
Ω
c
∣
sim_u(u_{\tau}, u_c) = \frac{|\Omega_\tau \cap \Omega_c|}{|\Omega_\tau| \times |\Omega_c|}
simu(uτ,uc)=∣Ωτ∣×∣Ωc∣∣Ωτ∩Ωc∣
其中
u
τ
∈
U
u_{\tau} \in U
uτ∈U,
τ
≠
c
\tau \neq c
τ=c,
Ω
τ
\Omega_\tau
Ωτ是与
u
τ
u_\tau
uτ 交互的items集
这样就形成了在训练集中与
u
c
u_c
uc最相似的N个用户的候选相似集
S
(
u
c
)
\mathbb{S}(u_c)
S(uc)
因此,由先验知识调整和优化后的用户偏好方程可改写为:
ψ
(
h
c
,
H
(
u
c
)
,
S
(
u
c
)
)
=
h
c
+
β
(
H
(
u
c
)
)
+
β
(
S
(
u
c
)
)
\psi(h_c, \mathbb{H}(u_c), \mathbb{S}(u_c)) = h_c + \beta(\mathbb{H}(u_c)) + \beta(\mathbb{S}(u_c))
ψ(hc,H(uc),S(uc))=hc+β(H(uc))+β(S(uc))
其中,
H
(
u
c
)
\mathbb{H}(u_c)
H(uc) 和
S
(
u
c
)
\mathbb{S}(u_c)
S(uc) 分别表示
u
c
u_c
uc 和他的相似用户的会话集
2.2 Similar Sessions Retrieval Network(SSRN)
为了找到和当前绘画相似的会话:
现有的研究:
- 使用固定长度的向量对会话进行编码
- 基于这些会话的向量表示计算这些会话的相似度
存在的问题:得到的会话之间的相似度可能不准确,因为会话encoder难以保留所有的会话信息
例如,现有的研究常常使用基于注意力的加权和或简单地使用item embeddings的均值来表示会话。忽略了item的位置和顺序
解决:直接使用由每个会话得到的item embeddings计算它们之间的最短距离,来衡量两个会话之间的相似度
previous work:使用Session Encoder编码后的向量表示计算相似度
This work:直接对item embedding之后的结果求最短距离来衡量两个会话之间的相似度
区别如下图所示:
给定了 H ( u c ) \mathbb{H}(u_c) H(uc) 或者 S ( u c ) \mathbb{S}(u_c) S(uc) 中的候选会话:
- 将每个item v i ∈ c s v_i \in cs vi∈cs 嵌入为一个d维embedding x i x_i xi
- 将它们依次送到RNN层,输出为 h 1 , h 2 , . . . h t h_1, h_2, ... h_t h1,h2,...ht 包含了对应item和它的前置items的信息
- 对于每个
h
i
h_i
hi,计算它们与
h
c
h_c
hc 的相似度
λ
i
,
c
\lambda_{i,c}
λi,c:
λ i , c = h i ⋅ h c T \lambda_{i,c} = h_i \cdot h_c^T λi,c=hi⋅hcT
其中, i ∈ [ 1 , t ] i \in[1, t] i∈[1,t] 是cs中的item位置 -
c
s
cs
cs 和
C
i
a
C_{ia}
Cia的相似度:取
c
s
cs
cs 中所有items和
C
i
a
C{ia}
Cia 之间的最大相似度,将其看作
h
c
h_c
hc 与候选相似会话
c
s
cs
cs 之间的最短距离:
s i m ( c s , C i a ) = max i ∈ [ 1 , t ] λ i , c sim(cs, C_{ia}) = \max \limits_{i \in [1,t]} \lambda {i, c} sim(cs,Cia)=i∈[1,t]maxλi,c
2.3 Session Encoder
一旦此候选会话
c
s
cs
cs 与
h
c
h_c
hc 相似,它的用户偏好就会作为当前会话的补充
在本论文中,使用基于注意力的session encoder来表示 c s cs cs 中的用户偏好:
- 对 c s cs cs 的用户 u c s u_{cs} ucs 嵌入为d维的用户偏好embedding θ c s \theta_{cs} θcs
- 计算它对
c
s
cs
cs 中的item
v
i
v_i
vi 的偏好:
α ( v i , u c s ) = 1 η x i ⋅ θ c s T \alpha(v_i, u_{cs}) = \frac{1}{\eta}x_i \cdot \theta_{cs}^T α(vi,ucs)=η1xi⋅θcsT
其中, η = ∑ j = 1 t x j ⋅ θ u c s T \eta = \sum_{j=1}^t x_j \cdot \theta_{u_{cs}}^T η=∑j=1txj⋅θucsT 是归一化因子 -
c
s
cs
cs 的用户偏好计算为:
w c s = ∑ i = 1 t α ( v i , u c s × x i ) w_{cs} = \sum\limits_{i=1}^t\alpha(v_i, u_{cs} \times x_i) wcs=i=1∑tα(vi,ucs×xi)
当
H
(
u
c
)
\mathbb{H}(u_c)
H(uc) 和
S
(
u
c
)
\mathbb{S}(u_c)
S(uc) 中的每个会话的会话相似度和用户偏好都准备好后,分别使用它们与
C
i
a
C{ia}
Cia 的相似度作为权重来聚合楼昂贵后续安吉中所有会话的用户偏好,计算先验知识的表示:
β
(
H
(
u
c
)
)
=
M
L
P
h
(
∑
c
s
∈
H
(
u
c
)
s
i
m
(
c
s
,
C
i
a
)
×
w
c
s
)
\beta(\mathbb{H}(u_c)) = MLP_h(\sum\limits_{cs\in\mathbb{H}(u_c)} sim(cs, C_{ia}) \times w_{cs})
β(H(uc))=MLPh(cs∈H(uc)∑sim(cs,Cia)×wcs)
β
(
S
(
u
c
)
)
=
M
L
P
h
(
∑
c
s
∈
S
(
u
c
)
s
i
m
(
c
s
,
C
i
a
)
×
w
c
s
)
\beta(\mathbb{S}(u_c)) = MLP_h(\sum\limits_{cs\in\mathbb{S}(u_c)} sim(cs, C_{ia}) \times w_{cs})
β(S(uc))=MLPh(cs∈S(uc)∑sim(cs,Cia)×wcs)
3. Prediction Module
预测函数:
p
(
v
∣
C
i
a
,
H
(
u
c
)
,
S
(
u
c
)
)
=
s
o
f
t
m
a
x
(
M
L
P
(
ψ
(
h
c
,
H
(
u
c
)
,
S
(
u
c
)
)
)
)
p(v | C_{ia}, \mathbb{H}(u_c), \mathbb{S}(u_c)) = softmax(MLP(\psi(h_c, \mathbb{H}(u_c), \mathbb{S}(u_c))))
p(v∣Cia,H(uc),S(uc))=softmax(MLP(ψ(hc,H(uc),S(uc))))
4. Optimization and Training
使用user-aware mini-batch梯度下降框架训练提出的模型:
对于每个mini-batch,我们在数据集中选择一批由不同用户生成的会话。对于batch中的每个用户
u
c
u_c
uc 生成用于训练的候选相似会话集,
H
(
u
c
)
\mathbb{H}(u_c)
H(uc) 和
S
(
u
c
)
\mathbb{S}(u_c)
S(uc)
将预测任务看作多类分类任务,并使用交叉熵损失来训练模型:
L
(
v
+
)
=
−
[
l
o
g
p
(
v
+
)
+
∑
v
i
∈
V
,
v
i
≠
v
+
l
o
g
(
1
−
p
(
v
i
)
)
]
\mathcal{L}(v^+) = -[logp(v^+) + \sum\limits_{v_i \in V, v_i \neq v^+} log(1-p(v_i))]
L(v+)=−[logp(v+)+vi∈V,vi=v+∑log(1−p(vi))]
其中,
v
+
v^+
v+ 是当前会话中真正的next-item,而
p
(
v
)
p(v)
p(v) 是
p
(
v
∣
C
i
a
,
H
(
u
c
)
,
S
(
u
c
)
)
p(v | C_{ia}, \mathbb{H}(u_c), \mathbb{S}(u_c))
p(v∣Cia,H(uc),S(uc)) 的缩写