ACM MM 2023会议论文
论文链接:https://arxiv.org/abs/2308.08459
代码:https://github.com/zhaijianyang/kp4sr
摘要
预训练语言模型(PLMs)蕴含丰富的通用知识,在推荐系统领域表现出了巨大的潜力。然而,现有的基于PLMs的序列推荐(SR)方法通常忽略领域知识,不能捕捉用户的细粒度偏好。尽管很多传统的SR方法通过引入辅助信息(例如知识图谱等)来解决这个问题,但是它们在特征融合阶段通常存在信息丢失问题。受最近流行的大模型和提示学习的启发,我们将知识图谱引入大模型,提出了Knowledge Prompt-tuning for Sequential Recommendation(KP4SR)。为了解决结构化知识和序列文本的语义鸿沟问题,我们构造关系模板集合将结构化知识图谱转化为知识提示。然而,知识提示破坏了原有数据结构,不相关的知识会引入大量噪声,因此,我们提出提示降噪模块,通过构造知识树和知识树掩码来缓解知识噪声问题。此外,我们设计掩码个性化提示集合将推荐任务转化为预训练任务,大大加快了收敛速度。我们在三个真实世界数据集上评估KP4SR,实验结果表明,KP4SR达到了SOTA水平。
介绍
序列推荐旨在利用用户历史交互序列挖掘用户动态偏好,已经成为推荐系统的一个重要研究方向。随着深度学习的发展,深度神经网络在序列推荐中取得了巨大成功,例如GRU4Rec,BERT4Rec,SASRec等。然而,大多数方法只建模用户和物品ID,不能捕捉用户的细粒度偏好(例如电影的导演、类型等)。因此,一些研究将辅助信息引入到序列推荐中。这些方法主要分为两类,一类是集成物品原有属性信息(例如,FDSA、 S 3 R e c S^3Rec S3Rec等),这类方法通常在不同的阶段融合辅助信息,致力于寻找高效的特征融合方法。另一类是引入外部知识图谱(例如KSR等),它们通常采用知识图谱嵌入技术(KGE)学习实体和关系嵌入。然而,KGE的主要优化目标是边预测和补全,并不是推荐任务。总的来讲,虽然辅助信息可以提升推荐性能,但如何高效利用辅助信息仍然是一个具有挑战性且没有解决的问题。
最近,PLMs在NLP中取得巨大成功,并在推荐系统领域表现出了巨大潜力。PLMs在大规模语料库中进行自监督训练,可以学习通用知识,有利于缓解推荐系统中的数据稀疏、冷启动等问题。例如,P5通过设计个性化提示集合将多个推荐任务转化为自然语言处理任务,展现出了PLMs在解决推荐任务时的强大潜力。虽然基于PLMs的序列推荐方法利用了通用知识并取得了不错的性能,但它们仍然难以捕捉用户的细粒度偏好,因为PLMs中通常缺乏和物品相关的领域知识。我们认为,利用PLMs解决推荐任务仍然需要引入领域知识。知识图谱是领域知识的一个有效来源,它是一个结构化的信息库。然而,结构化知识图谱和自然语言存在语义鸿沟,一种简单而直接的方法是将知识图谱转化为文本描述,利用PLMs的强大推理能力来改善推荐性能,如图1所示。然而,这种方法主要存在两个挑战:1)如何将结构化知识图谱转化为文本序列?2)将知识图谱转化为文本序列会破坏原有数据结构,如何解决不相关实体和关系引起的噪声问题?
受NLP中提示学习的启发,我们提出了Knowledge Prompt-tuning for Sequential Recommendation(KP4SR),并设计两个模块来解决以上问题。第一个是提示构造模块,包括掩码个性化提示构造和知识提示构造;第二个是提示降噪模块,通过构造知识树和知识树掩码来缓解不相关三元组引起的噪声问题。我们的贡献如下:
- 提出KP4SR,这是第一个将知识图谱转化为知识提示来改善序列推荐性能的工作。
- 通过关系模板构造知识提示,不仅可以解决结构化知识图谱和序列文本之间的语义鸿沟,还可以轻松利用知识图谱中的高阶信息。
- 提出提示降噪模块,利用掩码矩阵恢复知识图谱数据结构,缓解不相关三元组引起的知识噪声问题。
- 我们在三个真实世界数据集上进行了大量实验,实验结果证明了KP4SR达到了SOTA水平。
方法
总体框架
KP4SR将结构化知识图谱转化为知识提示来改善序列推荐,其主要包括两个模块:提示构造模块和提示降噪模块,如图2所示。提示构建模块包括掩码个性化提示和知识提示。首先,设计掩码个性化提示模板,将用户-物品交互序列转化为掩码个性化提示。通过掩码个性化提示,可以将推荐任务转化为预训练任务。然后,构建关系模板集合,将三元组转化为三元组提示,并进一步组合这些三元组提示以形成知识提示。通过关系模板,可以将结构化的知识图谱转化为文本序列。对于提示去噪模块,首先基于掩码个性化提示和三元组提示构建知识树,然后设计知识树掩码来缓解无关的三元组提示引起的噪音问题。
提示构造
掩码个性化提示
在推荐系统中,个性化提示是指为不同的用户和物品创建的个性化字段。受到P5的启发,我们构建了一组用于序列推荐的掩码个性化提示模板集合,帮助模型发现用户和物品的各个方面。例如,对于电影推荐,可以将模板设计为:用户<用户名称>观看了<交互历史>,下一个将会观看<mask>。然后,对于用户u及其序列{A,B,C,D,E,F},我们可以将相应字段填入模板,得到掩码个性化提示:用户u观看了{A,B,C,D,E,F},下一个将会观看<mask>。其中,<mask>是要预测的下一个物品,即目标物品F。
通过掩码个性化提示构建输入-输出对,可以利用LLMs来提取用户和物品的丰富语义。掩码个性化提示可以将推荐任务转化为预训练任务,在下游任务数据稀疏时提高任务性能。此外,它还可以提高数据利用效率并加速模型收敛。
知识提示
知识图谱通常作为辅助信息来提高推荐系统性能。然而,作为结构化数据,知识图谱不能直接输入到LLMs中,而且结构化知识图谱和文本序列之间存在语义差距。因此,我们将知识图谱转化为文本序列来解决这些问题。
对于三元组 ( h , r , t ) (h,r,t) (h,r,t), h h h代表头实体, r r r代表关系, t t t代表尾实体。我们为每个关系 r ∈ R r∈R r∈R手动设计一个关系模板,以表达相应三元组的语义。例如,在图1中,我们为关系“film.genre”设计模板:The genre of [X] is [Y]。然后,对于三元组(Cast Away, film.genre, Adventure),我们将[X]和[Y]分别替换为头实体和尾实体,获得基本的三元组提示:The genre of Cast Away is Adventure。
对于一个实体 h h h,我们定义三元组集合 S 1 = { ( h , r 1 , t 1 ) , ( h , r 2 , t 2 ) , … } S_1=\{(h,r_1,t_1 ),(h,r_2,t_2 ),…\} S1={(h,r1,t1),(h,r2,t2),…}为实体 h h h的一跳三元组集合。同时,尾实体也可以视为头实体,它们也可以具有多个关系和尾实体。在 S 1 S_1 S1中,有多个尾实体 { t 1 , t 2 , … } \{t_1,t_2,…\} {t1,t2,…}。对于尾实体 t 1 t_1 t1,其一跳三元组的集合可以表示为 S t 1 = { ( t 1 , r 11 , t 11 ) , ( t 1 , r 12 , t 12 ) , … } S_{t1}=\{(t_1,r_{11},t_{11} ),(t_1,r_{12},t_{12}),…\} St1={(t1,r11,t11),(t1,r12,t12),…}。对于尾实体 t 2 t_2 t2,其一跳三元组的集合可以表示为 S t 2 = { ( t 2 , r 21 , t 21 ) , ( t 2 , r 22 , t 22 ) , … } S_{t2}=\{(t_2,r_{21},t_{21}),(t_2,r_{22},t_{22}),…\} St2={(t2,r21,t21),(t2,r22,t22),…},依此类推。然后,实体 h h h的二跳三元组集合可以表示为 S 2 = { S t 1 , S t 2 , … } S_2=\{S_{t1},S_{t2},…\} S2={St1,St2,…}。
我们将每个三元组转化为三元组提示,然后查询每个物品的多跳三元组提示,并将它们组合成一个文本序列来构建知识提示。
提示融合
获得掩码个性化和知识提示后,我们直接将它们拼接起来作为LLMs的输入。具体来说,掩码个性化提示可以表示为:
X
d
=
{
x
1
,
x
2
,
…
,
[
m
a
s
k
]
,
…
,
x
m
}
X_d=\{x_1,x_2,…,[mask],…,x_m \}
Xd={x1,x2,…,[mask],…,xm},其中
x
i
x_i
xi是文本序列的第
i
i
i个标记,
m
m
m表示标记的长度,
[
m
a
s
k
]
[mask]
[mask]表示要预测的下一个物品。知识提示可以表示为:
X
k
=
{
x
1
,
x
2
,
…
,
x
n
}
X_k=\{x_1,x_2,…,x_n \}
Xk={x1,x2,…,xn}。最终的输入形式为:
X
p
r
o
m
p
t
=
[
S
P
E
]
X
d
[
S
P
E
]
X
k
[
S
P
E
]
X_{prompt}=[SPE] X_d [SPE] X_k [SPE]
Xprompt=[SPE]Xd[SPE]Xk[SPE]
其中,
[
S
P
E
]
[SPE]
[SPE]表示特殊标记。通过将掩码个性化提示和知识提示输入到LLMs中,我们可以将推荐任务整合到一个完整的语言环境中,并利用LLMs的强大推理能力来执行推荐任务。
提示降噪
知识树构造
我们通过构建知识树来清晰地理解三元组提示之间的结构和语义关系,如图2所示。知识树的根节点是掩码个性化提示,其中包含用户交互的多个物品。因此,知识树具有多个知识子树,每个知识子树由一个实体和其多跳三元组提示组成。
假设掩码个性化提示包含与实体A和B对应的两个物品,那么知识树由两个知识子树组成,即 s u b T r e e ( A ) subTree(A) subTree(A)和 s u b T r e e ( B ) subTree(B) subTree(B)。知识子树 s u b T r e e ( A ) subTree(A) subTree(A)的根节点是实体 A A A, A A A的孩子节点是其一跳三元组提示, A A 1 AA_1 AA1和 A A 2 AA_2 AA2。实体 A A A的二跳三元组提示是实体 A 1 A_1 A1和 A 2 A_2 A2的一跳三元组提示,即 A 1 A 11 A_1A_{11} A1A11、 A 1 A 12 A_1A_{12} A1A12和 A 2 A 21 A_2 A_{21} A2A21。例如,在图1中,和电影“Cast Away”相连的有两个三元组:(Cast Away, genre, Adventure)和(Cast Away, starred, Tom Hanks)。我们用 A A A表示“Cast Away”, A 1 A_1 A1表示“Adventure”, A 2 A_2 A2表示“Tom Hanks”。通过引入关系模板“The genre of [X] is [Y].”和“[X] starring [Y].”,我们可以获得两个三元组提示:“ A A 1 AA_1 AA1:The genre of Cast Away is Adventure.”和“ A A 2 AA_2 AA2:Cast Away starring Tom Hanks.”。
最后,层次遍历知识树会产生由掩码个性化提示和知识提示组成的提示序列。
知识树掩码
为了缓解知识噪声问题,我们需要限制掩码个性化提示和无关三元组提示之间的相互影响。因此,我们提出知识树掩码,利用掩码矩阵来解决以上问题,如图3所示。基于Transformer的语言模型通常使用注意力掩码矩阵来处理非固定长度序列的输入问题,其公式如下:
Q
i
+
1
,
K
i
+
1
,
V
i
+
1
=
h
i
W
q
,
h
i
W
k
,
h
i
W
v
,
Q^{i+1}, K^{i+1}, V^{i+1}=h^i W_q, h^i W_k, h^i W_v,
Qi+1,Ki+1,Vi+1=hiWq,hiWk,hiWv,
h
i
+
1
=
softmax
(
Q
i
+
1
K
i
+
1
⊤
+
M
d
k
)
V
i
+
1
.
h^{i+1}=\operatorname{softmax}\left(\frac{Q^{i+1} K^{{i+1}^{\top}}+M}{\sqrt{d_k}}\right)V^{i+1}.
hi+1=softmax(dkQi+1Ki+1⊤+M)Vi+1.
其中,
W
q
,
W
k
,
W
v
W^q, W^k, W^v
Wq,Wk,Wv是模型的可训练参数,
h
i
h^i
hi是第
i
i
i层的隐藏状态输出,
d
k
d_k
dk是缩放因子,
M
M
M是注意力掩码矩阵。通过设计注意力掩码矩阵
M
M
M,我们可以控制输入标记之间的注意力。我们利用知识树来设计掩码矩阵M,具体如下:
M
i
j
=
{
0
x
i
,
x
j
∈
N
o
0
x
i
∈
N
1
,
x
j
∈
N
2
0
x
i
∈
N
p
,
x
j
∈
N
c
or
x
i
∈
N
c
,
x
j
∈
N
p
−
∞
otherwise
.
M_{i j}= \begin{cases}0 & x_i, x_j \in N_o \\ 0 & x_i \in N_1, x_j \in N_2 \\ 0 & x_i \in N_p, x_j \in N_c \text{ or } x_i \in N_c, x_j \in N_p \\ -\infty & \text { otherwise }\end{cases}.
Mij=⎩
⎨
⎧000−∞xi,xj∈Noxi∈N1,xj∈N2xi∈Np,xj∈Nc or xi∈Nc,xj∈Np otherwise .
其中,
x
i
x_i
xi和
x
j
x_j
xj是提示序列中的任意两个标记,0表示第
i
i
i个标记可以看到第
j
j
j个标记,
−
∞
-\infty
−∞表示第
i
i
i个标记不能看到第
j
j
j个标记,
N
m
N_m
Nm表示知识树中的一个节点,
N
1
N_1
N1和
N
2
N_2
N2是具有相同父节点的节点,
N
p
N_p
Np和
N
c
N_c
Nc是知识树中具有父子关系的一对父节点和子节点。
掩码矩阵 M M M表示,对于任何节点,它可以看到自己、父节点、子节点和兄弟节点。可以看到,任何节点及其可见节点具有相同的实体,不可见节点包含不同的实体。因此,知识树掩码矩阵可以保持知识提示的原始知识结构,解决不相关和嘈杂的知识问题,并提高模型的性能。
训练和推荐
我们采用T5模型作为基础架构,这是一种基于编码器-解码器的预训练语言模型,使用掩码预测作为预训练任务。我们使用带有掩码的个性化提示构建推荐任务,将其转化为类LLMs的预训练任务。损失函数如下:
L
θ
=
−
∑
j
=
1
∣
y
∣
log
P
θ
(
y
j
∣
y
<
j
,
X
p
r
o
m
p
t
)
.
\mathcal{L}_\theta=-\sum_{j=1}^{|\mathbf{y}|} \log P_\theta\left(\mathbf{y}_j \mid \mathbf{y}_{<j}, \mathbf{X_{prompt}}\right).
Lθ=−j=1∑∣y∣logPθ(yj∣y<j,Xprompt).
其中,
θ
\theta
θ表示模型参数,
y
y
y表示预测输出。在推荐阶段,采用beam search方法来生成推荐的下一个物品列表。
实验
主要实验结果
消融研究
-
掩码个性化提示不仅能提高收敛速度,还能够提升推荐性能。
-
提示去噪和知识提示跳数的影响
-
知识树度数的影响