一种基于二跳图的超图迭代方法及其应用转让专利

申请号 : CN201910345024.3

文献号 : CN110110157A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 谷峪于凯强姚硕

申请人 : 东北大学

摘要 :

本发明提供了一种基于二跳图的超图迭代方法及其应用,通过构建二跳图,使超边之间直接进行通信并完成超边的更新,从而加快超图任务的迭代处理速度。构建二跳图步骤:在含有公共顶点的超边之间搭建一条边,超边保存其度的大小和分配的顶点信息;顶点分配步骤:分配仅被一条超边包含的顶点,再配超边的公共顶点;获取公共顶点信息步骤:分析不同的超图任务,确定适用于二跳图的消息值公式和超边值公式,确定每条超边要保存的公共顶点信息;将基于二跳图进行迭代处理分别与基于Push和Pull的消息获取机制结合本发明在多个数据集和超图学习算法上进行实验,实验结果验证了其高效性和可扩展性。

权利要求 :

1.一种基于二跳图的超图迭代方法,其特征在于:包括:

步骤1:将原始超图转化成二跳图;

由原始超图G=(V,H)转化成的二跳图为G*=(V*,H*),若两个超边有公共的顶点,则在这两个超边之间构造一条边得到二跳图的拓扑结构,对于二跳图中的每个超边hi需要保存其度的大小以及分配给超边hi保存的顶点;此外,超边hi需要保存hi和其邻居超边hj所包含的公共顶点u的信息;

其中,hj∈N(hi),V*=H,H*={{hi,hj}:u∈hi,u∈hj,hi∈H,hj∈H};V是一个有限集合,该集合的元素被称为顶点,即V={v0,v1,…vm};H是V的非空子集的集合,该集合的元素被称为超边,即H={h0,h1,…hn},hj∈N(hi),N(hi)为与每个顶点相关的所有超边构成超边hi的邻居超边集合;

在顶点v的相关超边集合Γ(v)中,每个超边包含的全部顶点,构成顶点v的邻居顶点集合N(v),即N(v)={vk:vk∈Γ(h)∧vk≠v,h∈Γ(v)};在超边h的相关顶点集合Γ(h)中,与每个顶点相关的所有超边构成超边h的邻居超边集合N(h),即N(h)={hk:hk∈Γ(v)∧hk≠h,v∈Γ(h)},与超边h相关的所有顶点构成的集合记作Γ(h),顶点v相关的所有超边构成的集合记作Γ(v);

步骤2:将二跳图的各顶点分配到相关超边;

若共执行N个超步,在执行最后一个超步时,每个超边保存的顶点需要进行更新,因此需要将顶点vi分配到与它相关的超边hi中;

步骤2-1:找到只存在于唯一一个超边中的所有顶点,遍历所有超边,将当前正在处理的超边记作curH,将当前正在处理的超边curH包含的所有顶点记作Γ(curH),若Γ(curH)中的顶点vi满足vi.deg=1,则顶点vi只有1个相关超边,顶点vi只存在于当前超边curH中;

对于只存在于当前超边curH的顶点vi,该顶点需要由当前超边curH保存;

使用长度为|H|的数组assignArr记录每个超边已经保存的顶点;

使用长度为|H|的数组keepArr记录每个超边已经保存的顶点数量;

使用长度为k的数组rangeArr记录每个partition中已经保存的顶点数量,其中k是Range划分时指定的partition数量;

如果超边curH需要保存一个新的顶点,那么keepArr[curH]和rangeArr[curH]需要增加1;遍历所有超边,找到只存在于一个超边中的所有顶点;

步骤2-2:遍历所有的顶点,将当前正在处理的顶点记为curV;如果curV只存在于一个超边中,则跳过对该顶点的处理;否则,对于与curV相关的每个超边hi,首先找到已经保存顶点数量最少的partition,记作Min(rangeArr[Γ(curV)]),然后在Min(rangeArr[hi])对应的partition中找到已经保存顶点数量最少的超边minH,minH就是保存当前顶点curV的超边;

步骤2-3:所有顶点得到需要保存它们的超边之后,在步骤2-1中得到的顶点当获取它所在的超边的消息时进行更新,而在步骤2-2中得到的顶点当获取它所在的超边的消息以及它所在超边的邻居超边的消息时进行更新;

步骤3:基于二跳图进行迭代处理;

在执行第1个超步时,每个超边利用自己保存的顶点信息计算出超边的初始值,然后生成消息发送给邻居超边;在执行第2至第N-1个超步时,每个超边使用得到的邻居超边的消息更新自己的超边值,然后为邻居超边生成相应的消息;在执行第N个超步时,每个超边中的顶点使用其相关超边的消息进行更新。

2.权利要求1所述的一种基于二跳图的超图迭代方法的应用,其特征在于:用于单源最短超边路径算法Single Source Shortest Hyperedge Path的具体步骤为:在第1个超步,起始顶点的值设置为0,其余顶点值设置为无限大INF;之后的每个超步,如果顶点v收到的所有消息中的最小值min比自己的值小,则顶点v将自身的值更新为min,如式(1)所示;

如果顶点v的值发生了更新,顶点v将自己更新后的值发送给它的相关超边,如公式(2)所示;

如果超边h收到的所有消息中的最小值min比自己的值小,那么超边h把自己的值更新为min,如式(3)所示;

如果超边h的值发生了更新,超边h将更新后的值加1作为消息值发送给它的相关顶点,如式(4)所示;

