KDA
摘要
用户意图是推荐系统需要考虑的一个重要因素,它总是在不同的环境中动态变化。最近的研究(以顺序推荐为代表)开始专注于预测用户想要什么,而不是用户喜欢什么,这种研究更善于捕捉用户意图,并引起了兴趣的激增。然而,用户意图建模并不是无足轻重的,因为它通常受到各种因素的影响,其中项目关系及其时间演化效应非常重要。
例如,手机的消费会对相关商品的需求产生不同的影响:对于补充品,需求可能会在短期内得到提升;而对于替代品来说,长期效果可能会更好,因为用户不需要马上换一部手机。此外,不同关系效应的时间演化在不同领域有所不同,这使得适应性地考虑它们具有挑战性。因此,大多数现有的研究只是通过将项目关系的语义编码到嵌入中来松散地结合项目关系,而忽略了细粒度的时间感知效应。
在这项工作中,我们提出了知识感知动态注意(KDA)来考虑关系效应及其时间演化。具体来说,为了模拟历史关系交互对用户意图的动态影响,我们将历史序列聚合成关系特定的嵌入,其中关注权重由两部分组成。首先,我们测量历史项目和目标项目之间的关系强度,以根据每个关系来建模绝对影响程度。其次,为了模拟关系效应如何随时间漂移,我们创新性地引入了具有可学习频域嵌入的傅里叶变换,以自适应地估计不同关系的时间衰减函数。随后,利用自关注机制导出整个历史序列的最终表示,该表示反映了动态用户意图,并将被应用于生成推荐列表。
面临的挑战
为了建立关系强度模型并实现时间演化的自适应估计,主要有两个挑战:(1)尽管现有的数据集或知识图包含一些项目关系,但看得见和看不见的项目对的确切关系强度是未知的。(2)不同项目关系的时间演化效果在不同场景下差异很大,需要无领域方法自动捕捉动态效果。为了应对这些挑战,我们提出了知识感知动态注意力(KDA),以更好地理解动态用户意图。KDA的主要思想是自适应地将历史序列聚合成多个特定于关系的嵌入(称为关系动态历史嵌入)。注意力权重取决于相互作用的项目和目标项目之间的关系强度和时间间隔。然后通过建模这些关系动态历史嵌入的相互影响来捕获用户意图。
基本方法:
首先,我们通过一个知识图嵌入任务来建模项目-项目关系及其强度。关系项目对的匹配分数被最大化,以将项目关系的语义编码到嵌入中。然后,分数函数将用于测量交互项目和目标项目之间的关系强度,这随后确定历史项目的部分注意力权重。更重要的是,我们创新性地引入傅里叶变换来模拟不同关系交互的不同时间效应。特别地,基于我们的实证研究,我们假设对于数据集中的每种关系类型,存在时间间隔的潜在和连续的时间衰减函数,这决定了关系效应对目标项目的时间演化。然后,我们通过离散傅里叶变换(DFT)参数化每个时间衰减函数的频域表示,称为频率嵌入。以这种方式,可以自适应地估计时间衰减函数,而无需预定义的函数形式。通过在相应的频率嵌入上应用离散傅里叶逆变换(IDFT),可以容易地获得看不见的时间间隔的函数值,这提供了将潜在的和连续的时间效应结合到神经模型中的一般方法。
KDA被用来模拟项目关系及其时间演化效应。我们设计了关系强度和频域嵌入来自适应地确定历史交互的重要性。基于傅立叶的时间衰减函数估计进一步开辟了一条将时间动力学集成到神经模型中的新途径。
我们想要验证历史关系交互的效果在现实世界的数据集中是如何随时间变化的。考虑到很难直接观察到关系交互的时间效应,我们求助于研究用户序列中的交互和它们的关系邻居之间的时间间隔分布(根据定义3.3,最近的关系交互)。实际上,这种分布是时间进化效应的一个很好的指标。例如,如果(手机,箱子,other)并且很多用户在之前消费手机的一天后购买箱子,当时间间隔为一天时,other的影响可能会有一个峰值。
由于时间间隔通常呈现长尾分布,我们使用对数变换来归一化时间间隔
Δ
t
\Delta t
Δt(以秒为单位):
∆
t
n
=
m
a
x
(
0
,
l
o
g
2
(
∆
t
/
60
)
)
∆t_n = max(0,log_2(∆t/60))
∆tn=max(0,log2(∆t/60))
所有时间间隔都以相同的方式标准化。然后,对于数据集中的每个关系r,我们可以遍历每个用户序列中的所有交互,以找到它们的关系邻居,并导出相应的时间间隔分布。
KDA的整体结构。
主要有两个模块:(1)项目关系建模学习一个知识图嵌入任务,将项目关系的语义保持在嵌入中;(2)用户意图建模导出了几个特定于关系的历史嵌入,其中我们设计了关系强度和基于傅立叶的时间演化来确定历史交互的动态效果。然后利用自我关注来捕捉不同历史嵌入的相互影响,并导出最终的KDA历史表示,该表示将用于生成排名列表。
User Intention Modeling
用户意图建模
KDA模型的基本思想是在给定用户和目标项目的历史序列的情况下,导出历史表示
m
u
,
i
∈
R
d
m_{u,i}∈\mathbb{R^d}
mu,i∈Rd,它集成了历史交互的关系和动态效果。然后最终排名得分
y
^
u
,
i
\hat{y}_{u,i}
y^u,i计算如下:
y
^
u
,
i
=
(
p
u
+
m
u
,
i
)
q
i
T
+
b
i
\hat{y}_{u,i} = (p_u+m_{u,i})q_i^T+b_i
y^u,i=(pu+mu,i)qiT+bi
p
u
p_u
pu、
q
i
q_i
qi分别是用户和项目的嵌入,
b
i
b_i
bi是每个项目的偏差项。用户嵌入反映了长期偏好,
m
u
,
i
m_{u,i}
mu,i反映了短期用户意图。
为了更好地理解动态用户意图,设计了一个两级聚合架构:我们首先在不同关系类型的视图下动态聚合交互项目的嵌入,然后继续聚合这些关系特定的历史嵌入 s i , τ s_{i,\tau} si,τ,以获得最终的KDA历史表示 m u , i m_{u,i} mu,i。
Relational Dynamic History Aggregation
关系动态历史聚合
首先,我们关注每种关系类型的关系动态历史聚合(一级聚合)。具体地,对于给定的历史序列
S
u
T
S_u^T
SuT和目标项目
i
i
i,我们为每个关系类型
τ
\tau
τ导出关系动态历史嵌入
s
i
,
τ
s_{i,\tau}
si,τ:
s
i
,
τ
=
∑
(
j
,
t
j
)
∈
S
u
T
I
N
T
(
i
,
j
,
τ
)
f
τ
(
∆
t
n
)
⋅
q
j
s_{i,\tau} = \sum_{(j,t_j)∈S_u^T}INT(i,j,\tau)f_\tau(∆t_n)·q_j
si,τ=(j,tj)∈SuT∑INT(i,j,τ)fτ(∆tn)⋅qj
其中 q j q_j qj是历史项目的嵌入,关注权重由关系强度分数 I N T ( i , j , τ ) ∈ [ 0 , 1 ] INT(i,j,τ) ∈ [0,1] INT(i,j,τ)∈[0,1]和时间衰减 f τ ( Δ t n ) ∈ [ 0 , 1 ] fτ(\Delta t_n)∈[0,1] fτ(Δtn)∈[0,1]组成。这里,历史项目和目标项目之间的时间间隔 Δ t = T − t j \Delta t = T - t_j Δt=T−tj用等式(1)归一化,表示为 Δ t n \Delta t_n Δtn。关系动态历史嵌入对每种关系类型的历史序列的特定含义进行编码,这将作为获得最终KDA历史表示 m u , i m_{u,i} mu,i,
Cross-relation Influence Modeling (Self-attention Layer)
交叉关系影响建模
假设我们已经获得了关系动态历史嵌入
s
i
,
τ
s_{i,\tau}
si,τ利用自我注意机制来捕捉关系之间的相互影响(二级聚合)。一般来说,常用的点积注意力可以定义为:
A
t
t
e
n
t
i
o
n
=
(
Q
,
K
,
V
)
=
s
o
f
t
m
a
x
⟮
Q
K
T
d
⟯
V
Attention = (Q,K,V) = softmax \lgroup\frac{QK^T}{\sqrt{d}}\rgroup V
Attention=(Q,K,V)=softmax⟮dQKT⟯V
KDA模型中自我注意机制的说明:我们利用自我关注来捕捉不同关系之间的相互影响。自我关注总共有K层,我们在每层都采用了丢弃、剩余连接和层规范化
其中Q、K、V分别代表查询、键和值,d为注意空间的隐藏大小。它计算所有值的加权和,其中权重取决于查询和键的内积。比例因子 d \sqrt{d} d是为了避免内积值过大。至于自我关注,查询、键和值都来自同一个对象。那么这个对象的新表示就能够吸收其他对象的信息。在我们的例子中,对象引用不同的关系动态历史嵌入 s i , τ s_{i,\tau} si,τ。我们将所有M种关系类型的 s i , τ s_{i,\tau} si,τ叠加为 S i ∈ R M × d S_i∈\mathbb{R}^{M×d} Si∈RM×d:
S
i
=
(
s
i
,
τ
1
T
;
s
i
,
τ
2
T
;
…
…
;
s
i
,
τ
M
T
)
S_i = (s_{i,\tau_1}^T;s_{i,\tau_2}^T;……;s_{i,\tau_M}^T)
Si=(si,τ1T;si,τ2T;……;si,τMT)
然后通过线性投影获得查询、键和值 :
Q
=
S
i
W
Q
,
K
=
S
i
W
K
,
V
=
S
i
W
V
,
Q = S_iW^Q,K = S_iW^K,V = S_i^WV,
Q=SiWQ,K=SiWK,V=SiWV,
其中投影矩阵
W
Q
,
W
K
,
W
V
∈
R
d
×
d
W^Q,W^K,W^V∈ \mathbb{R}^{d×d}
WQ,WK,WV∈Rd×d .接下来我们可以得到注意表征:
A
i
∈
M
×
d
A_i∈\mathbb{M\times{d}}
Ai∈M×d
A
i
=
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
A_i = Attention(Q,K,V)
Ai=Attention(Q,K,V)
此外,我们可以堆叠几个自我关注层来扩展模型容量。为了赋予每一层非线性,我们应用前馈网络一个ReLU激活函数:
F
F
N
(
A
i
)
=
R
e
L
U
(
A
i
W
1
+
b
1
)
W
2
+
b
2
FFN(A_i) = ReLU(A_iW_1 + b_1)W_2 + b_2
FFN(Ai)=ReLU(AiW1+b1)W2+b2
W
1
,
W
2
∈
R
d
×
d
W_1,W_2∈\mathbb{R}^{d\times d}
W1,W2∈Rd×d
b
1
,
b
2
∈
R
d
b_1,b_2∈\mathbb{R^d}
b1,b2∈Rd我们在不同的注意力层使用相同的线性变换来实现参数共享
堆叠自关注层可能会导致过度拟合和渐变消失等问题,采用丢失正则化、剩余连接和层归一化技术来解决这些问题:
S
i
k
+
1
=
L
a
y
e
r
N
o
r
m
(
S
i
(
k
)
+
D
r
o
p
o
u
t
(
F
F
N
(
A
i
(
k
)
)
)
)
S_i^{k+1} = LayerNorm(S_i^{(k)}+Dropout(FFN(A_i^{(k)})))
Sik+1=LayerNorm(Si(k)+Dropout(FFN(Ai(k))))
其中
A
i
(
k
)
A^{(k)}_i
Ai(k)由
S
i
(
k
)
S^{(k)}_i
Si(k)得到,
S
i
(
0
)
S^{(0)}_i
Si(0)定义为
S
i
(
0
)
=
S
i
S^{(0)}_i = S_i
Si(0)=Si。我们首先在前馈网络的输出端应用压差。Dropout 提出用概率
p
p
p将前一层的输出随机设置为零,这被证明有利于缓解过拟合问题。然后,通过剩余连接添加最后一层的表示,以将低层特征传播到更高层。最后,层规范化是指具有零均值和单位方差的层的输出。这对稳定和加速神经网络训练是有用的。假设
x
x
x是前一层的输出向量,层归一化定义为:
L
a
y
e
r
N
o
r
m
(
x
)
=
α
⊗
x
−
μ
σ
2
+
ϵ
+
β
LayerNorm(x) = \alpha\otimes\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta
LayerNorm(x)=α⊗σ2+ϵx−μ+β
⊗
\otimes
⊗:元素积,
μ
,
σ
\mu,\sigma
μ,σ是
x
x
x的均值和方差,
α
α
α和
β
β
β是学习比例因子和偏差项。我们不像
T
r
a
n
s
f
o
r
m
e
r
Transformer
Transformer那样在
A
i
(
k
)
A^{(k)}_i
Ai(k)上应用层规范化,因为这可能会在一开始破坏关系动态历史嵌入的有意义的加权和。实验结果还表明,中间层规范化导致性能稍差。
Pooling Layer.
汇集层
假设自关注层的总数为
K
K
K,我们可以得到最终的关系动态历史嵌入
S
i
(
k
)
S^{(k)}_i
Si(k),然后我们使用一个池层来导出最终的
K
D
A
KDA
KDA历史嵌入
m
u
,
i
∈
R
d
m_{u,i}∈\mathbb{R^d}
mu,i∈Rd是目标感知的历史表示。具体方法可以是(1)平均池,(2)最大池,(3)注意力池。在平均池化的情况下,我们简单地对所有关系类型的嵌入进行平均:
m
u
,
i
=
1
M
∑
m
=
1
M
S
i
,
τ
m
(
k
)
m_{u,i} = \frac{1}{M}\sum_{m=1}^MS^{(k)}_{i,\tau_m}
mu,i=M1m=1∑MSi,τm(k)
最大池在这些嵌入中应用了元素级最大值:
m
u
,
i
=
m
a
x
(
s
i
,
τ
1
(
K
)
;
s
i
,
τ
2
(
K
)
;
…
…
;
s
i
,
τ
M
(
K
)
)
m_{u,i}=max(s_{i,\tau_1}^{(K)};s_{i,\tau_2}^{(K)};……;s_{i,\tau_M}^{(K)})
mu,i=max(si,τ1(K);si,τ2(K);……;si,τM(K))
注意力池方法考虑用户可能根据用户的特点对不同的关系类型给予不同的关注:
m
u
,
i
=
s
o
f
t
m
a
x
(
[
a
(
u
,
τ
1
)
,
a
(
u
,
τ
2
)
,
…
…
,
a
(
u
,
τ
M
)
]
)
S
i
(
k
)
m_{u,i} = softmax([a(u,\tau_1),a(u,\tau_2),……,a(u,\tau_M)])S^{(k)}_i
mu,i=softmax([a(u,τ1),a(u,τ2),……,a(u,τM)])Si(k)
a
(
u
,
τ
)
a(u,\tau)
a(u,τ)是用户
u
u
u与关系种类
τ
\tau
τ间的注意力得分,定义为:
a
(
u
,
τ
)
=
h
T
(
t
a
n
h
(
(
p
u
⊗
x
τ
)
W
3
+
b
3
)
)
a(u,\tau) = h^T(tanh((p_u\otimes x_\tau)W_3+b_3))
a(u,τ)=hT(tanh((pu⊗xτ)W3+b3))
线性变换
W
3
∈
R
d
×
l
,
B
3
∈
R
l
W_3∈\mathbb{R^{d \times l}},B_3∈\mathbb{R^l}
W3∈Rd×l,B3∈Rl将用户和关系类型嵌入的元素式乘积投影到注意空间中,其中l是注意空间的隐藏大小。
h
∈
R
l
h∈\mathbb{R^l}
h∈Rl随后将隐藏向量投影到注意力得分中。我们将在实验中比较使用不同池化方法时的性能,平均池化是我们模型中的默认方法。在这一阶段,我们已经获得了最终的KDA历史表示
m
u
,
i
m_{u,i}
mu,i。然后我们可以根据公式
y
^
u
,
i
=
(
p
u
+
m
u
,
i
)
q
i
T
+
b
i
\hat{y}_{u,i} = (p_u+m_{u,i})q_i^T+b_i
y^u,i=(pu+mu,i)qiT+bi计算排名分数,
y
^
u
,
i
\hat{y}_{u,i}
y^u,i并且将用于对候选项目进行排名并生成
T
o
p
−
K
Top-K
Top−K推荐列表。
Relational Dynamic History Aggregation
关系动态历史聚合
这里我们重点讨论如何确定公式 s i , τ = ∑ ( j , t j ) ∈ S u T I N T ( i , j , τ ) f τ ( ∆ t n ) ⋅ q j s_{i,\tau} = \sum_{(j,t_j)∈S_u^T}INT(i,j,\tau)f_\tau(∆t_n)·q_j si,τ=∑(j,tj)∈SuTINT(i,j,τ)fτ(∆tn)⋅qj中的注意力权重(一级聚合),这是 K D A KDA KDA的关键创新点。请注意,聚合权重由关系强度分数I N T ( i , j , τ ) NT(i,j,τ) NT(i,j,τ)和时间衰减 f τ ( Δ t n ) f_\tau(\Delta t_n) fτ(Δtn)组成。首先计算交互项目与目标项目之间的关联度。另一方面基于傅里叶变换估计时间衰减函数,以控制不同关系效应的时间演化。
Relational Intensity
关系强度
首先,我们讨论了关系强度评分的设计。一般来说,关系数据被组织成 K G KG KG,知识图嵌入是一种流行的从关系数据中学习信号的方法,旨在将知识图嵌入到连续的向量空间中。在知识图嵌入任务中,分数函数 R e l r ( i , j ) Rel_r(i,j) Relr(i,j)通常被学习来测量三元组 ( i , j , r ) (i,j,r) (i,j,r)的似然性。与知识图中不存在的损坏三元组相比, R R R中真正的三元组将获得更高的分数。
从另一个角度来看,历史项目j和目标项目I之间的分数
R
e
l
r
(
j
,
I
)
Rel_r(j,I)
Relr(j,I)也可以被视为关系强度的标志。就特定关系类型而言,具有更高关系强度的交互应该在相应的关系动态历史嵌入中发挥更重要的作用。因此,我们在知识图嵌入任务中直接使用相同的得分函数来计算关系强度得分
I
N
T
(
i
,
j
,
τ
)
INT(i,j,τ)
INT(i,j,τ):
I
N
T
(
i
,
j
,
τ
)
=
e
x
p
(
R
e
l
r
(
j
,
i
)
)
∑
j
′
∈
S
u
T
e
x
p
(
R
e
l
r
(
j
′
,
i
)
)
INT(i,j,\tau) = \frac{exp(Rel_r(j,i))}{\sum_{j'\in S_u^T}exp(Rel_r(j',i))}
INT(i,j,τ)=∑j′∈SuTexp(Relr(j′,i))exp(Relr(j,i))
历史项目可以根据它们与目标项目的关系程度进行聚合。我们引入目标项
i
i
i的对应属性作为关系值。然后关系强度测量历史项目是否与目标项目共享相同的属性。而对于没有详细值的关系类型(例如,also_buy),关系值将是上面中描述的特定值“无”。共享分数函数充当共享嵌入之外的第二个桥梁,这使得我们的
K
D
A
KDA
KDA模型能够充分利用在
K
G
KG
KG中学习的知识。关系强度的另一个优点是它可以处理知识图中缺失的关系。
Fourier-based Temporal Evolution
假设每种关系类型
τ
\tau
τ的时间演化可以由一个潜在的和连续的时间衰减函数
f
τ
(
Δ
t
n
)
f_\tau(\Delta t_n)
fτ(Δtn)来培育。时间衰减函数控制关系效果如何随着时间间隔的增加而漂移,这决定了等式(3)中的注意力权重和关系强度。一个直观的解决方案是用预定义的函数形式来估计特定于关系的函数。这里的主要问题是假设时间衰减函数在时域中是连续的,这不能在神经网络中直接优化。如果一个连续函数可以被编码成一个固定大小的向量,那么该模型可以在没有任何先验知识的情况下从数据中学习时间演化。受DFT的启发,我们的关键见解是将
f
τ
(
Δ
t
n
)
f_\tau(\Delta t_n)
fτ(Δtn)变换到频域
F
τ
[
w
]
F_\tau[w]
Fτ[w]:
f
τ
(
Δ
t
n
)
↔
F
τ
[
w
]
f_\tau(\Delta t_n) \leftrightarrow F_\tau[w]
fτ(Δtn)↔Fτ[w]
给定
D
F
T
N
DFT \ N
DFT N的点,
D
F
T
DFT
DFT可以将连续函数
f
(
t
)
f (t)
f(t)的有限等间隔样本序列转换为等长序列,该序列是
N
N
N个等间隔频率的复值函数
F
[
w
]
F[w]
F[w]:
w
k
=
2
π
N
k
,
k
=
0
,
1
…
…
,
N
−
1
w_k = \frac{2\pi}{N}k,\quad k=0,1……,N - 1
wk=N2πk,k=0,1……,N−1
F
[
w
k
]
F[w_k]
F[wk]包含f (t)中频率为wk的正弦波的振幅和相位信息。这样,时域中的连续函数可以表示为频域中的离散函数。这相当于将时域函数编码为复值嵌入,我们称之为频率嵌入。给定频率嵌入,我们可以通过
I
D
F
T
IDFT
IDFT得到任何输入
t
t
t的
f
(
t
)
f (t)
f(t)值。接下来,我们描述关于为每个时间衰减函数
f
τ
(
Δ
t
n
)
f_\tau(\Delta t_n)
fτ(Δtn)参数化频域表示
F
τ
[
w
]
F_\tau[w]
Fτ[w]的细节。在我们的
K
D
A
KDA
KDA模型中,我们给每个关系类型
τ
\tau
τ一个频率嵌入
F
τ
∈
C
N
F_\tau∈\mathbb{C}^N
Fτ∈CN频域表示,它可以被随机初始化,并将通过损失函数和其他参数一起被优化。对于任何时间间隔
Δ
t
n
\Delta t_n
Δtn,通过对
F
τ
F_\tau
Fτ应用
I
D
F
T
IDFT
IDFT得到
f
τ
(
Δ
t
n
)
f_\tau(\Delta t_n)
fτ(Δtn):
f
τ
(
Δ
t
n
)
=
1
N
∑
k
=
0
N
−
1
F
τ
[
w
k
]
e
j
w
k
Δ
t
n
f_\tau(\Delta t_n) = \frac{1}{N}\sum_{k=0}^{N-1}F_\tau[w_k]e^{jw_k\Delta t_n}
fτ(Δtn)=N1k=0∑N−1Fτ[wk]ejwkΔtn
为了便于快速傅里叶变换的优势,我们保证
N
N
N是
2
2
2的整数次幂。此外,由于时间衰减函数值是实数,我们只保留半正频率(即
F
τ
F_\tau
Fτ的前
N
/
2
个
N/2个
N/2个元素)。当转换回时域时,我们计算这些频率的复共轭
F
τ
[
w
k
]
F_\tau[w_k]
Fτ[wk],并在最后填充它们。这确保了
I
D
F
T
IDFT
IDFT也能产生真正的价值。即将上式变为:
f
τ
(
Δ
t
n
)
=
1
N
∑
k
=
0
N
/
2
−
1
(
F
τ
)
[
w
k
]
e
j
w
k
Δ
t
n
+
F
τ
[
w
k
]
‾
e
−
j
w
k
Δ
t
n
f_\tau(\Delta t_n) = \frac{1}{N}\sum_{k=0}^{N/2-1}(F_\tau)[w_k]e^{jw_k\Delta t_n}+\overline{F_\tau[w_k]}e^{-jw_k\Delta t_n}
fτ(Δtn)=N1k=0∑N/2−1(Fτ)[wk]ejwkΔtn+Fτ[wk]e−jwkΔtn
对每个关系类型的时间间隔分布应用
D
F
T
DFT
DFT,以在开始时初始化
F
τ
F_\tau
Fτ。假设相互作用和它们的关系邻居之间的时间间隔分布,关系类型
τ
\tau
τ是
F
τ
[
x
]
F_\tau[x]
Fτ[x],其中
x
x
x是时间间隔槽的索引,
F
τ
[
x
]
F_\tau[x]
Fτ[x]是数据中相应的案例数。我们将归一化时间间隔
Δ
t
n
\Delta t_n
Δtn离散为时隙,如下所示:
x
=
[
Δ
t
n
]
=
[
m
a
x
(
0
,
l
o
g
2
(
Δ
t
/
60
)
)
]
x = [\Delta t_n] = [max(0,log_2(\Delta t/60))]
x=[Δtn]=[max(0,log2(Δt/60))]
槽的总数表示为
X
X
X,那么给定
D
F
T
N
≥
X
DFT \quad N ≥ X
DFTN≥X的点,我们可以将
D
F
T
DFT
DFT应用于
F
τ
[
x
]
F_τ[x]
Fτ[x]的周期延拓
(
即
F
τ
[
x
+
X
]
=
F
τ
[
x
]
)
(即F_τ[x +X] = F_τ[x])
(即Fτ[x+X]=Fτ[x]):
F
τ
[
w
k
]
=
∑
n
=
0
N
−
1
F
τ
[
n
]
e
−
j
w
k
n
F_\tau[w_k] = \sum_{n=0}^{N-1}F_\tau[n]e^{-jw_kn}
Fτ[wk]=n=0∑N−1Fτ[n]e−jwkn
上述DFT结果将用于在训练前初始化
F
τ
F_τ
Fτ。我们将时间间隔分布Fτ[x]的最大值归一化为1,这确保了
I
D
F
T
IDFT
IDFT的输出在相同的尺度上。
基于离散傅立叶变换的估计方法可以被看作是一种将潜在的和连续的时间函数编码到频域嵌入中的通用方法.对用户特定的时间演化感知进行建模,可以定义一个用户特定的嵌入函数:
f
r
,
u
(
Δ
t
n
)
=
1
N
∑
(
F
τ
[
w
k
]
+
F
u
[
w
k
]
)
e
j
w
k
Δ
t
n
f_{r,u}(\Delta t_n) = \frac{1}{N}\sum(F_\tau[w_k]+F_u[w_k])e^{jw_k\Delta t_n}
fr,u(Δtn)=N1∑(Fτ[wk]+Fu[wk])ejwkΔtn
Item Relation Modeling
项目关系建模
我们学习了一个知识图嵌入任务,将语义保留到项目嵌入中。主要目标是定义评分函数 R e l r ( i , j ) Rel_r(i,j) Relr(i,j)来衡量三元组 ( I , j , r ) (I,j,r) (I,j,r)的合理性。使用关系的两级层次成分的总和作为其嵌入,得到关系 r = < τ , v > r =< τ,v > r=<τ,v>的表达式为: r = x τ + z v r = x_\tau + z_v r=xτ+zv
以这种方式,具有相同类型的关系保持相似的表示,并且值嵌入使得模型保真度能够处理相同关系类型具有不同值的情况。在
D
i
s
t
M
u
l
t
DistMult
DistMult的情况下,它捕获项目对之间特定于关系的交互。得分函数定义为:
R
e
l
r
(
i
,
j
)
=
q
i
T
d
i
a
g
(
r
)
q
j
Rel_r(i,j)=q_i^Tdiag(r)q_j
Relr(i,j)=qiTdiag(r)qj
中
d
i
a
g
(
r
)
diag(r)
diag(r)表示主对角元素等于
r
r
r的对角矩阵,为了学习项目关系图中的语义,我们希望对观察到的三元组最大化
R
e
l
r
(
i
,
j
)
Relr(i,j)
Relr(i,j),对未观察到的三元组最小化
R
e
l
r
(
I
,
j
)
Relr(I,j)
Relr(I,j)。基于此,成对损耗得到优化:
L
r
e
l
=
−
∑
(
i
,
j
,
r
)
∈
R
l
o
g
σ
(
R
e
l
r
(
i
,
j
)
−
R
e
l
r
(
i
−
,
j
−
)
)
L_{rel}=-\sum_{(i,j,r)\in R}log\sigma(Rel_r(i,j)-Rel_r(i^-,j^-))
Lrel=−(i,j,r)∈R∑logσ(Relr(i,j)−Relr(i−,j−))
Multi-task Learning
多任务学习
对于推荐任务,我们优化成对排序损失
L
r
e
c
=
−
∑
u
∈
U
∑
i
=
2
N
u
l
o
g
σ
(
y
^
u
,
i
−
y
^
u
,
i
−
)
L_{rec}=-\sum_{u\in U}\sum_{i=2}^{N_u}log\sigma(\hat{y}_{u,i}-\hat{y}_{u,i^-})
Lrec=−u∈U∑i=2∑Nulogσ(y^u,i−y^u,i−)
伪代码如下:
其中
σ
σ
σ表示sigmoid函数,我们随机采样一个负项
i
i
i。对于每个训练实例。指数
i
i
i从2开始,因为顺序推荐应该至少有一个历史交互。然后将联合目标函数定义为:
m
i
n
Θ
L
=
L
r
e
c
+
γ
L
r
e
l
+
λ
∣
∣
Θ
∣
∣
2
min_\Theta L = L_{rec}+\gamma L_{rel}+\lambda ||\Theta||_2
minΘL=Lrec+γLrel+λ∣∣Θ∣∣2
其中
Θ
\Theta
Θ为参数空间,
γ
γ
γ为知识图嵌入任务的系数
,
λ
,λ
,λ为正则化系数。
我们提出的KDA模型在所有数据集上都比最佳基线方法有很大改进。背后的原理在于三个部分:(1)我们使用关系强度评分来柔和地聚合历史交互,而不是像RCF那样直接划分序列。(2)设计了一种基于傅里叶的方法,将时间演化效应自适应地融入到模型训练中,不仅有效,而且灵活。(3)利用自我注意机制进一步探索关系之间的相互影响。此外,请注意,不同池化方法在不同数据集上的性能不同,最佳选择也不一致。平均池方法通常会得到有希望的结果,但是最大池在MovieLens-100k中非常强大。注意力集中比RecSys2017中的其他方法好一点,但在其他两个数据集上表现更差(仍然比基线方法好)。因此,具体的方法需要根据数据集来确定,这可能依赖于数据规模和关系的数量。根据我们的经验,平均池和最大池通常是稳定的,因此我们在下面的实验中默认使用平均池。