文章目录
User-as-Graph: User Modeling with Heterogeneous Graph Pooling for News Recommendation
题目:《一人一图:基于异质图池化用户建模的新闻推荐方法》
作者:Chuhan Wu, Fangzhao Wu, Yongfeng Huang, Xing Xie
来源:IJCAI’ 21
研究对象
许多在线新闻平台采用新闻推荐技术,提供个性化的新闻服务,缓解用户信息过载[Okura et al., 2017]。精确的用户兴趣建模是实现准确个性化新闻推荐的前提。
存在的问题
现有的新闻推荐方法主要通过序列模型或注意力模型对用户点击的新闻进行兴趣建模。例如,Okura et al.[2017] 提出使用GRU网络通过捕获用户的序列信息从他们点击的新闻中学习用户表示。Wu et al. [2019a] 提出使用注意力方法通过关注重要的新闻从他们点击的新闻中学习用户表示。然而,这些方法不能有效地建模用户行为之间的相关性,但用户行为之间的相关性通常可以为建模用户兴趣提供有用的行为上下文。
事实上,用户在新闻上的行为可能具有多种相关性。
- 在时间上相邻的点击新闻可能具有一定的相关性。例如,如图1所示,用户单击第一条和第二条都提到 NFL (职业橄榄球联盟) 新闻事件的新闻。
- 属于同一话题类别的新闻也可能有一定的关联性。例如,图1中的第一条新闻和最后一条新闻都属于“体育”类,它们在内容上很相似。
- 包含相同实体的新闻在吸引新闻点击方面也存在一定关系,因为新闻中的实体是用户兴趣的重要标志[Wang et al., 2018]。例如,图1中的第二条和最后一条新闻都提到了实体“Cowboys”,这是一个球队的名字。我们可以推断,这个用户点击这两个新闻是因为他/她对这个团队有潜在的兴趣。
这些用户行为之间的关系可以为更精确的用户兴趣建模提供非常有用的线索。然而,在现有的新闻推荐方法中,主要使用用户的行为集或行为序列来表示用户,并没有有效地建模用户行为之间的丰富相关性,这可能导致推荐的结果不是最优的。
作者的方法
本文提出了一种新闻推荐的用户建模方法 user-as-graph (UaG),该方法将每个用户建模为一个个性化的异构图,从用户的行为出发,更好地捕捉用户建模的细粒度行为相关性,更准确地建模用户兴趣。用户图节点包含点击的新闻、话题和实体,在用户连续点击的新闻、新闻与其话题、新闻与其实体之间创建边。与现有的使用序列或注意力模型来处理行为序列或集合的方法不同,从个性化异构图中学习用户嵌入是困难的。因此,我们提出一种异构图池化 (HG-Pool) 方法,迭代地压缩个性化异构图,同时考虑不同类型节点的不同特征。它针对不同类型的节点使用不同的池化图神经网络,从整个图中总结出特定类型的图信息,并根据相同类型的节点的特征和整个图的拓扑进行聚合。
相关工作——图池化
图池化旨在将输入的图压缩成更小的图,以便进行有效的表示学习 [Ying et al, 2018]。然而,与广泛用于处理图像和文本等其他数据类型的最大池化和注意力池化不同,图池化并不简单,因为很难根据节点自身的特征和图拓扑来决定保留哪些节点 [Lee et al., 2019]。一些早期的图池方法通常用单一层对图全局地进行池化。如 Duvenaud et al. [2015] 提出对所有节点的嵌入进行求和或平均,从而形成图表示。Li et al. [2016] 提出引入一个与图中每个节点都有连接的“超级节点”,并使用该节点的嵌入作为图的表示。然而,这些方法通常不能有效地利用图拓扑,而这对于准确学习图表示是至关重要的。
近年来,一些工作探索出以分层方式池化图数据的方法 [Yuan and Ji, 2019; Yang et al., 2020; Ranjan et al., 2020]。例如,Ying et al.[2018]提出了一种名为 DiffPool 的微分池化方法。该算法首先学习GNN层中节点的软簇,然后聚合每个簇中的节点,形成一个粗粒度的图表示作为下一GNN层的输入。Gao and Ji [2019] 提出了一种名为 gPool 的图池方法。在每个GCN层之后,他们使用一个查询向量来计算每个节点的分数,并且只保留了 top K 个节点形成一个压缩的图。将保留节点的分数与节点嵌入的分数相乘,形成新的节点特征。Lee et al. [2019] 提出了一种自注意力的图池化 (SAGPool) 方法。与 gPool 不同的是,它们使用图神经网络而不是查询向量来捕获图拓扑结构。先前工作的图池化方法主要是为同构图设计的,在同构图中节点的类型没有区别。然而,在本文的 user-as-graph 方法中,每个用户的个性化图是一个异构图。在异构图中,不同类型的节点在节点特征和拓扑结构上可能存在差异,直接将这些方法应用到异构图中可能不是最优方法。但是,异构图池化很少被研究。因此,作者提出了一种异构图池化方法,该方法可以有效地总结异构图的拓扑信息和内容信息,并考虑不同类型节点之间的差异。
方法
个性化图的构建
首先,为了用户兴趣建模,我们在 UaG 方法中引入个性化图,该方法由用户的新闻点击行为构建而成。它包含三种节点,包括新闻、话题和实体。
给定一个目标用户 u u u ,我们将该用户点击的 M M M 条新闻集合表示为 KaTeX parse error: Undefined control sequence: \cal at position 2: {\̲c̲a̲l̲{N}} = \{n_1, n… ,集合中的元素按照用户点击的时间顺序排列。
在时间上相邻的用户行为通常具有一定的关联性。例如,在图1中,用户连续点击的两则新闻都是关于类似的事件。由于新闻点击的序列信息对用户兴趣动态建模具有重要意义。因此,我们将每一条被点击的新闻视为一个节点,并将点击行为在时间上相邻的新闻连接起来。
另外,新闻话题是建模新闻内容和用户兴趣非常有用的线索。同一话题类别的新闻在用户兴趣建模中也可能存在一定的关联。因此,我们将话题信息合并到用户图中,将每个话题类别 c i c_i ci 视为一个节点,并将每个新闻节点 n i n_i ni 与其关联的话题节点 c [ n i ] c_{[n_i]} c[ni] 连接起来。
此外,新闻实体对于新闻和用户建模非常重要,因为用户往往会因为新闻标题中提到的实体的吸引力而决定点击新闻,比如名人或组织,如运动队。为了整合实体信息,我们将实体视为另一种节点,将 KaTeX parse error: Undefined control sequence: \cal at position 2: {\̲c̲a̲l̲{N}} 中新闻提到的实体集合 KaTeX parse error: Undefined control sequence: \cal at position 2: {\̲c̲a̲l̲{E}} = \{e_1, e… (K为实体数量) 整合到用户图中。我们将每个新闻节点 n i n_i ni 与它所提到的实体的节点连接起来,最终形成个性化异构图 G ( 0 ) G^{(0)} G(0)。
异质图池化
由于在我们的 UaG 方法中,每个用户都被表示为一个个性化的异构图 G ( 0 ) G^{(0)} G(0),因此从异构图中学习得到用户兴趣嵌入 u {\bf{u}} u 用于新闻推荐至关重要。
对于节点类型为
T
T
T 的异构图 (
G
(
0
)
G^{(0)}
G(0) 的
T
T
T 为3),我们分别将其初始图邻接矩阵和节点特征表示为
A
(
0
)
A^{(0)}
A(0) 和
X
(
0
)
X^{(0)}
X(0)。我们采用多层GNN来处理图,其输入是
A
(
0
)
A^{(0)}
A(0) 和
X
(
0
)
X^{(0)}
X(0) ,经过
l
l
l 层GNN后输出
A
(
l
)
∈
R
N
(
l
)
×
N
(
l
)
A^{(l)} \in {\Bbb{R}}^{N^{(l)} \times N^{(l)}}
A(l)∈RN(l)×N(l) 和
X
(
l
)
∈
R
N
(
l
)
×
D
X^{(l)} \in {\Bbb{R}}^{N^{(l)} \times D}
X(l)∈RN(l)×D 。其中
N
(
l
)
=
∑
i
=
1
T
N
i
(
l
)
N^{(l)} = \sum^T_{i=1} N^{(l)}_i
N(l)=∑i=1TNi(l) 是所有类别节点数
N
i
(
l
)
N^{(l)}_i
Ni(l) 的总和。由于不同类型的节点可能具有不同的特征,我们需要对异构图中的节点进行类型区分。具体来说,我们将图的邻接矩阵
A
(
l
)
A^{(l)}
A(l) 分为
T
2
T^2
T2 个子矩阵,将节点特征矩阵
X
(
l
)
X^{(l)}
X(l) 按照节点类型分为
T
T
T 个子矩阵。我们将第
i
i
i 行第
j
j
j 列的邻接子矩阵表示为
A
i
,
j
(
l
)
∈
R
N
i
(
l
)
×
N
j
(
l
)
A^{(l)}_{i,j} \in {\Bbb{R}}^{N^{(l)}_i \times N^{(l)}_j}
Ai,j(l)∈RNi(l)×Nj(l) (表示第
i
i
i 和第
j
j
j 种节点之间有连接),并且将第
i
i
i 种特征的子矩阵表示为
X
i
(
l
)
∈
R
D
×
N
i
(
l
)
X^{(l)}_i \in {\Bbb{R}}^{D \times N^{(l)}_i}
Xi(l)∈RD×Ni(l) (表示第
i
i
i 种节点的特征)。受 [Ying et al., 2018] 的DiffPool 的启发,我们提出采用
T
T
T 种池化图神经网络来独立地学习每种节点的池化矩阵,具体如下:
S
i
(
l
)
=
P
o
o
l
G
N
N
(
A
(
l
)
,
X
(
l
)
;
Θ
i
(
l
)
)
(1)
S^{(l)}_i = {\rm{PoolGNN(A^{(l)}, X^{(l)};\Theta^{(l)}_i)}} \tag{1}
Si(l)=PoolGNN(A(l),X(l);Θi(l))(1)
其中
S
i
(
l
)
∈
R
N
(
l
)
×
N
i
(
l
+
1
)
S^{(l)}_i \in {\Bbb{R}}^{N^{(l)} \times N^{(l+1)}_i}
Si(l)∈RN(l)×Ni(l+1) 是第
i
i
i 种节点类型的池化矩阵,
Θ
i
(
l
)
{\rm{\Theta}}^{(l)}_i
Θi(l) 是池化GNN的参数集合。通过这种方式,不同类型节点的特征就可以用不同的节点的特定池化矩阵
S
i
(
l
)
S^{(l)}_i
Si(l) 来建模。
现有的同构图池化方法,如 DiffPool,GNN 池化输出的矩阵的和将应用于邻接矩阵
A
(
l
)
A^{(l)}
A(l) 和节点特征矩阵
X
(
l
)
X^{(l)}
X(l) 。但这种方法会将不同类型的节点不加区分地聚类在一起,对于异构图,其属性信息无法保留, 因此不适合异构图池化。故,我们提出将池化矩阵
S
i
(
l
)
S^{(l)}_i
Si(l) 压缩为一个概括的
T
i
(
l
)
∈
R
N
i
(
l
)
×
N
i
(
l
+
1
)
T^{(l)}_i \in {\Bbb{R}}^{N^{(l)}_i \times N^{(l+1)}_i}
Ti(l)∈RNi(l)×Ni(l+1) ,以传递节点特定的图信息,上述过程可以表述为:
T
i
(
l
)
=
s
o
f
t
m
a
x
(
W
i
(
l
)
S
i
(
l
)
+
B
i
(
l
)
)
(2)
T^{(l)}_i = {\rm{softmax}}(W^{(l)}_iS^{(l)}_i+B^{(l)}_i) \tag{2}
Ti(l)=softmax(Wi(l)Si(l)+Bi(l))(2)
其中
W
i
(
l
)
W^{(l)}_i
Wi(l) 和
B
i
(
l
)
B^{(l)}_i
Bi(l) 是压缩
S
i
(
l
)
S^{(l)}_i
Si(l) 的参数。为了避免索引操作,我们对
T
i
(
l
)
T^{(l)}_i
Ti(l) 应用零填充 (只有第 i 种节点对应的行是非零的) 来获得对齐的池化矩阵
P
i
(
l
)
∈
R
N
(
l
)
×
N
i
(
l
+
1
)
P^{(l)}_i \in {\Bbb{R}}^{N^{(l)} \times N^{(l+1)}_i}
Pi(l)∈RN(l)×Ni(l+1)。
然后,我们提出了一种邻接矩阵聚合器和节点特征聚合器来计算新的邻接矩阵
A
(
l
+
1
)
A^{(l+1)}
A(l+1) 和节点特征
X
(
l
+
1
)
X^{(l+1)}
X(l+1) 。邻接矩阵聚合器将先前的邻接矩阵
A
(
l
)
A^{(l)}
A(l) 和
T
T
T 个对齐的池化矩阵
[
P
1
(
l
)
,
.
.
.
P
T
(
l
)
]
[P^{(l)}_1,...P^{(l)}_T]
[P1(l),...PT(l)] 作为输入。我们将新的邻接子矩阵的第
i
i
i 行第
j
j
j 列 表示为
A
i
,
j
(
l
+
1
)
∈
R
N
i
(
l
+
1
)
×
N
j
(
l
+
1
)
A^{(l+1)}_{i,j} \in {\Bbb{R}}^{N^{(l+1)}_i \times N^{(l+1)}_j}
Ai,j(l+1)∈RNi(l+1)×Nj(l+1) ,可以按照下式计算:
A
i
,
j
l
+
1
=
P
i
(
l
)
⊤
A
(
l
)
P
j
(
l
)
.
(3)
A^{l+1}_{i,j} = P^{(l) \top}_iA^{(l)}P^{(l)}_j. \tag{3}
Ai,jl+1=Pi(l)⊤A(l)Pj(l).(3)
整个池化的邻接矩阵
A
i
,
j
(
l
+
1
)
∈
R
N
i
(
l
+
1
)
×
N
j
(
l
+
1
)
A^{(l+1)}_{i,j} \in {\Bbb{R}}^{N^{(l+1)}_i \times N^{(l+1)}_j}
Ai,j(l+1)∈RNi(l+1)×Nj(l+1) 是所有邻接子矩阵的二维拼接 。通过这种方式,不同类型的节点就不会被聚类在一起,并且异质图的属性也能够被保留下来。此外,不同种节点之间的关系可以利用不同池化矩阵之间的关系建模。节点特征聚合器接收节点特征矩阵
X
(
l
)
X^{(l)}
X(l) 和对齐的池化矩阵作为输入。我们将第
i
i
i 种节点的新的特征子矩阵表示为
X
i
(
l
+
1
)
X^{(l+1)}_i
Xi(l+1) ,其公式如下:
X
i
(
l
+
1
)
=
P
i
(
l
)
⊤
X
(
l
)
.
(4)
X^{(l+1)}_i = P^{(l)\top}_i X^{(l)}. \tag{4}
Xi(l+1)=Pi(l)⊤X(l).(4)
节点特征矩阵的输出是
T
T
T 种节点的特征子矩阵的拼接,例如:
X
(
l
+
1
)
=
c
o
n
c
a
t
(
X
1
(
l
+
1
)
,
X
2
(
l
+
1
)
,
.
.
.
,
X
T
(
l
+
1
)
)
X^{(l+1)} = concat(X^{(l+1)}_1, X^{(l+1)}_2,...,X^{(l+1)}_T)
X(l+1)=concat(X1(l+1),X2(l+1),...,XT(l+1)) 。
在异构图池模块中,我们将HG-Pool方法应用于每个GNN层,并使用每个GNN层的多个栈分层学习图表示,如图2所示。应用 HG-Pool 方法经过 L L L 轮迭代之后,原始异构图将被压缩成一个具有 T T T 个节点的紧密连接的小图,其中每个节点压缩了原始图中相应类型节点的信息。最后,我们使用 DiffPool [Ying et al., 2018] 层将该图转换为一个单独的节点,该节点汇总了整个图的信息。将这个节点的嵌入作为输出,表示新闻推荐的用户兴趣嵌入 u \bf{u} u 。
节点表示学习
接下来我们介绍如何学习个性化异质图的原始节点表示。在学习新闻节点表示时,受 [Wu et al., 2019c] 的启发,我们采用了 Transformer 来学习新闻标题的文字表示,并且使用注意力网络通过关注关键字来得到新闻节点表示。在表示话题结点时,我们采用话题类别的嵌入作为节点表示。对于实体节点,根据 [Wang et al., 2018],我们首先通过 TransE [Bordes et al., 2011] 方法从维基数据知识图中学习实体嵌入,接着对这些嵌入应用稠密层来对齐特征维度。值得注意的是,实体嵌入是在模型训练期间微调的。
模型训练
我们在新闻点击预测任务中训练 User-as-Graph 方法。我们使用一个新闻编码器来学习候选新闻嵌入,并根据侯选新闻嵌入与我们的 user-as-graph 模型学习到的用户兴趣嵌入的相关性来预测侯选新闻嵌入的点击分数进行模型训练。具体来说,在新闻编码器中,我们使用了注意力的多视图学习框架 [Wu et al., 2019a],将新闻标题、话题类别和实体作为新闻的不同视图合并,如图4所示。与节点表示学习类似,我们使用 Transformer 和注意网络来学习标题表示
n
t
{\bf{n}}_t
nt ,并在话题嵌入层之后增加一个稠密层来学习隐藏的话题表示
n
c
{\bf{n}}_c
nc 。此外,我们在实体嵌入层后采用一个注意力网络通过选择重要的实体来学习基于实体的新闻表示
n
e
{\bf{n}}_e
ne 。最后的统一的侯选新闻嵌入
n
c
{\bf{n}}^c
nc 是将三种新闻表示通过注意力网络聚合而成的。用户
u
u
u 点击侯选新闻
n
c
{\bf{n}}^c
nc 的点击预测分数
y
y
y 通过它们嵌入的内积来计算,即
y
=
u
⊤
n
c
y = {\bf{u}}^\top {\bf{n}}^c
y=u⊤nc 。这些分数用于个性化的新闻排名和显示。根据 [Wu et al., 2019c] ,对于每条被点击的新闻,我们任意选择
P
P
P 条在相同 impression 下显示的未被点击的新闻,从而构建训练样本。模型训练的损失函数表示如下:
KaTeX parse error: Undefined control sequence: \cal at position 3: {\̲c̲a̲l̲{L}} = -\frac{…
其中 KaTeX parse error: Undefined control sequence: \cal at position 1: \̲c̲a̲l̲{S} 是训练集,
y
i
y_i
yi 和
y
i
,
j
y_{i,j}
yi,j 分别表示第
i
i
i 次点击样本的预测点击分数和相关联的第
j
j
j 次未点击样本。