v.msg=v.val                               (2)h.msg=h.val+1                              (4)其中M(h)是向超边h发送消息的顶点集合,M(v)是向顶点v发送消息的超边集合,顶点v相关的所有超边构成的集合记作Γ(v),v.val表示顶点值,h.val表示超边值,v.msg表示顶点发送的消息值,h.msg表示超边发送的消息值;min(h.msgs)表示顶点接收到的最小消息值,min(v.msgs)表示超边接收到的最小消息值;itr表示当前的超步数,start表示初始顶点集合;

将式(1)和式(2)带入式(3)中,得到式(5),式(5)为二跳图中超边的更新公式,起始顶点所在超边的初始值等于0,其他超边的初始值是无限大INF;

v.val=min(h.msgs),h∈Γ(v)                          (7)其中,Ω(h)是向超边h发送消息的超边集合,N(h)是超边h的邻居超边集合;min(p.msgs)二跳图中超边接收到最小消息值,last表示最后一个超步;

在二跳图中,超边发送的消息如式(6)所示;最后一个超步,每个超边保存的顶点获取与它相关的所有超边的消息进行更新,顶点的更新如式(7)所示。

3.权利要求1所述的一种基于二跳图的超图迭代方法的应用,其特征在于:用于超图连通分量算法Connected Components的具体步骤为:在第1个超步,每个顶点使用自己的顶点编号初始化顶点值;之后的每个超步,如果顶点v收到的所有消息中的最大值max比自己的值大,那么顶点v把自己的值更新为max,如式(8)所示;

之后,顶点v将自己的值发送给它的相关超边,如公式(9)所示;

如果超边h收到的所有消息中的最大值max比自己的值大,那么超边h把自己的值更新为max,如式(10)所示;

之后,超边h自己的值作为消息值发送给它的相关顶点,如式(11)所示;

v.msg=v.val                                 (9)h.val=max(v.msgs),v∈Γ(h)                         (10)h.msg=h.val                                (11)其中,与超边h相关的所有顶点构成的集合记作Γ(h);max(v.msgs)表示超边接收到的最大消息值;max(h.msgs)表示顶点接收到的最大消息值;

将式(8)和式(9)带入式(10)中,得到超图连通分量算法Connected Components在二跳图中超边的更新公式(12),即如果超边h从它的邻居超边收到的最大消息值max大于超边h的值,那么超边h使用max更新自己的值;在二跳图中,超边h发送的消息值仍然如式(11)所示,最后一个超步顶点的计算公式如式(13)所示;

v.val=max(h.msg),h∈Γ(v)                         (13)其中,max(p.msgs)表示超边接收到的最大消息值;

上述二跳图上超图连通分量算法Connected Components的更新过程中,由于超边在第

1个超步会将与它相关的所有顶点的最大编号更新为自己的值,因此每个超边需要保存与它相关的最大顶点编号maxVId,式(12)中第一个超步中超边值即为maxVId。

4.权利要求1所述的一种基于二跳图的超图迭代方法的应用,其特征在于:用于超图PageRank算法的具体步骤为:

超图PageRank算法中,顶点初始值为d,d是0和1之间的常数,顶点值计算公式如式(14)所示;

顶点发送给相关超边的消息如式(15)所示;

超边将收到的顶点消息值作为自己的超边值,如式(16)所示;

超边发送给相关顶点的消息值如式(17)所示;

v.msg=v.val/v.deg                             (15)h.val=sum(v.msgs),v∈Γ(h)                          (16)h.msg=h.val/h.deg                             (17)其中,sum(h.msgs)表示顶点接收到的消息值的和;

将式(14)和式(15)带入式(16)中,即可得到二跳图中超边的计算公式(18),式中v∈Γ(h),p∈N(h),q∈Γ(h)∩Γ(p), 是超边h中所有顶点的倒数和,令msg就是最后一个超步前超边h收到的它的邻居超边发来的消息,则式(18)可以写成式(19)的形式;

其中,p是超边h的邻居超边,q是超边h和邻居超边p的公共顶点,p.val是邻居超边p的值,p.deg是超边p的度,q.deg是顶点q的度,Γ(p)表示邻居超边p相关的所有顶点构成的集合;

在二跳图中,超边h向超边p发送的消息如式(20)所示,其中p∈N(h),q∈Γ(h)∩Γ(p);最后一个超步,超边中保存的顶点的更新公式为式(14)中itr>1的情况。

5.权利要求1所述的一种基于二跳图的超图迭代方法的应用,其特征在于:用于超图随机游走算法Random Walks的具体步骤为:

超图随机游走算法中,如果顶点在初始顶点集中,顶点值为1,否则为0;在之后的迭代过程中,顶点值计算公式如式(21)所示;

顶点发送给相关超边的消息如式(22)所示;

超边更新公式如式(23)所示;

超边发送给相关顶点的消息值如式(24)所示;

v.msg=v.val/v.deg                              (22)h.val=v.msgs/h.deg,v∈Γ(h)                         (23)h.msg=h.val                                (24)其中,r是超图随机游走算法Random Walks中的重启概率;

将式(21)和式(22)带入式(23)中,即可得到Random Walks在二跳图中超边的计算公式(25),式中v∈Γ(h),p∈N(h),q∈Γ(h)∩Γ(p),s∈Γ(h)∩startSet,startSet是初始顶点集合, 是超边h中所有顶点的倒数和;接下来如果令 令令 msg是最后一个超步前超边h收到的它的邻

居超边发来的消息,则式(25)可以写成式(26)的形式;

h.val=((1-r)×(h.val×h.vInfo+∑msg)+h.startVal)/h.deg              (26)在二跳图中,超边h向超边p发送的消息如式(27)所示,其中p∈N(h),q∈Γ(h)∩Γ(p);最后一个超步,超边中保存的顶点的更新为式(21)中itr>1的情况。

