概述
文章通过对知识图谱结构的数学分析,结合相关工作,提出了一种针对大型图的community聚类算法。提出了图上两个community之间的距离定义,并根据定义提出了一种基于Random Walks的快速算法,提高了运算效率。
思路分析
对于community的定义是困难的,在不同的文章中有很多不同的定义,这样的模式是不利于对community分析总结工作的成果共享的。文中指出,大部分人对community的共识如下:
P
=
{
C
1
,
.
.
.
.
.
.
,
C
k
}
P = \{C_1, ......, C_k\}
P={C1,......,Ck} 是图
G
=
(
V
,
E
)
G = (V, E)
G=(V,E)上的一个分割,即
(
∀
i
,
C
i
⊆
V
)
(\forall i, C_i \subseteq V)
(∀i,Ci⊆V),当
C
i
C_i
Ci中的边比
C
i
C_i
Ci之间的边的比率大,那么这个community的分割就是好的。
通俗点说,一个community内的点相连的边看上去要比与其他community的点相连的边多很多。这篇文章集中于对于community内的边的稠密度,来进行community的聚类。注意到,Random Walks的性质,从graph中提取的walk序列总是倾向于在一个稠密连接的区域取值,仿佛是被困在一个区域,这个区域便对应一个community。因此文章利用一些Random Walks的特性,提出了不同图中节点的差异性大小的定义,和不同community之间的差异性定义,在文中称其为距离(distance)。期待利用distance区分不同的community。相对于之前对于community的聚类工作,本文中的工作不需要提供community的个数需求和大小需求,在图上实现自动的community划分。
Random Walks
文中对于Random Walks的思考停留在一阶,也即是当前walk节点的取值只与前一个节点取值有关,即产生的walk链具有马尔科夫性,是一条Markov Chain,每个state是图中的节点。文中只考虑了对于无权重的网络的分析,引入了无权重网络结构的邻接矩阵
A
:
A
i
j
=
1
如
果
i
j
之
间
有
边
连
接
,
否
则
A
i
j
=
0
A:A_{ij} = 1如果ij之间有边连接,否则A_{ij} = 0
A:Aij=1如果ij之间有边连接,否则Aij=0,文中声称若是网络有权重,只需要将
A
i
j
A_{ij}
Aij的值域从
A
i
j
∈
{
0
,
1
}
A_{ij} \in \{0, 1\}
Aij∈{0,1}扩展为
A
i
j
∈
R
+
A_{ij} \in {\mathbb R}^+
Aij∈R+就可以了。
对于一个无权重的网络结构,可以有以下数学描述:
度
数
矩
阵
D
:
∀
i
,
D
i
i
=
d
(
i
)
a
n
d
D
i
j
=
0
f
o
r
i
≠
j
度数矩阵D:\forall i,D_{ii} = d(i) \space and \space D_{ij} = 0 \space for \space i \neq j
度数矩阵D:∀i,Dii=d(i) and Dij=0 for i=j;
转
移
概
率
矩
阵
P
=
D
−
1
A
,
即
P
i
j
=
A
i
j
d
(
i
)
转移概率矩阵P = D^{-1}A,即P_{ij} = \frac{A_{ij}}{d(i)}
转移概率矩阵P=D−1A,即Pij=d(i)Aij;
通过转移概率矩阵,我们可以算出从节点
i
i
i到
j
j
j经过
t
t
t步的转移概率为
(
P
t
)
i
j
(P^t)_{ij}
(Pt)ij,简记为
P
i
j
t
P^t_{ij}
Pijt。
文中提出了
P
i
j
t
P^t_{ij}
Pijt的两个特性,这里略去具体的证明过程,但是根据经验理解,也可以明白其具体的含义:
Property 1:
∀
i
,
lim
t
→
+
∞
P
i
j
t
=
d
(
j
)
∑
k
d
(
k
)
\forall i, \lim \limits_{t \rightarrow +\infty}{P^t_{ij}} = \frac {d(j)}{\sum_{k} d(k)}
∀i,t→+∞limPijt=∑kd(k)d(j)
Property 2:
∀
i
,
∀
j
,
d
(
i
)
P
i
j
t
=
d
(
j
)
P
j
i
t
\forall i, \forall j, d(i)P^t_{ij} = d(j)P^t_{ji}
∀i,∀j,d(i)Pijt=d(j)Pjit
由Property 1我们可以看出,random walks的步长太长的话,最终转移概率只跟图上各个节点的度数有关,无法体现转移矩阵的意义了,但是步长太短又不足以获取足够的信息,因此需要控制
t
t
t的大小。由Property 2我们可以知道最终
t
t
t步转移矩阵的信息是有冗余的,这点可能会方便我们节省计算和空间。
节点
i
i
i相关的信息都被存储在
P
t
P^t
Pt的第
i
i
i行,
(
P
i
k
t
)
1
≤
k
≤
n
(P^t_{ik})_{1 \leq k \leq n}
(Pikt)1≤k≤n,简记为
P
i
⋅
t
P^t_{i \cdot}
Pi⋅t。
节点距离
节点距离和community距离的定义
为了定义距离,文中提出了三点需要考虑的部分:
- 如果节点 i i i和节点 j j j在同一个community中,那么 P i j t P^t_{ij} Pijt的值当然是高的,但是这并不代表如果 P i j t P^t_{ij} Pijt的值很高,节点 i i i, j j j便会在同一个community中。
- walker很容易走向度数高的节点,因此 P i j t P^t_{ij} Pijt是受终止节点的度数d(j)影响的。
- 属于同一个community的两个点看待其他点的视角应该是相近的,如果
i
i
i,
j
j
j是同一个community中的点,理论上存在
∀
k
,
P
i
k
t
≈
P
j
k
t
\forall k,P^t_{ik} \approx P^t_{jk}
∀k,Pikt≈Pjkt。
因此提出以下两个定义:
Definition 1:
r i j = ∑ k = 1 n ( P i k t − P j k t ) 2 d ( k ) = ∣ ∣ D − 1 2 P i ⋅ t − D − 1 2 P j ⋅ t ∣ ∣ r_{ij} = \sqrt {\sum_{k=1}^{n}\frac{(P^t_{ik} - P^t_{jk})^2}{d(k)}} = ||D^{-\frac{1}{2}}P^t_{i\cdot}-D^{-\frac{1}{2}}P^t_{j\cdot}|| rij=k=1∑nd(k)(Pikt−Pjkt)2=∣∣D−21Pi⋅t−D−21Pj⋅t∣∣
Definition 2:
r C 1 C 2 = ∣ ∣ D − 1 2 P C 1 ⋅ t − D − 1 2 P C 2 ⋅ t ∣ ∣ r_{C_1C_2}=||D^{-\frac{1}{2}}P^t_{C_1\cdot}-D^{-\frac{1}{2}}P^t_{C_2\cdot}|| rC1C2=∣∣D−21PC1⋅t−D−21PC2⋅t∣∣
其中
P C j t = ∑ i ∈ C P i j t P^t_{C_j} = \sum_{i \in C}P^t_{ij} PCjt=i∈C∑Pijt
Definition 2和Definition 1的定义是连续的,把community缩减为一个点,那么两者是相等的,即 r i j = r { i } { j } r_{ij} = r_{\{i\}\{j\}} rij=r{i}{j}。
为了表示距离的定义与图矩阵的光谱性质的对应,文章证明了以下结果:
r i j 2 = ∑ α = 2 n λ α 2 t ( v α ( i ) − v α ( j ) ) 2 r^2_{ij} = \sum_{\alpha = 2}^n \lambda^{2t}_\alpha (v_\alpha(i) - v_\alpha(j))^2 rij2=α=2∑nλα2t(vα(i)−vα(j))2
具体证明过程在这里不陈述了。基本的思路就是利用矩阵的特征值以及左右特征向量进行化简和转化,最终得到期望的结论。
这个结果表明,作者的方法与之前完成的community 聚类工作是有很大相关性的,新定义的距离模型,并不是独立于之前工作的,为本文的工作提供了立足点和参考依据。同时表明了,本文工作只需统计 P i j t P^t_{ij} Pijt便可以达成之前需要对矩阵进行分解分析等复杂工作才能达到的目标。实现了数学方面的简化。
距离r的计算
通过对距离
r
r
r的定义,可以发现只需计算出
P
i
⋅
t
P^t_{i \cdot}
Pi⋅t和
P
j
⋅
t
P^t_{j \cdot}
Pj⋅t,便能在
O
(
n
)
O(n)
O(n)时间内完成对
r
i
j
r_{ij}
rij的计算。对于
r
C
i
C
j
r_{C_iC_j}
rCiCj也是一样。而
P
t
P^t
Pt可以计算并存储在
O
(
n
2
)
O(n^2)
O(n2)的空间中。对于
P
i
⋅
t
P^t_{i \cdot}
Pi⋅t的计算,文章提出了两种做法:
精确计算:
P
i
⋅
P_{i\cdot}
Pi⋅的计算直接一点就是
P
P
P自乘
t
t
t次,然后区第
i
i
i行。因为在现实中的图是稀疏的,因此计算复杂度为
O
(
t
m
)
O(tm)
O(tm)。(这里是我的理解,文中的
O
(
n
)
O(n)
O(n)初始化过程应该对应取指定行的过程)
近似计算:
计算
K
K
K个以
i
i
i为起点的长度为
t
t
t的随机游走路径。那么可以近似的认为
P
i
k
t
≈
N
i
k
K
P^t_{ik} \approx \frac{N_{ik}}{K}
Pikt≈KNik,其中
N
i
k
N_{ik}
Nik表示从节点
i
i
i开始,以
k
k
k为结束节点的路径的个数。时间花销为
K
K
K个
t
t
t步游走的时间
O
(
K
t
)
O(Kt)
O(Kt),空间花销为
O
(
K
)
O(K)
O(K),只需要记录终止节点就行。相对误差为
1
K
\frac{1}{\sqrt K}
K1。
近似计算只在超级大图上效果比较明显。
距离的概括抽象(数学抽象,可先跳过)
在精确计算中,可以看出,距离与矩阵
P
P
P的关系很密切。如果我们对于距离定义的权中需求有变化,或者需要扩展距离的定义,那么如何处理,如何计算新的定义的结果呢?
文章提出了一个概括的距离定义:
r
^
i
j
2
=
∑
α
=
2
n
f
2
(
λ
α
)
(
v
α
(
i
)
−
v
α
(
j
)
)
2
\hat{r}^2_{ij} = \sum_{\alpha = 2}^n f^2(\lambda_\alpha)(v_\alpha(i) - v_\alpha(j))^2
r^ij2=α=2∑nf2(λα)(vα(i)−vα(j))2
其中
f
(
x
)
=
∑
k
=
0
∞
c
k
x
k
f(x) = \sum_{k=0}^\infty c_kx^k
f(x)=k=0∑∞ckxk
所以有
r
^
i
j
=
∣
∣
D
−
1
2
P
^
i
⋅
−
D
−
1
2
P
^
j
⋅
∣
∣
\hat{r}_{ij} = ||D^{-\frac{1}{2}} \hat{P}_{i \cdot} - D^{-\frac{1}{2}} \hat{P}_{j \cdot}||
r^ij=∣∣D−21P^i⋅−D−21P^j⋅∣∣
我们可以利用将多项式保留前
r
r
r项的方式,近似地计算
P
^
i
j
≈
∑
k
=
0
r
c
k
P
i
⋅
k
\hat{P}_{ij} \approx \sum_{k=0}^rc_kP^k_{i \cdot}
P^ij≈∑k=0rckPi⋅k。这个计算可以在
O
(
r
m
)
O(rm)
O(rm)时间内,占用
O
(
n
)
O(n)
O(n)的空间完成。
作者接下来举了个利用此抽象的例子,姑且在这里把他的例子记录下来了。
在我们的问题中,选择步长为
t
t
t的随机游走,有时候会碰到一些限制,导致无法达成。为了解决这个问题,可以利用连续的随机游走过程,把每一步看成连续的一部分,即总体为
t
t
t,每走一步当成微分
d
t
dt
dt。于是有每一步转移的概率为
P
i
j
d
t
P_{ij}dt
Pijdt。可证明,经过
t
t
t步从节点
i
i
i到
j
j
j的转移概率矩阵为
e
t
(
P
−
I
d
)
e^{t(P-Id)}
et(P−Id)。于是有
r
^
i
j
2
=
∑
α
=
2
n
e
2
t
(
λ
α
−
1
)
(
v
α
(
i
)
−
v
α
(
i
)
)
2
\hat{r}^2_{ij} = \sum_{\alpha=2}^ne^{2t(\lambda_\alpha-1)}(v_\alpha(i)-v_\alpha(i))^2
r^ij2=∑α=2ne2t(λα−1)(vα(i)−vα(i))2。
我们就能类比似的获得连续假设下的距离定义了。
算法设计
基本的算法遵循以下模块:
- 初始化分割 P 1 = { { v } , v ∈ V } \mathcal{P}_1 = \{\{v\}, v \in V\} P1={{v},v∈V}。
- 通过计算,选择两个 P k \mathcal{P}_k Pk中的两个community C 1 C_1 C1, C 2 C_2 C2;
- 根据规则合并 C 1 C_1 C1, C 2 C_2 C2形成 C 3 C_3 C3,创建新的分割 P k + 1 = ( P k \ { C 1 , C 2 } ) ⋃ { C 3 } \mathcal{P}_{k+1} = (\mathcal{P}_k \backslash \{C_1, C_2\}) \bigcup \{C_3\} Pk+1=(Pk\{C1,C2})⋃{C3};
- 更新community之间的距离,实际上只需要计算相邻的community之间的距离就行;
- 重复2, 3 ,4,直到
P
n
=
{
V
}
\mathcal{P_n} = \{V\}
Pn={V};
实际上,每一步得到的 P k \mathcal{P}_k Pk可以看成是community的分层结构,类似树状的组织,叶子节点是每个vertex。
目标是如何选择合并的两个community,如何快速的更新距离,以及如何评价分割结果的好坏,以挑选最好的 P k \mathcal{P}_k Pk为算法最终的结果。
选择用以合并的community
结合之前已经完成的工作,本文采用最小化
σ
k
\sigma_k
σk的方式进行对于待合并community的选择。
σ
k
=
1
n
∑
C
∈
P
k
∑
i
∈
C
r
i
C
2
\sigma_k = \frac{1}{n}\sum_{C \in \mathcal{P}_k}\sum_{i \in C}r^2_{iC}
σk=n1C∈Pk∑i∈C∑riC2
注意到很多合并前后的
σ
k
\sigma_k
σk的值有很多重复计算,因此计算最小增量
Δ
σ
(
C
1
,
C
2
)
\Delta\sigma(C_1, C_2)
Δσ(C1,C2)就可以判断合并
C
1
C_1
C1,
C
2
C_2
C2是否能达到最优
σ
k
\sigma_k
σk。
Δ
σ
(
C
1
,
C
2
)
=
1
n
(
∑
i
∈
C
3
r
i
C
3
2
−
∑
i
∈
C
1
r
i
C
1
2
−
∑
i
∈
C
2
r
i
C
2
2
)
\Delta\sigma(C_1, C_2) = \frac{1}{n}(\sum_{i \in C_3}r^2_{iC_3}-\sum_{i \in C_1}r^2_{iC_1}-\sum_{i \in C_2}r^2_{iC_2})
Δσ(C1,C2)=n1(i∈C3∑riC32−i∈C1∑riC12−i∈C2∑riC22)
计算 Δ σ \Delta\sigma Δσ
为了快速计算,文中引用了两个定理:
Theorem 5
Δ
σ
(
C
1
,
C
2
)
=
1
n
∣
C
1
∣
∣
C
2
∣
∣
C
1
∣
+
∣
C
2
∣
r
C
1
C
2
2
\Delta\sigma(C_1, C_2) = \frac{1}{n}\frac{|C_1||C_2|}{|C_1| + |C_2|}r^2_{C_1C_2}
Δσ(C1,C2)=n1∣C1∣+∣C2∣∣C1∣∣C2∣rC1C22
上述定义表明,计算
Δ
σ
\Delta\sigma
Δσ只需要更新community之间的距离就可以了,不需要点之间以及点和community的运算。
Theorem 6
Δ
σ
(
C
3
,
C
)
=
(
∣
C
1
∣
+
∣
C
∣
)
Δ
σ
(
C
1
,
C
)
+
(
∣
C
2
∣
+
∣
C
∣
)
Δ
σ
(
C
2
,
C
)
−
(
∣
C
1
∣
+
∣
C
2
∣
)
Δ
σ
(
C
1
,
C
2
)
∣
C
1
∣
+
∣
C
2
∣
+
∣
C
∣
\Delta\sigma(C_3, C) = \frac{(|C_1|+|C|)\Delta\sigma(C_1,C)+(|C_2|+|C|)\Delta\sigma(C_2,C)-(|C_1|+|C_2|)\Delta\sigma(C_1,C_2)}{|C_1|+|C_2|+|C|}
Δσ(C3,C)=∣C1∣+∣C2∣+∣C∣(∣C1∣+∣C∣)Δσ(C1,C)+(∣C2∣+∣C∣)Δσ(C2,C)−(∣C1∣+∣C2∣)Δσ(C1,C2)
其中
C
1
C_1
C1,
C
2
C_2
C2合成
C
3
C_3
C3,
C
C
C为
C
1
C_1
C1,
C
2
C_2
C2,
C
3
C_3
C3以外的community。
上述定理给出了常数时间内计算
Δ
σ
\Delta\sigma
Δσ的方法,前提是已知
C
1
C_1
C1,
C
2
C_2
C2,
C
C
C之间互相的
Δ
σ
\Delta\sigma
Δσ的值。
由以上两个定理,我们发现,只需要更新community之间的距离
r
r
r,便可以快速求
Δ
σ
\Delta\sigma
Δσ。还可以利用已知信息,在特殊情况下常数时间内求出新的
Δ
σ
\Delta\sigma
Δσ。计算量上大大简化。
P k \mathcal{P}_k Pk的评价指标
文章提出了不同的指标,最为了与已有的成果进行比较,采用了比较通用的
m
o
d
u
l
a
r
i
t
y
Q
modularity \space Q
modularity Q:
Q
(
P
)
=
∑
C
∈
P
e
C
−
a
C
2
Q(\mathcal{P}) = \sum_{C \in \mathcal{P}}e_C - a^2_C
Q(P)=C∈P∑eC−aC2
其中:
e
C
e_C
eC是community
C
C
C内部的边的数目比例,
a
C
a_C
aC是连接community
C
C
C的边的数目比例。