前面介绍过DeepWalk,LINE,Node2Vec,SDNE几个graph embedding方法。这些方法都是基于近邻相似的假设的。其中DeepWalk,Node2Vec通过随机游走在图中采样顶点序列来构造顶点的近邻集合。LINE显式的构造邻接点对和顶点的距离为1的近邻集合。SDNE使用邻接矩阵描述顶点的近邻结构。
事实上,在一些场景中,两个不是近邻的顶点也可能拥有很高的相似性,对于这类相似性,上述方法是无法捕捉到的。Struc2Vec就是针对这类场景提出的。Struc2Vec的论文发表在2017年的KDD会议中。
Struc2Vec算法原理
相似度定义
Struc2Vec是从空间结构相似性的角度定义顶点相似度的。
用下面的图简单解释下,如果在基于近邻相似的模型中,顶点u和顶点v是不相似的,第一他们不直接相连,第二他们不共享任何邻居顶点。
而在struc2vec的假设中,顶点u和顶点v是具有空间结构相似的。他们的度数分别为5和4,分别连接3个和2个三角形结构,通过2个顶点(d,e;x,w)和网络的其他部分相连。
直观来看,具有相同度数的顶点是结构相似的,若各自邻接顶点仍然具有相同度数,那么他们的相似度就更高。
顶点对距离定义
令 R k ( u ) R_k(u) Rk(u)表示到顶点u距离为k的顶点集合,则 R 1 ( u ) R_1(u) R1(u)表示是u的直接相连近邻集合。
令 s ( S ) s(S) s(S)表示顶点集合 S S S的有序度序列。
通过比较两个顶点之间距离为k的环路上的有序度序列可以推出一种层次化衡量结构相似度的方法。
令 f k ( u , v ) f_k(u,v) fk(u,v)表示顶点u和v之间距离为k(这里的距离k实际上是指距离小于等于k的节点集合)的环路上的结构距离(注意是距离,不是相似度)。
f k ( u , v ) = f k − 1 ( u , v ) + g ( s ( R k ( u ) ) , s ( R k ( v ) ) ) , k ≥ 0 and ∣ R k ( u ) ∣ , ∣ R k ( v ) ∣ > 0 f_k(u,v)=f_{k-1}(u,v)+g(s(R_k(u)),s(R_k(v))),k\ge 0 \text{ and } |R_k(u)|,|R_k(v)|>0 fk(u,v)=fk−1(u,v)+g(s(Rk(u)),s(Rk(v))),k≥0 and ∣Rk(u)∣,∣Rk(v)∣>0
其中 g ( D 1 , D 2 ) ≥ 0 g(D_1,D_2)\ge 0 g(D1,D2)≥0是衡量有序度序列 D 1 D_1 D1和 D 2 D_2 D2的距离的函数,并且 f − 1 = 0 f_{-1}=0 f−1=0.
下面就是如何定义有序度序列之间的比较函数了,由于 s ( R k ( u ) ) s(R_k(u)) s(Rk(u))和 s ( R k ( v ) ) s(R_k(v)) s(Rk(v))的长度不同,并且可能含有重复元素。所以文章采用了**Dynamic Time Warping(DTW)**来衡量两个有序度序列。
一句话,DTW可以用来衡量两个不同长度且含有重复元素的的序列的距离(距离的定义可以自己设置)。
基于DTW,定义元素之间的距离函数
d ( a , b ) = m a x ( a , b ) m i n ( a , b ) − 1 d(a,b)=\frac{max(a,b)}{min(a,b)}-1 d(a,b)=min(a,b)max(a,b)−1
至于为什么使用这样的距离函数,这个距离函数实际上惩罚了当两个顶点的度数都比较小的时候两者的差异。举例来说,
a = 1 , b = 2 a=1,b=2 a=1,b=2情况下的距离为1, a = 101 , b = 102 a=101,b=102 a=101,b=102情况下的距离差异为0.0099。这个特性正是我们想要的。
构建层次带权图
根据上一节的距离定义,对于每一个 k k k我们都可以计算出两个顶点之间的一个距离,现在要做的是通过上一节得到的顶点之间的有序度序列距离来构建一个层次化的带权图(用于后续的随机游走)。
我们定义在某一层 k k k中两个顶点的边权为 w k ( u , v ) = e − f k ( u , v ) , k = 0 , . . . , k ∗ w_k(u,v)=e^{-f_k(u,v)},k=0,...,k^* wk(u,v)=e−fk(u,v),k=0,...,k∗
这样定义的边权都是小于1的,当且仅当距离为0的是时候,边权为1。
通过有向边将属于不同层次的同一顶点连接起来,具体来说,对每个顶点,都会和其对应的上层顶点还有下层顶点相连。边权定义为
w ( u k , u k + 1 ) = log ( Γ k ( u ) + e ) , k = 0 , . . . , k ∗ − 1 w(u_k,u_{k+1})=\log{(\Gamma_{k}(u)+e)},k=0,...,k^*-1 w(uk,u