说明书 :

一种基于二跳图的超图迭代方法及其应用

技术领域

[0001] 本发明属于计算机大规模图数据处理领域,尤其涉及一种基于二跳图的超图迭代方法及其应用。

背景技术

[0002] 在机器学习问题的设定中,通常假设对象之间的关系是二元的,所以可以很自然地使用图模型对这样的二元关系进行建模,图中的每个顶点代表一个对象,每条边代表两个对象之间的关系。这样的图可以是有向的或者是无向的,取决于对象之间的二元关系是否为对称的。例如,一个社区中的好友关系可以组成一个无向图。至于有向图,一个众所周知的实例就是万维网。网页中的一个超链接可以被看作是一条有向边,因为假设网页A有一个超链接到网页B,网页B可能不会有一个超链接到网页A,也就是说,基于超链接的关系是不对称的。
[0003] 然而,在许多实际的应用中,使用有向图或无向图往往不能完全地表达对象之间复杂的关系。解决上述方法中信息缺失问题的一个自然的方式是用超图来组织数据,对象间的复杂的关系可以使用超图模型完整地呈现。超图作为一种数据模型,已经被广泛地应用在不同的机器学习任务中。超图可以被应用在推荐系统、文本检索、图像检索、多媒体以及生物信息学等许多数据挖掘和信息检索的任务中。在这些应用中,超图学习算法都能展现出很高的有效性。这样的有效性是因为每个超边可以连接多个顶点,完美地捕获了高阶关系。因为许多实际的计算问题都与超图有关,许多超图算法在不同的应用中都展现出很高的有效性,所以研究面向大规模超图数据的高效迭代方法具有重要的意义。
[0004] 在大数据时代,随着超图数据规模的不断增加,现有的集中式算法和系统无法满足存储和计算性能的需求,采用分布式的框架进行高效的数据处理成为了必然的选择。虽然分布式图迭代处理技术已经得到了广泛的研究,但超图数据具有多元异构、偏斜分布以及结构多态等特点,导致现有的分布式图处理系统在处理超图分析任务时效率低下且功能受限,这为研究新的超图数据迭代处理技术带来了机遇和挑战。特别地,为了提高分布式超图迭代处理系统的性能,面临着以下三个方面的典型挑战。
[0005] 挑战一:超图数据的规模膨胀。通过星扩展方法将超图转化成二分图或者通过团扩展方法将超图转化成团扩展图,转化后图的规模可能会膨胀几个数量级。因此,为了解决超图数据的海量性和规模膨胀带来的存储和迭代处理问题,需要研究针对超图数据的存储压缩方法、减少迭代次数的迭代处理方法以及避免水桶效应的负载均衡策略。此外,由于转化后的图中存在大量的边,超图任务迭代处理过程中沿图中的边传递的消息数据规模宏大,为了减少顶点和超边之间收发的消息数量,降低通信开销,研究消息的剪枝策略是十分必要的。进一步,超图数据量和迭代过程中产生的消息数据量急剧增加时,需要考虑磁盘驻留的情况,研究I/O高效的超图迭代处理技术是解决这一问题的必要手段。
[0006] 挑战二:超图结构的异质多态。超图结构复杂多样,不同的超图数据的规模、超边和顶点的相对数量、超边和顶点的度分布都大不相同,顶点和超边都可能存在着偏斜分布。此外,超图中每个超边是顶点集合的非空子集,使得超边之间存在大量的相交关系和包含关系。同理,顶点之间同样存在相交关系和包含关系。因此,超图数据中的结构关系是复杂多态的,除了常见的顶点与超边的相关关系,还包括顶点和顶点之间、超边和超边之间的相交关系与包含关系。由于超图数据含有异构的两种地位相同的实体、偏斜更加严重,并且超图数据中的关系复杂多态,因此与普通图模型相比,超图数据的划分与迭代处理更加复杂。
[0007] 挑战三:超图计算的复杂性。现有的分布式超图迭代处理系统分析超图分析任务时方法单一,即顶点和超边分别使用对方产生的消息依次进行更新直至收敛。然而,超图数据偏斜分布且超图任务多种多样,导致在超图任务迭代处理过程中,达到收敛状态的顶点和超边数量非线性变化,无法采用简单的模型预测活跃的顶点和超边状态。此外,不同顶点和超边有着多样化的消息交互行为,消息收发的数据量存在不均衡和动态变化的特点。因此,针对偏斜分布的超图数据、非线性收敛的超图任务以及动态变化的负载,需要设计自适应的超图迭代处理方法,以实现高效的超图任务的迭代处理。
[0008] 综上可见,超图数据的迭代处理技术有着十分重要的现实价值,同时存在着全新的技术挑战。现有的分布式图计算系统处理超图任务的效率低下,而少量现有的分布式超图迭代处理系统缺乏超图数据和超图任务感知的优化技术,处理效率很难满足大数据分析的需求。本发明在总结现有的普通图数据和超图数据的管理与计算技术的基础上,深入研究面向超图数据的迭代处理和通信优化技术,提出高效的全新超图数据处理方法,从而支撑大数据背景下复杂超图数据的高效分析。

发明内容

