论文《Hierarchical User Intent Graph Network for Multimedia Recommendation》阅读
论文概况
本文是2021年ACMMM 上的一篇论文,通过构建co-item关系图,建立项目之间的关系,通过细粒度与粗粒度的信息聚合,最终对物品进行预处理。
Introduction
作者提出问题
- 现阶段模型对于物品之间转化关系的提取做的很好,但却没有重视用户意图的提取,用户意图由用户行为信息和项目内容共同组成,然而如何将异质性的两类信息结合起来是当前模型的主要挑战。其次,用户意图也是分为不同层面的,比如看电影时一些人喜欢演员或部分经典情节,而一些人则喜欢电影的整体大纲,因此用户意图也可以分为细粒度与粗粒度,而且粗粒度可以通过细粒度意图总结出来,如何建立与作者意图层次相对应的模型层次结构,也是我们需要面对的问题。
对于上述问题,作者提出了Hierarchical User Intents Graph Network:
(1) 提出多层次用户意图建模
(2) 设计了一个层次化的用户意图网络来学习粗细粒度的用户意图
Method
A.Multimedia Recommendation
身为多模态推荐,我们仍然将物品分为视觉、听觉、文本三个模态并用v、a、t来代表这三个模态。每个模态都单独进行之后的粗细粒度用户意图提取,最终再将三模态得到的用户意图结合即可。
B.Intra-level Aggregation
首先,我们将一个用户浏览或购买或观看或…的物品进行连接,构建co-item图,图中由M件物品。根据co-item图,我们构建一个MxM的邻接矩阵A,构建方式如下:
A
i
,
j
=
{
1
if
v
j
∈
N
(
v
i
)
0
if
v
j
∉
N
(
v
i
)
,
(1)
\mathbf{A}_{i, j}=\left\{\begin{array}{ll} 1 & \text { if } \mathrm{v}_{j} \in \mathcal{N}\left(\mathrm{v}_{i}\right) \\ 0 & \text { if } \mathrm{v}_{j} \notin \mathcal{N}\left(\mathrm{v}_{i}\right), \end{array}\right.\tag{1}
Ai,j={10 if vj∈N(vi) if vj∈/N(vi),(1)
所有物品的embeding设为X,那么内部信息的聚合为:
Z
(
l
)
=
D
−
1
2
A
(
l
)
D
−
1
2
X
(
l
)
(2)
\mathbf{Z}^{(l)}=\mathbf{D}^{-\frac{1}{2}} \mathbf{A}^{(l)} \mathbf{D}^{-\frac{1}{2}} \mathbf{X}^{(l)}\tag{2}
Z(l)=D−21A(l)D−21X(l)(2)
其中D为A的度矩阵,用于归一化。
C. Inter-level Aggregation
外部聚合则是通过将细粒度的物品(内部聚合后的物品)提取为数量更少的粗粒度物品,也就是说将图中原本的M个物品提取为数量更少且更具有用户意图代表性的N个物品。模型整体通过循环进行一次内部聚合加一次外部聚合的过程来提取多粒度多层次的用户意图。
首先,假设我们在第
l
l
l轮迭代,那么我们需要先随机初始化
K
(
l
+
1
)
{K^{(l+1)}}
K(l+1)个超级节点
X
(
l
+
1
)
{X}^{(l+1)}
X(l+1)作为下一层的粗粒度节点个数。
X
(
l
+
1
)
=
[
x
1
(
l
+
1
)
,
⋯
,
x
k
(
l
+
1
)
,
⋯
,
x
K
(
l
+
1
)
(
l
+
1
)
]
(3)
\mathbf{X}^{(l+1)}=\left[\mathbf{x}_{1}^{(l+1)}, \cdots, \mathbf{x}_{k}^{(l+1)}, \cdots, \mathbf{x}_{K^{(l+1)}}^{(l+1)}\right]\tag{3}
X(l+1)=[x1(l+1),⋯,xk(l+1),⋯,xK(l+1)(l+1)](3)
然后利用相似度来计算粗粒度节点与细粒度节点之间的权重,以此来进行邻接矩阵A的更新。
e
i
,
k
=
z
i
(
l
)
⊤
⋅
x
k
(
l
+
1
)
(4)
e_{i, k}=\mathbf{z}_{i}^{(l)^{\top}} \cdot \mathbf{x}_{k}^{(l+1)}\tag{4}
ei,k=zi(l)⊤⋅xk(l+1)(4)
γ
i
,
k
(
l
+
1
)
=
exp
e
i
,
k
∑
k
′
=
1
K
(
l
+
1
)
exp
e
i
,
k
′
(5)
\gamma_{i, k}^{(l+1)}=\frac{\exp e_{i, k}}{\sum_{k^{\prime}=1}^{K^{(l+1)}} \exp e_{i, k^{\prime}}}\tag{5}
γi,k(l+1)=∑k′=1K(l+1)expei,k′expei,k(5)
其中,
z
i
(
l
)
⊤
{z}_{i}^{(l)^{\top}}
zi(l)⊤为第l轮内部聚合后的细粒度节点。
A
(
l
)
=
{
A
l
=
0
Γ
(
l
)
⊤
A
(
l
−
1
)
Γ
(
l
)
otherwise
(6)
\mathbf{A}^{(l)}=\left\{\begin{array}{ll} \mathbf{A} & l=0 \\ \boldsymbol{\Gamma}^{(l)^{\top}} \mathbf{A}^{(l-1)} \boldsymbol{\Gamma}^{(l)} & \text { otherwise } \end{array}\right.\tag{6}
A(l)={AΓ(l)⊤A(l−1)Γ(l)l=0 otherwise (6)
其中
Γ
(
l
)
∈
R
K
(
l
−
1
)
∗
K
(
l
)
\boldsymbol{\Gamma}^{(l)} \in \mathbb{R}^{K^{(l-1)} * K^{(l)}}
Γ(l)∈RK(l−1)∗K(l),为粗细粒度节点之间的权重。
同时,为了防止权重分配不够均匀或过于极端,我们设定损失函数
L
1
(
l
)
=
−
1
K
(
l
)
∑
k
′
=
1
K
(
l
)
γ
i
,
k
′
(
l
)
⊤
ln
γ
i
,
k
′
(
l
)
(7)
\mathcal{L}_{1}^{(l)}=-\frac{1}{K^{(l)}} \sum_{k^{\prime}=1}^{K^{(l)}} \gamma_{i, k^{\prime}}^{(l)}{ }^{\top} \ln \gamma_{i, k^{\prime}}^{(l)}\tag{7}
L1(l)=−K(l)1k′=1∑K(l)γi,k′(l)⊤lnγi,k′(l)(7)
同时为了保证用户意图的独立性,增强模型鲁棒性,我们设定损失函数:
L
2
(
l
)
=
1
K
(
l
)
∥
X
(
l
)
⊤
X
(
l
)
−
I
(
l
)
∥
2
,
(8)
\mathcal{L}_{2}^{(l)}=\frac{1}{K^{(l)}}\left\|\mathbf{X}^{(l)^{\top}} \mathbf{X}^{(l)}-\mathbf{I}^{(l)}\right\|_{2},\tag{8}
L2(l)=K(l)1∥∥∥X(l)⊤X(l)−I(l)∥∥∥2,(8)
其中,I为身份矩阵。
D. Interaction Prediction
然后我们计算各个物品在不同层次用户意图上所展现的特征
{
x
^
i
(
1
)
=
x
i
⊤
Γ
(
1
)
,
x
^
i
(
2
)
=
x
^
i
(
1
)
Γ
(
2
)
,
⋯
,
x
^
i
(
L
)
=
x
^
i
(
L
−
1
)
Γ
(
L
)
,
(9)
\left\{\begin{array}{l} \hat{x}_{i}^{(1)}=x_{i}^{\top} \Gamma^{(1)}, \\ \hat{x}_{i}^{(2)}=\hat{x}_{i}^{(1)} \Gamma^{(2)}, \\ \cdots, \\ \hat{x}_{i}^{(L)}=\hat{x}_{i}^{(L-1)} \Gamma^{(L)}, \end{array}\right.\tag{9}
⎩⎪⎪⎪⎨⎪⎪⎪⎧x^i(1)=xi⊤Γ(1),x^i(2)=x^i(1)Γ(2),⋯,x^i(L)=x^i(L−1)Γ(L),(9)
然后将各个层次物品的特征表现级联,以此融合多层次用户意图
v
i
=
x
^
i
(
1
)
∥
x
^
i
(
2
)
∥
⋯
∥
x
^
i
(
L
)
(10)
\mathbf{v}_i=\hat{x}_i^{(1)}\left\|\hat{x}_i^{(2)}\right\| \cdots \| \hat{x}_i^{(L)}\tag{10}
vi=x^i(1)∥∥∥x^i(2)∥∥∥⋯∥x^i(L)(10)
而用户嵌入则是通过可学习参数进行随机初始化:
u
j
=
[
u
j
,
1
,
…
,
u
j
,
K
(
1
)
⏟
1-st level
,
⋯
,
u
j
,
1
,
⋯
,
u
j
,
K
(
L
)
⏟
L-th level
]
(11)
\mathbf{u}_j=[\underbrace{\mathbf{u}_{j, 1}, \ldots, \mathbf{u}_{j, K(1)}}_{\text {1-st level }}, \cdots, \underbrace{\mathbf{u}_{j, 1}, \cdots, \mathbf{u}_{j, K^{(L)}}}_{\text {L-th level }}]\tag{11}
uj=[1-st level
uj,1,…,uj,K(1),⋯,L-th level
uj,1,⋯,uj,K(L)](11)
最终用户与物品的向量由三个模态下的特征和构成:
{
u
i
∗
=
u
i
v
+
u
i
a
+
u
i
t
v
j
∗
=
v
j
v
+
v
j
a
+
v
j
t
(12)
\left\{\begin{array}{l} \mathbf{u}_i^*=\mathbf{u}_i^v+\mathbf{u}_i^a+\mathbf{u}_i^t \\ \mathbf{v}_j^*=\mathbf{v}_j^v+\mathbf{v}_j^a+\mathbf{v}_j^t \end{array}\right.\tag{12}
{ui∗=uiv+uia+uitvj∗=vjv+vja+vjt(12)
E.Optimization
为了实现参数学习,我们将上面得到的物品与用户向量和他们的ID嵌入相结合
u
‾
i
=
u
^
i
∥
u
i
∗
,
v
‾
j
=
v
^
j
∥
v
j
∗
(13)
\overline{\mathbf{u}}_i=\hat{\mathbf{u}}_i\left\|\mathbf{u}_i^*, \quad \overline{\mathbf{v}}_j=\hat{\mathbf{v}}_j\right\| \mathbf{v}_j^*\tag{13}
ui=u^i∥ui∗,vj=v^j∥vj∗(13)
设定三元组
T
=
{
(
u
i
,
v
p
,
v
q
)
∣
R
i
,
p
=
1
,
R
i
,
q
=
0
}
(14)
\mathcal{T}=\left\{\left(\mathrm{u}_i, \mathrm{v}_p, \mathrm{v}_q\right) \mid \mathbf{R}_{i, p}=1, \mathbf{R}_{i, q}=0\right\}\tag{14}
T={(ui,vp,vq)∣Ri,p=1,Ri,q=0}(14)
其中
v
p
\mathrm{v}_p
vp是用户点击过的物品,
v
q
\mathrm{v}_q
vq是用户未点击的物品。
可得到损失函数:
L
3
=
∑
(
u
i
,
v
p
,
v
q
)
∈
T
−
ln
ϕ
(
u
‾
i
⊤
v
‾
p
−
u
‾
i
⊤
v
‾
q
)
,
(15)
\mathcal{L}_3=\sum_{\left(\mathrm{u}_i, \mathrm{v}_p, \mathrm{v}_q\right) \in \mathcal{T}}-\ln \phi\left(\overline{\mathbf{u}}_i^{\top} \overline{\mathbf{v}}_p-\overline{\mathbf{u}}_i^{\top} \overline{\mathbf{v}}_q\right),\tag{15}
L3=(ui,vp,vq)∈T∑−lnϕ(ui⊤vp−ui⊤vq),(15)
总体损失函数为:
L
=
λ
1
∑
l
=
1
L
L
1
+
λ
2
∑
l
=
1
L
L
2
+
L
3
+
λ
3
∥
θ
∥
2
(16)
\mathcal{L}=\lambda_1 \sum_{l=1}^L \mathcal{L}_1+\lambda_2 \sum_{l=1}^L \mathcal{L}_2+\mathcal{L}_3+\lambda_3\|\theta\|_2\tag{16}
L=λ1l=1∑LL1+λ2l=1∑LL2+L3+λ3∥θ∥2(16)
总结
文章的重点其实并不在于多模态,而是对用户意图粗细粒度的创新,通过减少物品数量提取整体特征,实现从细粒度到粗粒度的转变,再将各个层次的物品特征结合作为最终的物品向量嵌入。