[0009] 在大数据时代,随着超图数据规模的不断增加,现有的集中式算法和系统无法满足存储和计算性能的需求,采用分布式的框架进行高效的数据处理成为了必然的选择。通过分析基于二分图的超图迭代处理过程,发现可以通过构建二跳图,使超边之间直接进行通信并完成超边的更新,从而加快超图任务的迭代处理速度。本发明主要包含有以下三个部分:
[0010] 1)首先通过对二分图迭代处理过程的分析,提出将超图转化成二跳图的构建方法,让消息直接从一个超边传递给另一个超边,即消息跨越超图中的顶点直接在超边之间进行传递,从而减少迭代次数,使算法更快地收敛;
[0011] 2)将顶点vi分配到与它相关的某个超边hi中,并让不同节点中的超边保存的顶点数量尽可能均衡,从而使最后一个超步中不同节点中的顶点计算负载均衡。
[0012] 3)之后,为了保证基于二跳图的超图迭代处理方法的正确性,针对不同类型的超图学习算法,本发明对其进行了深入的分析,从而确定每个超边需要保存的公共顶点信息。
[0013] 为了克服现有技术的不足,本发明提供了一种基于二跳图的超图迭代方法,所采用的技术方案为:
[0014] 步骤1:将原始超图转化成二跳图;
[0015] 由原始超图G=(V,H)转化成的二跳图为G*=(V*,H*),若两个超边有公共的顶点,则在这两个超边之间构造一条边得到二跳图的拓扑结构,对于二跳图中的每个超边hi需要保存其度的大小以及分配给超边hi保存的顶点;此外,超边hi需要保存hi和其邻居超边hj所包含的公共顶点u的信息;
[0016] 其中,hj∈N(hi),V*=H,H*={{hi,hj}:u∈hi,u∈hj,hi∈H,hj∈H};V是一个有限集合,该集合的元素被称为顶点,即V={v0,v1,…vm};H是V的非空子集的集合,该集合的元素被称为超边,即H={h0,h1,…hn},hj∈N(hi),N(hi)为与每个顶点相关的所有超边构成超边hi的邻居超边集合;
[0017] 在顶点v的相关超边集合Γ(v)中,每个超边包含的全部顶点,构成顶点v的邻居顶点集合N(v),即N(v)={vk:vk∈Γ(h)∧vk≠v,h∈Γ(v)};在超边h的相关顶点集合Γ(h)中,与每个顶点相关的所有超边构成超边h的邻居超边集合N(h),即N(h)={hk:hk∈Γ(v)∧hk≠h,v∈Γ(h)},与超边h相关的所有顶点构成的集合记作Γ(h),顶点v相关的所有超边构成的集合记作Γ(v);
[0018] 步骤2:将二跳图的各顶点分配到相关超边;
[0019] 将若共执行N个超步,在执行最后一个超步时,每个超边保存的顶点需要进行更新,因此需要将顶点vi分配到与它相关的超边hi中;
[0020] 步骤2-1:找到只存在于唯一一个超边中的所有顶点,遍历所有超边,将当前正在处理的超边记作curH,将当前正在处理的超边curH包含的所有顶点记作Γ(curH),若Γ(curH)中的顶点vi满足vi.deg=1,则顶点vi只有1个相关超边,顶点vi只存在于当前超边curH中;
[0021] 对于只存在于当前超边curH的顶点vi,该顶点需要由当前超边curH保存;
[0022] 使用长度为|H|的数组assignArr记录每个超边已经保存的顶点;
[0023] 使用长度为|H|的数组keepArr记录每个超边已经保存的顶点数量;
[0024] 使用长度为k的数组rangeArr记录每个partition中已经保存的顶点数量,其中k是Range划分时指定的partition数量;
[0025] 如果超边curH需要保存一个新的顶点,那么keepArr[curH]和rangeArr[curH]需要增加1;遍历所有超边,找到只存在于一个超边中的所有顶点;
[0026] 步骤2-2:遍历所有的顶点,将当前正在处理的顶点记为curV;如果curV只存在于一个超边中,则跳过对该顶点的处理;否则,对于与curV相关的每个超边hi,首先找到已经保存顶点数量最少的partition,记作Min(rangeArr[Γ(curV)]),然后在Min(rangeArr[hi])对应的partition中找到已经保存顶点数量最少的超边minH,minH就是保存当前顶点curV的超边;
[0027] 步骤2-3:所有顶点得到需要保存它们的超边之后,在步骤2-1中得到的顶点当获取它所在的超边的消息时进行更新,而在步骤2-2中得到的顶点当获取它所在的超边的消息以及它所在超边的邻居超边的消息时进行更新;
[0028] 步骤3:基于二跳图进行迭代处理;
[0029] 在执行第1个超步时,每个超边利用自己保存的顶点信息计算出超边的初始值,然后生成消息发送给邻居超边;在执行第2至第N-1个超步时,每个超边使用得到的邻居超边的消息更新自己的超边值,然后为邻居超边生成相应的消息;在执行第N个超步时,每个超边中的顶点使用其相关超边的消息进行更新。
[0030] 进一步的,前述的一种基于二跳图的超图迭代方法应用于单源最短超边路径算法Single Source Shortest Hyperedge Path(SSSHP)的具体步骤为:
[0031] 在第1个超步,起始顶点的值设置为0,其余顶点值设置为无限大INF;之后的每个超步,如果顶点v收到的所有消息中的最小值min比自己的值小,则顶点v将自身的值更新为min,如式(1)所示;
[0032] 如果顶点v的值发生了更新,顶点v将自己更新后的值发送给它的相关超边,如公式(2)所示;
[0033] 如果超边h收到的所有消息中的最小值min比自己的值小,那么超边h把自己的值更新为min,如式(3)所示;
[0034] 如果超边h的值发生了更新,超边h将更新后的值加1作为消息值发送给它的相关顶点,如式(4)所示;
[0035]
[0036] v.msg=v.val   (2)
[0037]
[0038] h.msg=h.val+1   (4)
[0039] 其中M(h)是向超边h发送消息的顶点集合,M(v)是向顶点v发送消息的超边集合,v.val表示顶点值,h.val表示超边值,v.msg表示顶点发送的消息值,h.msg表示超边发送的消息值;min(h.msgs)表示顶点接收到的最小消息值,min(v.msgs)表示超边接收到的最小消息值;itr表示当前的超步数,start表示初始顶点集合;
[0040] 将式(1)和式(2)带入式(3)中,得到式(5),式(5)为二跳图中超边的更新公式,起始顶点所在超边的初始值等于0,其他超边的初始值是无限大INF;
[0041]
[0042]
[0043] v.val=min(h.msgs),h∈Γ(v)   (7)
[0044] 其中,Ω(h)是向超边h发送消息的超边集合,N(h)是超边h的邻居超边集合;min(p.msgs)二跳图中超边接收到最小消息值,last表示最后一个超步;
[0045] 在二跳图中,超边发送的消息如式(6)所示;最后一个超步,每个超边保存的顶点获取与它相关的所有超边的消息进行更新,顶点的更新如式(7)所示;
[0046] 进一步的,前述的一种基于二跳图的超图迭代方法应用于超图连通分量算法Connected Components(CC)的具体步骤为:
[0047] 在第1个超步,每个顶点使用自己的顶点编号初始化顶点值;之后的每个超步,如果顶点v收到的所有消息中的最大值max比自己的值大,那么顶点v把自己的值更新为max,如式(8)所示;
[0048] 之后,顶点v将自己的值发送给它的相关超边,如公式(9)所示;
[0049] 如果超边h收到的所有消息中的最大值max比自己的值大,那么超边h把自己的值更新为max,如式(10)所示;
[0050] 之后,超边h自己的值作为消息值发送给它的相关顶点,如式(11)所示;
[0051]
[0052] v.msg=v.val   (9)
[0053] h.val=max(v.msgs),v∈Γ(h)   (10)
[0054] h.msg=h.val   (11)
[0055] 其中,max(v.msgs)表示超边接收到的最大消息值;max(h.msgs)表示顶点接收到的最大消息值;
[0056] 将式(8)和式(9)带入式(10)中,得到超图连通分量算法Connected Components算法在二跳图中超边的更新公式(12),即如果超边h从它的邻居超边收到的最大消息值max大于超边h的值,那么超边h使用max更新自己的值;在二跳图中,超边h发送的消息值仍然如式(11)所示,最后一个超步顶点的计算公式如式(13)所示;
[0057]
[0058] v.val=max(h.msg),h∈Γ(v)   (13)
[0059] 其中,max(p.msgs)表示超边接收到的最大消息值;
[0060] 上述二跳图上超图连通分量算法Connected Components的更新过程中,由于超边在第1个超步会将与它相关的所有顶点的最大编号更新为自己的值,因此每个超边需要保存与它相关的最大顶点编号maxVId,式(12)中第一个超步中超边值即为maxVId;
[0061] 进一步的,前述的一种基于二跳图的超图迭代方法应用于超图PageRank算法(PR)的具体步骤为:每个超边h需要保存三部分信息:
[0062] 超图PageRank算法中,顶点初始值为d,d是0和1之间的常数,顶点值计算公式如式(14)所示;
[0063] 顶点发送给相关超边的消息如式(15)所示;
[0064] 超边将收到的顶点消息值作为自己的超边值,如式(16)所示;
[0065] 超边发送给相关顶点的消息值如式(17)所示;
[0066]
[0067] v.msg=v.val/v.deg   (15)
[0068] h.val=sum(v.msgs),v∈Γ(h)   (16)
[0069] h.msg=h.val/h.deg   (17)
[0070] 其中,sum(h.msgs)表示顶点接收到的消息值的和;
[0071] 将式(14)和式(15)带入式(16)中,即可得到二跳图中超边的计算公式(18),式中v∈Γ(h),p∈N(h),q∈Γ(h)∩Γ(p), 是超边h中所有顶点的倒数和,令msg就是最后一个超步前超边h收到的它的邻居超边
发来的消息,则式(18)可以写成式(19)的形式;
[0072] 其中,p是超边h的邻居超边,q是超边h和邻居超边p的公共顶点,p.val是邻居超边p的值,p.deg是超边p的度,q.deg是顶点q的度,Γ(p)表示邻居超边p相关的所有顶点构成的集合;
[0073]
[0074]
[0075]
[0076] 在二跳图中,超边h向超边p发送的消息如式(20)所示,其中p∈N(h),q∈Γ(h)∩Γ(p);最后一个超步,超边中保存的顶点的更新公式为式(14)中itr>1的情况;
[0077] 进一步的,前述的一种基于二跳图的超图迭代方法应用于超图随机游走算法Ramdom Walks算法(RW)的具体步骤为:
[0078] 超图Random Walks算法中,如果顶点在初始顶点集中,顶点值为1,否则为0;在之后的迭代过程中,顶点值计算公式如式(21)所示;
[0079] 顶点发送给相关超边的消息如式(22)所示;
[0080] 超边更新公式如式(23)所示;
[0081] 超边发送给相关顶点的消息值如式(24)所示;
[0082]
[0083] v.msg=v.val/v.deg   (22)
[0084] h.val=v.msgs/h.deg,v∈Γ(h)   (23)
[0085] h.msg=h.val   (24)
[0086] 其中,r是超图随机游走算法Random Walks中的重启概率;
[0087] 将式(21)和式(22)带入式(23)中,即可得到Random Walks在二跳图中超边的计算公式(25),式中v∈Γ(h),p∈N(h),q∈Γ(h)∩Γ(p),s∈Γ(h)∩startSet,startSet是初始顶点集合, 是超边h中所有顶点的倒数和;接下来如果令 令令 msg是最后一个超步前超边h收到的它的邻
居超边发来的消息,则式(25)可以写成式(26)的形式;
[0088]
[0089] h.val=((1-r)×(h.val×h.vInfo+∑msg)+h.startVal)/h.deg   (26)[0090]
[0091] 在二跳图中,超边h向超边p发送的消息如式(27)所示,其中p∈N(h),q∈Γ(h)∩Γ(p);最后一个超步,超边中保存的顶点的更新为式(21)中itr>1的情况。
[0092] 本发明的有益技术效果为:
[0093] 在大数据时代,随着超图数据规模的不断增加,现有的集中式算法和系统无法满足存储和计算性能的需求,采用分布式的框架进行高效的数据处理成为了必然的选择。虽然分布式图迭代处理技术已经得到了广泛的研究,但超图数据具有多元异构、偏斜分布以及结构多态等特点,导致现有的分布式图处理系统在处理超图分析任务时效率低下且功能受限,这为研究新的超图数据迭代处理技术带来了机遇和挑战。
[0094] 通过分析基于二分图的超图迭代处理过程,发现可以通过构建二跳图,让消息直接从一个超边传递给另一个超边,即消息跨越超图中的顶点直接在超边之间进行传递,使超边之间直接进行通信并完成超边的更新,从而减少迭代次数,使算法更快地收敛,从而加快超图任务的迭代处理速度。

附图说明

[0095] 图1为本发明具体实施方式的本发明的总体流程图;
[0096] 图2为本发明具体实施方式的原始超图的结构;
[0097] 图3为本发明具体实施方式的转换得到的二跳图结构;
[0098] 图4为本发明具体实施方式的超边保存的顶点;
[0099] 图5为本发明具体实施方式的SSSHP在二跳图上的超边更新过程;
[0100] 图6为本发明具体实施方式的SSSHP在二跳图上的顶点更新过程。
[0101] 其中(a)(b)(c)(d)为SSSHP在二跳图上的超边更新过程的四个步骤图。

具体实施方式

[0102] 结合附图与具体实施例对本发明做进一步描述。
[0103] 如果两个超边有公共的顶点,那么在这两个超边之间构造一条边,该过程可以得到二跳图的拓扑结构。对于二跳图中的每个超边hi,超边hi需要保存其度的大小以及分配给超边hi保存的顶点。
[0104] 本发明称处理二跳图的超图迭代处理方法为TH方法。假设共执行N个超步,在第1个超步,每个超边利用自己保存的顶点信息计算出超边的初始值,然后生成消息发送给邻居超边。在第2至第N-1个超步,每个超边使用得到的邻居超边的消息更新自己的超边值,然后为邻居超边生成相应的消息,这些消息由超边值、超边信息以及当前超边和邻居超边的公共顶点信息组成。在第N个超步,每个超边中的顶点使用其相关超边的消息进行更新一次即可。
[0105] 本发明分成三个部分——超图转化成二跳图的构建,顶点的分配以及公共顶点信息的获取,其中的核心是公共顶点信息的获取。
[0106] 如图1所示,本发明方法的具体实施步骤如下:
[0107] 步骤1:如果两个超边中存在公共的顶点,那么需要在这两个超边之间构造一条边。如图1所示,h0与h1有公共点v3,所以在h0和h1之间建立一条边,而h1与h2之间有公共点v4,同样在其中构造一条边。同理,也分别建立一条边在h2与h3之间以及h0和h3之间,结果如图3。
[0108] 步骤2:将顶点vi分配到与它相关的某个超边hi中,并让不同节点中的超边保存的顶点数量尽可能均衡,从而使最后一个超步中不同节点中的顶点计算负载均衡。使用Range划分方法,将图2中的所有超边划分到两个partition,其中超边h0和超边h1在Range1中,超边h2和超边h3在Range2中。
[0109] 步骤2-1:在遍历完超边h0,h1,h2,h3之后,可以发现顶点v0和v2只存在于超边h0中,顶点v9只存在于超边h1中,顶点v6只存在于超边h2中,顶点v8只存在于超边h3中,因此这些顶点只需要相应的超边保存即可。
[0110] 步骤2-2:遍历所有顶点。遍历到顶点v1时,Γ(v1)={h0,h3}并且rangeArr[h0]=3并且rangeArr[h3]=2,因此顶点v1最终会被保存在Range2中。由于Range2中只有超边h3与顶点v1相关,因此超边h3需要保存顶点v1。遍历到顶点v3时,首先可以知道顶点v3最终在Range1中,进一步可以得到keepArr[h0]=2和keepArr[h1]=1,可知与顶点v3相关的超边h1中当前保存的超边数量更少,因此应该由超边h1保存顶点v3。同理,可以得到顶点v4被分配到超边h2中,顶点v5被保存在超边h2中,顶点v7被保存在超边h0中。分配超图中所有顶点所属的超边后,每个超边需要保存的顶点如图4所示。
[0111] 步骤2-3:所有顶点得到需要保存它们的超边之后,v0,v2,v6,v8和v9只需要获取它所在的超边的消息即可更新,而其余顶点则还需要它所在超边的邻居超边的消息。
[0112] 步骤3:基于二跳图进行迭代处理;
[0113] 在执行第1个超步时,每个超边利用自己保存的顶点信息计算出超边的初始值,然后生成消息发送给邻居超边;在执行第2至第N-1个超步时,每个超边使用得到的邻居超边的消息更新自己的超边值,然后为邻居超边生成相应的消息;在执行第N个超步时,每个超边中的顶点使用其相关超边的消息进行更新。
[0114] 针对不同的超图学习算法,超边和顶点的更新行为以及每个超边需要保存的额外信息,具体包括:
[0115] (1)单源最短超边路径算法(SSSHP):以SSSHP算法为例,图3所示超图对应的二跳图上执行SSSHP的超边更新过程如图5所示。假设起始顶点在超边h0中,在第1个超步,超边h0设置初始值为0,向邻居超边h1和h3发送消息值1,其余超边将值设置为无限大INF。在第2个超步,超边h1和h3收到了消息值1并发现小于自己的超边值,于是超边h1和超边h3将值更新为1,并向邻居超边发送消息。在第3个超步,超边h0没有收到比自己的值更小的消息,因此不更新,而超边h2收到了更小的消息,因此将自己的值更新为2,并向邻居超边发送消息3。在第4个超步,所有超边都没有收到小于自身超边值的消息,因此所有超边都没有更新,此时所有超边的值都已收敛,超边的更新过程结束。
[0116] 在第1个超步,起始顶点的值设置为0,其余顶点值设置为无限大INF。之后的每个超步,如果顶点v收到的所有消息中的最小值min比自己的值小,那么顶点v把自己的值更新为min,如式(1)所示,如果顶点v的值发生了更新,顶点v将自己更新后的值发送给它的相关超边,如公式(2)所示。如果超边h收到的所有消息中的最小值min比自己的值小,那么超边h把自己的值更新为min,如式(3)所示,如果超边h的值发生了更新,超边h将更新后的值加1作为消息值发送给它的相关顶点,如式(4)所示。
[0117]
[0118] v.msg=v.val   (2)
[0119]
[0120] h.msg=h.val+1   (4)
[0121] 其中M(h)是向超边h发送消息的顶点集合,M(v)是向顶点v发送消息的超边集合,顶点v相关的所有超边构成的集合记作Γ(v),v.val表示顶点值,h.val表示超边值,v.msg表示顶点发送的消息值,h.msg表示超边发送的消息值。min(h.msgs)表示顶点接收到的最小消息值,min(v.msgs)表示超边接收到的最小消息值;itr表示当前的超步数,start表示初始顶点集合;
[0122] 将式(1)和式(2)带入式(3)中,得到式(5),Ω(h)是超边h的邻居超边集合N(h)的子集,因为在SSSHP算法中不是所有的超边都是活跃的。式(5)就是二跳图中超边的更新公式,起始顶点所在超边的初始值等于0,其他超边的初始值是无限大INF。如果超边h从它的邻居超边收到的最小消息值min小于h的值,那么超边h使用min更新自己的值。
[0123]
[0124]
[0125] v.val=min(h.msgs),h∈Γ(v)   (7)
[0126] 其中,Ω(h)是向超边h发送消息的超边集合,N(h)是超边h的邻居超边集合;min(p.msgs)二跳图中超边接收到最小消息值,last表示最后一个超步;
[0127] 由于每个顶点需要接收到全部与它相关的超边消息进行更新,因此所有超边值收敛之后,需要进行一次通信,每个超边将自己的值作为消息值,发送给邻居超边。在二跳图中,超边发送的消息如式(6)所示。最后一个超步,每个超边保存的顶点获取与它相关的所有超边的消息进行更新,顶点的更新如式(7)所示。至此,对于SSSHP算法,已经得到了在二跳图中超边直接进行通信并进行更新的方法。上述二跳图上SSSHP的更新过程中,超边的更新和超边产生的消息值都没有用到除顶点值以外的其他顶点信息,这就意味着每个超边不需要保存额外的顶点信息。
[0128] 顶点更新过程如图6所示。由于每个顶点会以与它相关的所有超边的最小值作为自己的值,因此在第5个超步,所有超边需要将自身的值作为消息发送给邻居超边,从而使所有顶点获取到与各自相关的所有超边值。在第6个超步,所有顶点进行顶点值的更新。只在唯一一个超边中的顶点直接使用与它相关的超边值更新自己的顶点值,而与多个超边相关的顶点v,则使用Γ(v)中最小的超边值作为自己的值。例如,顶点v0只在超边h0中,则顶点v0把顶点值更新为超边h0的值0,顶点v7同时在超边h0和超边h3中,因此顶点v7使用超边h0和超边h7中较小的值0作为自己的值。
[0129] (2)超图连通分量算法(CC):在第1个超步,每个顶点使用自己的顶点编号初始化顶点值。之后的每个超步,如果顶点v收到的所有消息中的最大值max比自己的值大,那么顶点v把自己的值更新为max,如式(8)所示。之后,顶点v将自己的值发送给它的相关超边,如公式(9)所示。如果超边h收到的所有消息中的最大值max比自己的值大,那么超边h把自己的值更新为max,如式(10)所示。之后,超边h自己的值作为消息值发送给它的相关顶点,如式(11)所示。
[0130]
[0131] v.msg=v.val   (9)
[0132] h.val=max(v.msgs),v∈Γ(h)   (10)
[0133] h.msg=h.val   (11)
[0134] 其中,与超边h相关的所有顶点构成的集合记作Γ(h);max(v.msgs)表示超边接收到的最大消息值;max(h.msgs)表示顶点接收到的最大消息值;
[0135] 将式(8)和式(9)带入式(10)中,得到CC算法在二跳图中超边的更新公式(12),即如果超边h从它的邻居超边收到的最大消息值max大于超边h的值,那么超边h使用max更新自己的值。在二跳图中,超边h发送的消息值仍然如式(11)所示,最后一个超步顶点的计算公式如式(13)所示。
[0136]
[0137] v.val=max(h.msg),h∈Γ(v)   (13)
[0138] 其中,max(p.msgs)表示超边接收到的最大消息值。
[0139] 至此,对于CC算法已经得到了在二跳图中超边直接进行通信并进行更新的方法。上述二跳图上CC的更新过程中,由于超边在第1个超步会将与它相关的所有顶点的最大编号更新为自己的值,因此每个超边需要保存与它相关的最大顶点编号maxVId,式(12)中第一个超步中超边值即为maxVId。
[0140] (3)超图PageRank算法:超图PageRank算法中,顶点初始值为d,d是0和1之间的常数,顶点值计算公式如式(14)所示,顶点发送给相关超边的消息如式(15)所示。超边将收到的顶点消息值作为自己的超边值,如式(16)所示。超边发送给相关顶点的消息值如式(17)所示。
[0141]
[0142] v.msg=v.val/v.deg   (15)
[0143] h.val=sum(v.msgs),v∈Γ(h)   (16)
[0144] h.msg=h.val/h.deg   (17)
[0145] 其中,sum(h.msgs)表示顶点接收到的消息值的和;
[0146] 将式(14)和式(15)带入式(16)中,即可得到二跳图中超边的计算公式(18),式中v∈Γ(h),p∈N(h),q∈Γ(h)∩Γ(p), 是超边h中所有顶点的倒数和,令msg就是最后一个超步前超边h收到的它的邻居超边
发来的消息,则式(18)可以写成式(19)的形式。
[0147] 其中,p是超边h的邻居超边,q是超边h和邻居超边p的公共顶点,p.val是邻居超边p的值,p.deg是邻居超边p的度,q.deg是顶点q的度,Γ(p)表示邻居超边p相关的所有顶点构成的集合。
[0148]
[0149]
[0150]
[0151] 在二跳图中,超边h向超边p发送的消息如式(20)所示,其中p∈N(h),q∈Γ(h)∩Γ(p)。最后一个超步,超边中保存的顶点的更新公式为式(14)中itr>1的情况。从二跳图上PageRank超边的更新公式和发送消息的公式可以看出,为了使计算正确,每个超边h需要保存三部分信息:(a):超边h中所有顶点度的倒数之和;(b):超边h与它的每个邻居超边p的公共顶点倒数和;(c):超边h的度。
[0152] (4)超图随机游走算法Ramdom Walks算法:超图Random Walks算法中,如果顶点在初始顶点集中,顶点值为1,否则为0。在之后的迭代过程中,顶点值计算公式如式(21)所示,顶点发送给相关超边的消息如式(22)所示。超边更新公式如式(23)所示,超边发送给相关顶点的消息值如式(24)所示。
[0153]
[0154] v.msg=v.val/v.deg   (22)
[0155] h.val=v.msgs/h.deg,v∈Γ(h)   (23)
[0156] h.msg=h.val   (24)
[0157] 其中,r是超图随机游走算法Random Walks中的重启概率;
[0158] 将式(21)和式(22)带入式(23)中,即可得到Random Walks在二跳图中超边的计算公式(25),式中v∈Γ(h),p∈N(h),q∈Γ(h)∩Γ(p),s∈Γ(h)∩startSet,startSet是初始顶点集合, 是超边h中所有顶点的倒数和。接下来如果令 令令 msg是最后一个超步前超边h收到的它的邻
居超边发来的消息,则式(25)可以写成式(26)的形式。
[0159]
[0160] h.val=((1-r)×(h.val×h.vInfo+∑msg)+h.startVal)/h.deg   (26)[0161]
[0162] 在二跳图中,超边h向超边p发送的消息如式(27)所示,其中p∈N(h),q∈Γ(h)∩Γ(p)。最后一个超步,超边中保存的顶点的更新为式(21)中itr>1的情况。从二跳图上Random Walks超边的更新公式和发送消息的公式可以看出,为了保证计算的正确性,每个超边h需要保存三部分信息:(a):超边h中所有顶点度的倒数之和;(b):超边h与它的每个邻居超边p的公共顶点倒数和;(c):超边h的度。由于h.startVal可以直接计算出来,因此不需要保存这部分信息。
[0163] 本发明与Push获取消息机制的结合:将超图转化成二跳图并使用基于Push的消息获取机制进行迭代处理,本发明称这种方法为TH-PUSH方法。在最后一个超步之前,超边更新完自己的值之后,主动向邻居超边进行消息的发送。在最后一个超步,每个超边中的顶点进行更新。具体地,在第i个超步中,活跃的超边使用第i-1个超步邻居超边发来的消息进行更新,更新后为邻居超边生成消息并发送。当超边之间没有消息传送或达到最大迭代次数时,超边的更新过程结束,进入到最后一个超步顶点的更新。每个超边中保存的顶点获取与它相关的超边的所有消息进行更新。
[0164] 本发明与Pull获取消息机制的结合:将超图转化成二跳图并使用基于Pull的消息获取机制进行迭代处理,本发明称这种方法为TH-PULL方法。TH-PULL在每个超步开始执行之前,超边主动向邻居超边获取消息。超边值收敛之后,在最后一个超步,每个节点再发送一次pull请求,从而使所有超边获取到它的邻居超边的消息,用于最后一个超步顶点的更新。