图数据处理方法、装置、计算机设备和存储介质与流程

文档序号:24528836发布日期:2021-04-02 10:06阅读:53来源:国知局
图数据处理方法、装置、计算机设备和存储介质与流程

本申请涉及大数据处理技术领域,特别是涉及一种图数据处理方法、装置、计算机设备和存储介质。



背景技术:

图(graph)是一种表示一系列对象之间的关系的数据结构,当图中相邻的两个节点之间存在共同节点时,该两个节点与共同节点就可以构成三角形,三角形的数量可以在一定程度上反映该图所表示网络的稠密程度和质量。例如,近年来,随着互联网技术的快速发展,越来越多的用户加入各式各样的社区网络,一个社区网络可以看做是一张图,社区网络中的人对应于图中的节点(vertex),社区网络中的人际关系对应于图中的边(edge),社区网络图中三角形的数量可以在一定程度上反映社区网络的稠密程度。

目前,一些针对图结构数据的三角形计数方法主要分为两大类,分别是基于节点匹配的三角形计数方法和基于边匹配的三角形计数方法。然而,这两类方法主要应用于无向图(undirectedgraph),不适于有向图(directedgraph)中由边的方向性引起的三角形类别的识别,此外,这两类方法对图中的每个节点都会重复统计三角形,导致每个三角形都会被统计三次,存在严重的冗余计算,占用较多的计算资源。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够高效地识别有向图中三角形类别的图数据处理方法、装置、计算机设备和存储介质。

一种图数据处理方法,所述方法包括:

获取有向图,所述有向图中的有向边以从起始节点指向目的节点表示;

根据所述起始节点的节点标识与所述目的节点的节点标识之间的指定顺序,将所述有向边以统一形式表示;

生成用于记录所述有向边的原始边方向的边标记,得到标记后的有向图;

基于所述标记后的有向图中的节点、所述节点的邻居节点、与所述节点和所述邻居节点共同相邻的共同节点两两之间的边标记,识别所述节点、所述邻居节点与所述共同节点构成的三角形的类别;

其中,识别的所述三角形的类别,用于生成所述节点的特征向量。

一种图数据处理装置,所述装置包括:

获取模块,用于获取有向图,所述有向图中的有向边以从起始节点指向目的节点表示;

边表示模块,用于根据所述起始节点的节点标识与所述目的节点的节点标识之间的指定顺序,将所述有向边以统一形式表示;

边标记模块,用于生成用于记录所述有向边的原始边方向的边标记,得到标记后的有向图;

识别模块,用于基于所述标记后的有向图中的节点、所述节点的邻居节点、与所述节点和所述邻居节点共同相邻的共同节点两两之间的边标记,识别所述节点、所述邻居节点与所述共同节点构成的三角形的类别;其中,识别的所述三角形的类别,用于生成所述节点的特征向量。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取有向图,所述有向图中的有向边以从起始节点指向目的节点表示;

根据所述起始节点的节点标识与所述目的节点的节点标识之间的指定顺序,将所述有向边以统一形式表示;

生成用于记录所述有向边的原始边方向的边标记,得到标记后的有向图;

基于标记后的有向图中的节点、所述节点的邻居节点、与所述节点和所述邻居节点共同相邻的共同节点两两之间的边标记,识别所述节点、所述邻居节点与所述共同节点构成的三角形的类别;

其中,识别的所述三角形的类别,用于生成所述节点的特征向量。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

获取有向图,所述有向图中的有向边以从起始节点指向目的节点表示;

根据所述起始节点的节点标识与所述目的节点的节点标识之间的指定顺序,将所述有向边以统一形式表示;

生成用于记录所述有向边的原始边方向的边标记,得到标记后的有向图;

基于标记后的有向图中的节点、所述节点的邻居节点、与所述节点和所述邻居节点共同相邻的共同节点两两之间的边标记,识别所述节点、所述邻居节点与所述共同节点构成的三角形的类别;

其中,识别的所述三角形的类别,用于生成所述节点的特征向量。

一种计算机程序,所述计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令,使得所述计算机设备执行上述图数据处理方法的步骤。

上述图数据处理方法、装置、计算机设备和存储介质,通过将有向图中的有向边,以从起始节点指向目的节点的原始表示形式,按照起始节点与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示,这样后续在统计三角形的数量时,就不会存在同一个三角形被查找到多次的情况,从而避免了三角形的冗余计算,节省了计算资源,运行速度更快,计算资源消耗更低,尤其是能够极大地缓解邻居很多的超级节点带来的计算压力,同时又保证了计算的正确性。同时,对于重新表示的有向边,还通过边标记记录有向边原始的边方向,能够在标记后的有向图中确定三角形的同时识别出三角形的类别,实现了有向图中由边的方向性引起的三角形类别的识别。

附图说明

图1为一个实施例中图数据处理方法的应用环境图;

图2为一个实施例中图数据处理方法的流程示意图;

图3为一个实施例中有向图中出边与入边的示意图;

图4为一个实施例中有向图的邻接表的示意图;

图5为一个实施例中有向图的邻接矩阵的示意图;

图6为一个实施例中将有向图中的有向边统一表示的示意图;

图7为一个实施例中有向图中三角形的类别的示意图;

图8为一个实施例中生成的三角形的类别索引的示意图;

图9为另一个实施例中生成的三角形的类别索引的示意图;

图10为另一个实施例中图数据处理方法的流程示意图;

图11为一个具体的实施例中处理图数据的过程示意图;

图12为一个实施例中分布式处理图数据的过程示意图;

图13为一个具体的实施例中图数据处理方法的流程示意图;

图14为一个实施例中图数据处理装置的结构框图;

图15为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的图数据处理方法,涉及到图结构数据的一些概念。

图(graph)是一种表示一系列对象之间的关系的数据结构,图所表示的任一网络中的关系数据,可以采用邻接矩阵或邻接表进行表示。

图中的节点(vertex),是指网络中要分析的对象,每一个网络中的对象对应了图中的一个节点,比如在社区网络中每个用户就是一个节点。

图中的边(edge)是图中两个节点间的连线,用于表示两个节点的关系,比如在社区网络中两个人的关注关系、好友关系,等等。

有向图(directedgraph)是边具有方向的图,比如用户与用户之间的关注关系,就是有方向的。有向图中边是有方向的,对于一个节点来说,存在出边和入边两种方向,出边是指由该节点指向出去的边,入边是指该节点被指向的边。无向图(undirectedgraph)是边没有方向的图。

有向图的三角形计数(trianglecount),是指通过对有向图的图结构数据进行处理,找出图中的所有三角形并统计每种三角形的数量的过程。

本申请提供的图数据处理方法,可以应用于如图1所示的应用环境中。其中,终端102以及第一服务器104可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。终端102与终端102可以通过应用服务器进行交互,当终端上运行了应用客户端时,应用服务器为终端通过应用客户端进行交互提供支持,应用服务器可以获取终端交互时形成的关系数据,例如联系人列表、好友列表、粉丝列表、支付记录等等。应用服务器可以将上述关系数据传递至第一服务器104,第一服务器104可以是分布式设置的,第二服务器106可以与分布式设置的第一服务器104通信,第二服务器106可以是存储服务器。第一服务器104可以将根据关系数据生成的有向图的部分邻接表推送至第二服务器106,以便于每个第一服务器104都可以从第二服务器拉取到每个节点对应的邻居节点集合,从而识别三角形的数量及类别。需要说明的是,应用服务器可以是与第一服务器104分开的服务器,应用服务器也可以与第一服务器104集成在一起。

在一些实施例中,第一服务器104可以是区块链网络中的分布式区块链节点,上述关系数据可以存储区块链节点中,第二服务器106可以从这些分布式区块链节点获取到大规模网络形成的关系数据。

在一个实施例中,第一服务器104可以获取有向图,有向图中的有向边以从起始节点指向目的节点表示;根据起始节点的节点标识与目的节点的节点标识之间的大小关系,将有向边以从较小节点指向较大节点表示,或者,将有向边以较大节点指向较小节点表示;生成用于记录有向边的原始边方向的边标记,得到标记后的有向图;基于标记后的有向图中的节点、节点的邻居节点、与节点和邻居节点共同相邻的共同节点两两之间的边标记,识别节点、邻居节点与共同节点构成的三角形的类别。

其中,终端可以但不限于是各种个人计算机、智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(contentdeliverynetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。

本申请实施例提供的图数据处理方法,该图数据处理方法的执行主体可以是本申请实施例提供的图数据处理装置,或者集成了该图数据处理装置的计算机设备,其中该图数据处理装置可以采用硬件或软件的方式实现。计算机设备可以是上述的终端或服务器。

通常,在计算机设备上处理大规模网络形成的图数据时,运算时间和资源呈现几何级增长,还可能因为占用内存较多造成计算机内存溢出,因此在处理图数据时需要充分考虑图数据的性质和规模,评估处理图数据的计算复杂度和空间复杂度,尤其在分布式环境下还需要考虑网络通信量。本申请提供的图数据处理方法,涉及大规模网络形成的有向图进行大数据(bigdata)挖掘,通过将有向图中的有向边,以从起始节点指向目的节点的原始表示形式,按照起始节点与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示,这样后续在统计三角形的数量时,就不会存在同一个三角形被查找到多次的情况,从而避免了三角形的冗余计算,节省了计算资源,运行速度更快,计算资源消耗更低,尤其是能够极大地缓解邻居很多的超级节点带来的计算压力,同时又保证了计算的正确性。此外,对于重新表示的有向边,还通过边标记记录有向边原始的边方向,能够在标记后的有向图中确定三角形的同时识别出三角形的类别,实现了有向图中由边的方向性引起的三角形类别的识别。

其中,大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。随着云时代的来临,大数据也吸引了越来越多的关注,大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。

在一个实施例中,本申请实施例提供的图数据处理方法,获得有向图中各节点所在三角形的三角形类别及各类别的三角形的数量后,不同类别三角形的数量可以作为节点在有向图中的拓扑特征,拓扑特征可以与节点的画像特征共同构成节点的特征向量,生成的特征向量可作为基于机器学习(machinelearning,ml)的任务的输入,应用于各种场景的模式识别任务。

例如,由边的方向性所形成的三角形的类别有n种,计算机设备可以根据节点对应这n种三角形的数量,生成关于三角形的n维的拓扑特征,该拓扑特征中的每个元素可以表示该节点是否存在于相应类别的三角形,或者,每个元素可以表示该节点对应每一种类别的三角形的数量。在一个具体的应用场景中,节点关于三角形的拓扑特征,可以应用到金融风控产品中,实现对非法信贷中介、套现、多头借贷、赌博等异常任务进行识别。

其中,机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。

在一个实施例中,节点所在三角形的数量与类别可以用于计算该节点的聚集系数。节点的聚集系数,是表示节点聚集程度的系数,能够在一定程度上反应节点的重要性。聚集系数等于所有与该节点相连的邻居节点之间所连边的数量除以这些邻居节点之间可以连出的最大边数。节点所在三角形的数量即为与该节点相连的邻居节点之间所连边的数量。计算机设备可以根据节点的聚集系数从大规模社区网络中挖掘出比较重要的节点,这在非法信贷中介、套现、多头借贷、赌博等异常任务场景具有较好的应用。

在一个实施例中,节点所在三角形的数量与类别可以应用于社区发现场景中。社区发现是基于在大规模社区网络中同一社区子网络内节点与节点之间的连接很紧密、而社区与社区之间的连接比较稀疏的特点,在大规模社区网络中挖掘出社区子网络的过程。例如,计算机设备可以通过判断两个节点与其共同邻居节点能否构成一个三角形来判断这两个节点是否属于同一子网络,从而从社区网络中挖掘出属于同一个子网络的社区子网络。

在一个实施例中,节点所在三角形的数量与类别可以应用于链接预测场景中。链接预测是通过网络中已知的节点以及网络结构等信息预测网络中尚未产生连边的两个节点之间产生链接的可能性,包括对未知链接的预测和未来链接的预测。两个节点之间相似性越大,它们之间存在链接的可能性就越大,节点关于三角形的拓扑特征,可参与节点之间相似性的定义。例如,计算机设备可以根据某个对象在疾病感染网络中对应不同类别的三角形的数量,生成该对象的特征向量,根据该特征向量预测该对象在疾病感染网络中可能的感染路径。

在一个实施例中,如图2所示,提供了一种图数据处理方法,以该方法应用于图1中的计算机设备(例如终端或服务器)为例进行说明,包括以下步骤:

步骤202,获取有向图,有向图中的有向边以从起始节点指向目的节点表示。

在本申请提供的实施例中,研究对象是有向图,实际应用中的图多为有向图,有向图相比于无向图,实用性更强。有向图中的边是具有方向性的边,有向图中的边可以采用从起始节点指向目的节点表示,代表该有向边的边方向是从起始节点指向目的节点。例如,起始节点为src,目的节点为dst,则从src指向dst的有向边可以采用(src,dst)表示。对于有向图中的一个节点来说,存在出边和入边两种方向,出边是指由该节点指向出去的边,入边是指该节点被指向的边,如图3所示。有向图中的三角形,可以用[src,dst,neighbor]三节点表示,neighbor是有向图中与src、dst共同相邻的共同节点。有向图的三角形计数,是指通过对有向图的图结构数据进行处理,找出图中的所有三角形并统计每种三角形的数量的过程。

前文提到,图可以用邻接矩阵或邻接列表来表示,有向图也可以采用邻接矩阵或邻接列表表示。在邻接列表中,对于有向图中的每一个节点,都会存储一个从该节点所指向的邻居节点所表示的有向边的列表,例如,如图4所示,有向图包括四个节点a、b、c和d,节点a有分别指向目的节点b、c和d的三条边,节点b有一条指向目的节点a的边,节点c有分别指向目的节点b、d的两条边,节点d有一条指向节点a的边。在邻接矩阵中,行和列都表示节点,由两个节点所决定的矩阵中的对应元素vij(位于矩阵的第i行第j列处),表示是否存在从节点i指向节点j的有向边,如图5所示,将图4中的有向图以邻接矩阵表示,若存在从节点i指向节点j的有向边,则矩阵中的对应元素vij为1,若不存在,则矩阵中的对应元素vij为0。

具体地,计算机设备可以获取有向图对应的邻接列表或邻接矩阵,从而获取到有向图及有向图中每个节点与节点之间的边关系。

在一个实施例中,有向图可以是支付网络关系图。计算机设备可以获取与用户标识对应的支付记录;根据支付记录获得用户标识之间的支付交互数据;根据支付交互数据生成有方向的支付网络关系图;其中,支付网络关系图的节点表示用户标识,支付网络图中两个节点之间的有向边表示相应的两个用户标识之间存在单向或双向的支付交互事件。

在本实施例中,计算机设备可以根据有向图中节点所在三角形的数量及类别,从有向图中确定支付交互关系十分紧密的子图,根据该子图可以确定支付交互关系十分紧密的用户,例如,在一个应用场景中,计算机设备可以实现从大量的用户中识别出非法信贷中介或团伙。

在一个实施例中,有向图可以是社区网络图。计算机设备可以获取与用户标识对应的联系人列表,根据联系人列表获得用户标识对应的联系人关系数据,根据联系人关系数据生成有方向的社区网络图,其中,社区网络图中的节点表示用户标识,社区网络图中的两个节点之间的有向边表示相应的两个用户之间存在单向或双向的联系人关系。其中,联系人列表可以是当前用户关注的好友列表、当前用户收藏的用户列表或当前用户私信过的用户列表。

在本实施例中,计算机设备可以根据有向图中节点所在三角形的数量及类别,确定有向图中存在关联的两个节点,基于此,计算机设备可以向用户推荐存在关联的另一个用户以添加联系人,还可以向用户推荐存在关联的另一个用户感兴趣的对象,如歌曲、视频、商品或文章等等。

在一个实施例中,有向图还可以是表征实体与实体之间带方向性的关系的知识图谱。计算机设备可以获取知识图谱对应的图结构数据,根据该图数据结构所表征的实体获得有向图中的节点,根据该图结构数据所表征的实体与实体之间有方向性的实体关系,获得有向图中节点与节点之间的边方向,从而获得该知识图谱对应的有向图。

在本实施例中,计算机设备可以根据知识图谱对应的有向图中节点所在三角形的数量及类别,找出知识图谱中尚未产生关系的两个节点之间产生关系的可能性,从而丰富知识图谱所表达的领域知识。

步骤204,根据起始节点的节点标识与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示。

其中,指定顺序可以是节点标识之间的大小顺序,即大小关系。指定顺序也可以是节点标识生成的先后顺序。

在一个实施例中,计算机设备可以根据节点的节点标识之间的大小关系,确定起始节点与目的节点的大小关系,将有向边以从较小节点指向较大节点表示,或者,将有向边以较大节点指向较小节点表示。

其中,有向图中的每个节点是用节点标识表示的,可以记为srcid、dstid。每个节点标识不同,节点的大小可以节点标识的大小来衡量,较大节点是起始节点与目的节点中节点标识较大的节点,较小节点是起始节点与目的节点中节点标识较小的节点。

可选地,节点对应的节点标识可以是数值,那么,计算机设备可以通过比较节点标识对应的数值大小确定起始节点与目的节点的大小关系,例如节点a对应的节点标识为00001,节点a所指向的节点b对应的节点标识为00020,那么计算机设备可以确定节点a小于节点b。

可选地,节点对应的节点标识还可以是字符组成的字符串,字符可以包括字母和数字中的至少一种,计算机设备可以通过比较字符串的大小确定节点的大小关系,这里字符串的大小关系可以按需求进行定义。例如,计算机设备可以先按字符串的长度进行比较,字符串越长,字符串就越大,在长度相同的情况下,进一步比较从高位到低位第一个不同的字母的大小,从而获得两个节点的大小关系。举例来说,节点a对应的节点标识为abcd,节点a所指向的节点b对应的节点标识为abc,那么节点a大于节点b,节点a所指向的节点c对应的节点标识为abca,那么节点c大于节点a。

目前,适用于无向图的三角形计数方法大致可以分为基于节点匹配的三角形计数方法和基于边匹配的三角形计数方法。在基于节点匹配的三角形计数方法中,对于无向图中的每一个节点v,找到其邻居节点集合n(v),对于n(v)中的每个节点u,找到其邻居节点集合n(u),对于n(u)中的每个节点w,如果w不等于v,则[v,u,w]构成一个三角形,由于该方法对每个节点都做了运算,还会找到[u,w,v]、[w,u,v]构成的三角形,由于是无向图,导致由v、u和w这三个顶点构成的三角形会被找到了三次,存在严重的冗余计算。在基于边匹配的三角形计数方法中,对于图中的每一条边(v,u)分别找到v、u的邻居集合n(v)和n(u),计算n(v)和n(u)的交集节点,节点v、u和交集中的每个节点都构成一个三角形,因此交集的个数即为边(v,u)所在的三角形个数,同样地,由于每个三角形都被计算了三次,也存在严重的冗余计算。上述两种方法中,当节点v为邻居非常多的超级节点时,在节点v上的三角形计数的计算量会变得相当大。

为了避免三角形的重复计算,计算机设备可以根据起始节点与目的节点的大小关系,将有向边以从较小节点指向较大节点表示,或者,将有向边以较大节点指向较小节点表示。具体地,将有向图中的每一条有向边统一表示成srcid小于dstid的形式或是srcid大于dstid的形式,并用边标记来指示有向边原本的边方向,以达到规避冗余计算的目的,同时,节点对应的节点标识本身是存放在邻接表或邻接矩阵中的,根据节点标识确定节点大小就不需要耗费额外的计算和存储。

在一个实施例中,计算机设备可以在有向边所在的起始节点大于目的节点时,将有向边以从目的节点指向起始节点表示,若起始节点小于目的节点,则不需要重新表示。具体地,计算机设备可以遍历有向图中的有向边,当遍历的有向边所在的起始节点大于目的节点时,将有向边以从目的节点指向起始节点表示。

在一个实施例中,计算机设备可以在有向边所在的起始节点小于目的节点时,将有向边以从目的节点指向起始节点表示,若起始节点大于目的节点,则不需要重新表示。具体地,计算机设备可以遍历有向图中的有向边,当遍历的有向边所在的起始节点小于目的节点时,将有向边以从目的节点指向起始节点表示。

在一个实施例中,计算机设备还可以获取有向图中每个节点生成的先后顺序,获取有向边中起始节点与目的节点的节点标识生成的先后顺序,按照在前生成的节点指向在后生成的节点的形式,将所述有向图中的有向边进行重新表示,或者,按照在后生成的节点指向在前生成的节点的形式,将所述有向图中的有向边进行重新表示。例如,当节点表示用户标识时,可以将用户标识的生成时间,作为相应节点生成的时间,从而确定节点生成的先后顺序。

步骤206,生成用于记录有向边的原始边方向的边标记,得到标记后的有向图。

其中,边标记(taggededge)用于记录有向图中有向边原始的边方向。由于三角形的类别是根据形成该三角形的三条有向边的边方向确定的,因此,在重新表示有向边后,需要用边标记记录原始的边方向,得到标记后的有向图,这样才能在后续确认有向边所在三角形的类别。

在一个实施例中,边标记用于标记有向边相对于重新表示后的起始节点是入边或出边。在一些实施例中,边标记用于标记有向边相对于重新表示后的目的节点是入边或出边。在另一些实施例中,边标记还包括可以表示有向边是双向边的值。例如,出边可以标记为0,入边可以标记为1,双向边可以标记为2。又例如,出边可以标记为out,入边可以标记为in,双向边可以标记为recip,本申请实施例对边标记的具体形式不作限制。

在一个实施例中,当边标记用于标记有向边相对于重新表示后的起始节点是入边或出边时,对于统一按照srcid小于dstid的形式表示的有向边,计算机设备可以将以从目的节点指向起始节点重新表示的有向边的边方向标记为第一值,即该有向边原本相对于目的节点是入边,重新表示后,目的节点成为新的起始节点,有向边相对于新的起始节点是入边,边方向记录为第一值。而对于没有被重新表示的有向边,该有向边对于原本的起始节点而言是出边,则该有向边的边方向可以标记为第二值。其中,第一值可以是1,第二值可以是0。

在一个实施例中,当边标记用于标记有向边相对于重新表示后的起始节点是入边或出边时,对于统一按照srcid大于dstid的形式表示的有向边,计算机设备可以将以从目的节点指向起始节点表示重新的有向边的边方向记为第一值,即该有向边原本对于目的节点是入边,重新表示后,目的节点成为新的起始节点,有向边相对于新的起始节点是入边,边方向记录为第一值。而对于不需要被重新表示的有向边,该有向边对于原本的起始节点而言是出边,则该有向边的边方向可以标记为第二值。第一值可以是1,第二值可以是0。

在一个实施例中,计算机设备可以在以统一的形式表示有向边之后,记录有向边相对于起始节点的边方向,即边标记用于记录该有向边对于重新表示后的起始节点来说,是入边还是出边。具体而言,原始的有向边为(src,dst),当计算机设备按照srcid小于dstid的形式,将有向边重新表示后,当边标记tag=0时,表示该有向边对于新的起始节点来说是出边,tag=1时,表示该边对于新的起始节点来说是入边。例如,有向图中节点a对应的节点表示为002,节点a所指向的节点b对应的节点标识为001,有向图中原本的有向边为(a,b),该有向边对于节点a而言为出边,对于节点b而言为入边,计算机设备按照srcid小于dstid的形式将该有向边表示成(b,a)的形式,并记录该有向边对于新的起始节点b而言是入边的边标记,为1。

在一个实施例中,计算机设备也可以在以统一形式表示有向边之后,记录有向边相对目的节点的边方向,即该有向边原本对于重新表示后的目的节点来说,是入边还是出边。具体而言,原始的有向边为(src,dst),当计算机设备按照srcid小于dstid的形式,将有向边重新表示后,当边标记tag=0时,表示该有向边对于新的目的节点来说是出边,tag=1时,表示该边对于新的目的节点来说是入边。例如,有向图中节点a对应的节点表示为002,节点a所指向的节点b对应的节点标识为001,有向图中原本的有向边为(a,b),该有向边对于节点a而言为出边,对于节点b而言为入边,计算机设备按照srcid小于dstid的形式将该有向边表示成(b,a)的形式,并记录该有向边对于新的目的节点a而言是出边的边标记,为0。

如图6所示,为一个实施例中将有向图中的有向边统一表示的示意图,参照图6,有向图包括节点1、节点2、节点3、节点4和节点5,有向图中原始有向边如图6中(a)部分所示。计算机设备按照srcid小于dstid的形式,将有向边重新表示后,生成每条有向边相对于新的起始节点的边标记,该边标记用于记录有向边原始的边方向,如图6中的(b)部分所示。从图6的(a)部分可以看出,原始的有向图中存在起始节点的节点标识大于目的节点的节点标识的有向边,也就是,节点3指向节点2的有向边、节点4指向节点2的有向边、节点5指向节点3的有向边以及节点5指向节点4的有向边,从图6的(b)部分可以看出,标记后的有向图中不存在起始节点的节点标识大于目的节点的节点标识的有向边,标记后的有向边的起始节点的节点标识均小于目的节点的节点标识。

在一个实施例中,在生成有向边的边标记之后,方法还包括:对于标记后的有向图中的每个节点,聚集节点所指向的邻居节点,得到节点对应的邻居节点集合;根据节点与对应的邻居节点集合中各邻居节点之间的边标记,生成节点对应的携带边标记的邻接表。

具体地,计算机设备在生成有向边的边标记后,为了实现准确统计有向图中的三角形,并减少遍历过程所耗费的计算资源,计算机设备还可以将每个节点对应的邻居节点搜集起来,得到每个节点所指向的节点所构成的邻居节点集合,根据节点与对应的邻居节点集合中各邻居节点之间的边标记,生成节点对应的携带边标记的邻接表。

尤其在实际应用中,有向图中节点与节点之间的关系数据可能是分布式存储的,分布式计算服务器上各自存储了一部分节点与节点之间的关系数据,分布式计算服务器可以按照统一形式重新表示了有向边并生成了边标记,为了避免后续三角形的遍历过程中,与分布式计算服务器之间的网络通信量导致的处理效率低下的情况,计算机设备可以将各分布式计算服务器上存储的同一个节点所指向的邻居节点及边标记进行聚合,获得同一个节点所指向的邻居节点构成的集合,从而生成邻接表。

在一个实施例中,上述方法还包括:当邻居节点集合中存在边标记既为第一值又为第二值的邻居节点时,将节点与邻居节点之间有向边的边标记替换为第三值,第三值用于表示节点与邻居节点之间的有向边为双向边。

可以理解,当邻居节点集合中存在边标记既为第一值又为第二值的邻居节点时,代表有向边对应于该节点同时为出边和入边,也就是说,所指向的该邻居节点之间的有向边为双向边,为了减少冗余计算,计算机设备可以将节点与邻居节点之间有向边的边标记替换为第三值,从邻居节点集合中去除了冗余边,进一步节省了计算资源。

步骤208,基于标记后的有向图中的节点、节点的邻居节点、与节点和邻居节点共同相邻的共同节点两两之间的边标记,识别节点、邻居节点与共同节点构成的三角形的类别。

由于计算机设备按照srcid小于dstid的形式或是srcid大于dstid的形式重新表示了有向边,那么在根据节点的邻居节点、节点与邻居节点的共同节点查找三角形时,不会存在同一个三角形被查找到多次的情况,避免了冗余计算。同时,在查找到三角形后,根据三角形三条边的边标记,就能够识别三角形的类别,基于这样的思想,可以准确找出有向图中所有的三角形及相应的类别。

在一个实施例中,计算机设备可以遍历标记后的有向图中的节点;确定当前遍历节点所指向的第一邻居节点集合、第一邻居节点集合中邻居节点所指向的第二邻居节点集合以及第一邻居节点集合与第二邻居节点集合的共同节点;基于当前遍历节点、邻居节点与共同节点之间的边标记,识别当前遍历节点、邻居节点与共同节点构成的三角形的类别。

具体地,按照srcid小于dstid的形式重新表示并生成边标记后,对于重新表示后的每一个新的src节点,找到其指向的节点构成的第一邻居节点集合n(src),可以理解,n(src)中每个节点都是大于src的节点,对于n(src)中的每个节点dst,找到其指向的节点构成的第二邻居节点集合n(dst),同样地,n(dst)中每个节点都是大于dst的节点,对于n(src)与n(dst)中的共同节点neighbor,则[src,dst,neighbor]构成一个三角形。例如,节点a所指向的邻居节点集合包括节点b和节点c,节点b所指向的邻居节点集合包括节点c,那么节点a、节点b和节点c可以构成一个三角形,由于有向边是严格按照srcid<dstid表示的,在处理节点b时,其所指向的邻居节点集合中不会存在节点a,在处理节点c时,其所指向的邻居节点集合中不会包括节点b,所以不会存在同一个三角形被重复找到的情况,避免了冗余计算。

三角形的类别是三条有向边的边方向决定的,边方向通过边标记记录,所以三角形的类别由边标记决定。根据三角形的边标记与其类别的对应关系,可以梳理出三角形可以分为七种类型。如图7所示,为一个实施例中根据有向图中三角形三条有向边的方向性所定义的7种类别的三角形。根据双向边的数量与箭头的方向,依次分为trans、cycle、out-recip、trans-recip、in-recip、two-recip和three-recip。

在一个实施例中,计算机设备可以获取构成三角形的三条有向边的边方向及三角形的类别;将三条边方向按序排列,获得三角形的边方向序列;将边方向序列与三角形的类别对应存储,生成三角形的类别索引。

如图8所示,为一个实施例中生成的三角形的类别索引的示意图。参照图8,首先按照(tag1,tag2,tag3)的形式给出[src,dst,neighbor]构成的三角形的边方向序列集合,一共有27种。tag1表示边(src,dst)的边标记,tag2表示边(src,neighbor)的边标记,tag3表示边(dst,neighbor)的边标记。当出边采用0标记,入边采用1标记,双向边采用2标记时,类别为cycle的三角形对应的边方向序列为(0,1,0)和(1,0,1)中的一种;类别为trans的三角形对应的边方向序列可以是(0,0,0)、(0,0,1)、(0,1,1)、(1,0,0)、(1,1,0)和(1,1,1)中的一种;类别为out-recip的三角形对应的边方向序列可以是(0,0,2)、(2,1,1)和(1,2,0)中的一种;类别为in-recip的三角形对应的边方向序列可以是(0,2,1)、(2,0,0)和(1,1,2)中的一种;类别为trans-recip的三角形对应的边方向序列可以是(2,0,1)、(2,1,0)、(0,2,0)、(1,2,0)、(1,2,1)、(0,1,2)、(1,0,2)和(1,1,2)中的一种;类别为two-recip的三角形对应的边方向序列为(2,2,0)、(0,2,2)、(2,0,2)、(2,2,1)、(1,2,2)和(2,1,2)中的一种;类别为three-recip的三角形对应的边方向序列为(2,2,2)。

在一个实施例中,基于当前遍历节点、邻居节点与共同节点之间的边标记,识别当前遍历节点、邻居节点与共同节点构成的三角形的类别,包括:将当前遍历节点与邻居节点之间的边标记、当前遍历节点与共同节点之间的边标记及邻居节点与共同节点之间的边标记按顺序排列,获得边标记序列;将边标记序列依次与三角形的类别索引中的边方向序列进行匹配,获得当前遍历节点、邻居节点与共同节点构成的三角形的类别。

因此,计算机设备在根据当前遍历节点、邻居节点与共同节点找出三角形之后,可以进一步根据当前遍历节点与邻居节点之间的边标记,当前遍历节点与共同节点之间的边标记,邻居节点与共同节点之间的边标记这三者所构成的边标记序列,与三角形的类别索引中的边方向序列进行匹配,识别当前遍历节点、邻居节点与共同节点构成的三角形的类别。

可以理解的是,构成的边标记序列中,第一个边标记、第二个边标记与第三个边标记具体表示的是三角形中哪两个节点之间的边方向,需要与三角形的类别索引中边方向序列中每个边方向的含义保持一致,这样才能保证识别到的三角形的类别的准确性。

在一个实施例中,计算机设备还可以根据边方向序列确定构成三角形的三条有向边中双向边的数量;将数量、边方向序列与三角形的类别对应存储,生成三角形的类别索引。

具体地,参照图9,计算机设备可以进一步根据构成三角形的三条有向边中双向边的数量,即三个边标记中边标记为2的数量,即0条双向边、1条双向边、2条双向边和3条双向边,将边方向序列进行分类,分为四个分支后再生成与该数量、边方向序列对应的三角形类别索引,这样可以减少匹配次数,最多是在双向边数量为1条时要匹配7次,其余类别只需要匹配1次或3次就可以确定对应的三角形类别,进一步减少了计算冗余,提高了处理效率。例如,当边方向序列中边标记为2的数量为0时,对应第一个分支,当边方向序列为(0,1,0)或(1,0,1)时,三角形类别为cycle,当边方向序列为其他情况即(any,any,any)时,三角形类别都属于trans。

上述图数据处理方法,通过将有向图中的有向边,以从起始节点指向目的节点的原始表示形式,按照起始节点与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示,这样后续在统计三角形的数量时,就不会存在同一个三角形被查找到多次的情况,从而避免了三角形的冗余计算,节省了计算资源,运行速度更快,计算资源消耗更低,尤其是能够极大地缓解邻居很多的超级节点带来的计算压力,同时又保证了计算的正确性。同时,对于重新表示的有向边,还通过边标记记录有向边原始的边方向,能够在标记后的有向图中确定三角形的同时识别出三角形的类别,实现了有向图中由边的方向性引起的三角形类别的识别。

在一个实施例中,有向图为社区网络图,社区网络图中的节点表示社区网络中的用户标识,社区网络图中的有向边,表示起始节点对应的用户标识与目的节点对应的用户标识之间存在社交关系,方法还包括:根据社区网络图中各节点所在不同类别三角形的数量,生成节点所表示的用户标识对应的特征向量;根据用户标识对应的特征向量,从社区网络图确定相似程度大于阈值的用户标识构成的社区子网络图;基于社区子网络图从社区网络中确定社区子网络。

节点所在的不同类别三角形的数量可以作为节点在有向图中的拓扑特征,拓扑特征可以与节点的画像特征共同构成节点的特征向量,生成的特征向量可作为可应用于各种场景的模式识别任务。在本实施例中,三角形数量应用于社区发现场景,计算机设备可以根据生成的特征向量从大规模社区网络图找出中具备相似性的节点,根据这些节点所对应的用户标识构成的社区子网络图,从大规模社区网络中挖掘出社区子网络。

在一个实施例中,如图10所示,提供了一种图数据处理方法,以该方法应用于图1中的计算机设备(例如终端或服务器)为例进行说明,包括以下步骤:

步骤1002,获取有向图,有向图中的有向边以从起始节点指向目的节点表示。

步骤1004,根据起始节点与目的节点的大小关系,将有向边以从较小节点指向较大节点表示,或者,将有向边以较大节点指向较小节点表示。

步骤1006,基于表示后的有向图中的节点、节点的邻居节点、与节点和邻居节点共同相邻的共同节点构成的三角形,识别节点所在三角形的数量。

本实施例中,通过将有向图中的有向边,以从起始节点指向目的节点的原始表示形式,按照起始节点与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示,这样后续在统计三角形的数量时,就不会存在同一个三角形被查找到多次的情况,从而避免了有向图中三角形的冗余计算,能够找出有向图中每个节点所在三角形的数量,节省了计算资源,运行速度更快,计算资源消耗更低,尤其是能够极大地缓解邻居很多的超级节点带来的计算压力,同时又保证了计算的正确性。

如图11所示,为一个具体的实施例中图数据处理方法的示意图。参照图11,图11中的(a)部分是有向图的示意图。图11中的(b)部分是有向图原始的邻接表数据,邻接表数据可以存储在分布式节点上。图11中的(c)部分,是通过按照srcid小于dstid的形式重新表示有向边后,生成表示有向边的边方向的边标记,边标记为1表示该有向边相对于重新表示后的起始节点为入边,边标记为0表示该有向边相对于重新表示后的起始节点为出边。图11中的(d)部分,是对于重新表示后的有向图,聚合每个起始节点对应的有向边及边标记。图11中的(e)部分,是将节点所指向的邻居节点的边标记同时为1和0的双向边的边标记替换为2,以去除冗余边。图11中的(f)部分,是根据每个节点所指向的邻居节点构成的集合,生成带边标记的邻接表。

图11中的(g)部分,根据上一步生成的邻接表,遍历邻接表中的每一个src节点,比如,首先处理src节点1,此时1的邻居集合n(1)={2,3,4},对应的边标记分别为0、1、0,对src节点1的dst节点2来说,其邻居集合n(2)={3,4},对应的边标记分别为2、1,n(2)和n(1)都包含共同节点3和4,因此可以识别出[1,2,3]和[1,2,4]两个三角形,按照图8中(tag1,tag2,tag3)中各边标记的含义,确定其对应的边标记序列分别是(0,1,2)和(0,0,1)。接下来继续在src节点1的dst节点3上识别三角形,对于dst节点3来说,其邻居集合n(3)={4,5},对应的边标记分别为0、2,n(3)和n(1)都包含共同节点4,因此可以识别出[1,3,4]这个三角形,其对应的边标记序列是(1,0,0)。以此类推,直到节点1的邻居节点集合中所有邻居节点都被遍历后,接下来以同样的方式处理邻接表中的其他src节点。

图11中的(h)部分,对于上一步找出的三角形,根据其对应的边标记序列中边标记为2的数量,将其对应到三角形类别索引的四个分支中的其中一个,再将边标记序列与在该分支下的边方向序列进行匹配,根据匹配结果确定三角形的类别。

parameterserver是一种用于机器学习领域分布式地存储或更新参数的超大规模参数服务器,angel是一个基于参数服务器理念开发的高性能分布式机器学习平台,spark是一个专为大规模数据处理而设计的快速通用的计算引擎,sparkonangel是一个将angel强大的参数服务器功能与spark的大规模数据处理能力相结合的高性能分布式计算平台。

在一个实施例中,有向图上的三角形计数处理过程,可以被扩展成分布式计算的逻辑,计算机设备可以在sparkonangel上实现超大规模图结构数据中三角形挖掘。对于各个分布式计算服务器上存储的部分节点之间的关系数据,由于在生成邻接表之前的步骤都是简单的数据预处理步骤,分布式计算服务器可以自行使用spark进行处理,获得邻接表。生成邻接表后,分布式计算服务器将每个节点的邻接表推送到参数服务器上。在识别和判定三角形时,分布式计算服务器在处理本地的src节点时,需要拉取对应的dst节点的邻居节点集合,此时分布式计算服务器各自从参数服务器拉取对应dst节点的邻居节点集合,从而完成三角形的查找与识别。

如图12所示,在各个分布式计算服务器将每个节点的邻居集合推送至参数服务器之后,在处理各自的dst节点时,首先,从参数服务器拉取dst节点对应的邻居节点集合及边标记,例如,分布式计算服务器1在处理节点1时,需要从参数服务器拉取节点2、3、4的邻居节点集合,以及在处理节点2时,需要获得节点3、4的邻居节点集合,无需重复拉取;分布式计算服务器2在处理节点3时,需要拉取节点4、5的邻居节点集合,在处理节点4时,需要获得节点5的邻居节点集合,无需重复拉取。接着,就可以根据拉取得到的dst节点的邻居节点集合确定三角形及三角形类别。

此外,当有向图规模过大时,每个分布式计算服务器处理的src节点对应的dst节点也会过多,如果一次性拉取整个分布式计算服务器上所有dst节点的邻居节点,会因为通信量太大导致通信效率低,从而影响性能,此时可以分批次处理分布式计算服务器上的dst节点,每次仅处理一部分,分多次拉取,从而可以降低每次拉取的数据量,降低通信和存储开销。

如图13所示,为一个具体的实施例中图数据处理方法的流程示意图。参照图13,包括以下步骤:

步骤1302,获取有向图,有向图中有向边以从起始节点指向目的节点表示。

步骤1304,遍历有向图中的有向边,当遍历的有向边所在的起始节点大于目的节点时,将有向边以从目的节点指向起始节点表示,并将从目的节点指向起始节点的边方向,标记为第一值。

步骤1306,当遍历的有向边所在的起始节点小于目的节点时,并将从起始节点指向目的节点的边方向,标记为第二值。

步骤1308,对于标记后的有向图中的每个节点,聚集每个节点所指向的邻居节点,得到每个节点对应的邻居节点集合。

步骤1310,当邻居节点集合中存在边标记既为第一值又为第二值的邻居节点时,将节点与邻居节点之间有向边的边标记替换为表示节点与邻居节点之间的有向边为双向边的第三值。

步骤1312,根据节点与对应的邻居节点集合中各邻居节点之间的边标记,生成节点对应的携带边标记的邻接表。

步骤1314,遍历邻接表中的节点。

步骤1316,确定当前遍历节点所指向的第一邻居节点集合。

步骤1318,遍历第一邻居节点集合中的邻居节点。

步骤1320,确定当前遍历的邻居节点所指向的第二邻居节点集合。

步骤1322,确定第一邻居节点集合与第二邻居节点集合中的共同节点。

步骤1324,根据当前遍历节点、当前遍历的邻居节点以及共同节点确定三角形。

步骤1326,将当前遍历节点与当前遍历的邻居节点之间的边标记、当前遍历节点与共同节点之间的边标记及当前遍历的邻居节点与共同节点之间的边标记按顺序排列,获得边标记序列。

步骤1328,确定边标记序列中表示有向边为双向边的边标记的数量。

步骤1330,获取三角形的类别索引,类别索引是根据构成三角形的三条有向边的边方向序列与类别之间的对应关系生成的。

步骤1332,在三角形的类别索引中,将边标记序列与数量对应的边方向序列进行匹配。

步骤1334,根据匹配到的边方向序列确定当前遍历节点、邻居节点与共同节点构成的三角形的类别。

步骤1336,根据当前遍历节点所在不同类别三角形的数量,生成当前遍历节点所表示的用户标识对应的特征向量。

步骤1338,根据特征向量对节点所表示的用户标识进行分类。

上述图数据处理方法,通过将有向图中的有向边,以从起始节点指向目的节点的原始表示形式,按照起始节点与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示,这样后续在统计三角形的数量时,就不会存在同一个三角形被查找到多次的情况,从而避免了三角形的冗余计算,节省了计算资源,运行速度更快,计算资源消耗更低,尤其是能够极大地缓解邻居很多的超级节点带来的计算压力,同时又保证了计算的正确性。同时,对于重新表示的有向边,还通过边标记记录有向边原始的边方向,能够在标记后的有向图中确定三角形的同时识别出三角形的类别,实现了有向图中由边的方向性引起的三角形类别的识别。

应该理解的是,虽然图2、图10及图13的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、图10及图13中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图14所示,提供了一种图数据处理装置1400,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:获取模块1402、边表示模块1404、边标记模块1406和识别模块1408,其中:

获取模块1402,用于获取有向图,有向图中的有向边以从起始节点指向目的节点表示;

边表示模块1404,用于根据起始节点的节点标识与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示;

边标记模块1406,用于生成用于记录有向边的原始边方向的边标记,得到标记后的有向图;

识别模块1408,用于基于标记后的有向图中的节点、节点的邻居节点、与节点和邻居节点共同相邻的共同节点两两之间的边标记,识别节点、邻居节点与共同节点构成的三角形的类别;其中,识别的三角形的类别,用于生成节点的特征向量。

在一个实施例中,获取模块1402还用于获取与用户标识对应的支付记录;根据支付记录获得用户标识之间的支付交互数据;根据支付交互数据生成有方向的支付网络图;其中,支付网络图的节点表示用户标识,支付网络图中两个节点之间的有向边表示相应的两个用户标识之间存在单向或双向的支付交互事件。

在一个实施例中,获取模块1402还用于获取与社区网络中用户标识对应的联系人列表;根据联系人列表获得用户标识之间的联系人关系数据;根据联系人关系数据生成有方向的社区网络图;其中,社区网络图中的节点表示用户标识,社区网络图中两个节点之间的有向边表示相应的两个用户标识之间存在单向或双向的联系人关系。

在一个实施例中,边表示模块1404用于当有向边所在的起始节点大于目的节点时,将有向边以从目的节点指向起始节点表示;边标记模块1406用于将从目的节点指向起始节点的边方向,标记为第一值。

在一个实施例中,边标记模块1406用于当有向边所在的起始节点小于目的节点时,将从起始节点指向目的节点的边方向,标记为第二值。

在一个实施例中,边表示模块1404用于当有向边所在的起始节点小于目的节点时,将有向边以从目的节点指向起始节点表示;边标记模块1406用于将从目的节点指向起始节点的边方向,标记为第一值。

在一个实施例中,边标记模块1406用于当有向边所在的起始节点大于目的节点时,将从起始节点指向目的节点的边方向,标记为第二值。

在一个实施例中,图数据处理装置1400还包括聚合模块,用于对于标记后的有向图中的每个节点,聚集节点所指向的邻居节点,得到节点对应的邻居节点集合;根据节点与对应的邻居节点集合中各邻居节点之间的边标记,生成节点对应的携带边标记的邻接表。

在一个实施例中,边标记模块1406用于当邻居节点集合中存在边标记既为第一值又为第二值的邻居节点时,将节点与邻居节点之间有向边的边标记替换为第三值,第三值用于表示节点与邻居节点之间的有向边为双向边。

在一个实施例中,图数据处理装置1400还包括类别索引生成模块,用于获取构成三角形的三条有向边的边方向及三角形的类别;将三条边方向按序排列,获得三角形的边方向序列;将边方向序列与三角形的类别对应存储,生成三角形的类别索引。

在一个实施例中,类别索引生成模块,用于根据边方向序列确定构成三角形的三条有向边中双向边的数量;将数量、边方向序列与三角形的类别对应存储,生成三角形的类别索引。

在一个实施例中,识别模块1408,用于遍历标记后的有向图中的节点;确定当前遍历节点所指向的第一邻居节点集合、第一邻居节点集合中邻居节点所指向的第二邻居节点集合以及第一邻居节点集合与第二邻居节点集合的共同节点;基于当前遍历节点、邻居节点与共同节点之间的边标记,识别当前遍历节点、邻居节点与共同节点构成的三角形的类别。

在一个实施例中,识别模块1408,用于将当前遍历节点与邻居节点之间的边标记、当前遍历节点与共同节点之间的边标记及邻居节点与共同节点之间的边标记按顺序排列,获得边标记序列;将边标记序列依次与三角形的类别索引中的边方向序列进行匹配,获得当前遍历节点、邻居节点与共同节点构成的三角形的类别。

在一个实施例中,识别模块1408,用于确定边标记序列中表示有向边为双向边的边标记的数量;在三角形的类别索引中,将边标记序列与数量对应的边方向序列进行匹配,根据匹配到的边方向序列确定当前遍历节点、邻居节点与共同节点构成的三角形的类别。

在一个实施例中,有向图为社区网络图,社区网络图中的节点表示社区网络中的用户标识,社区网络图中的有向边,表示起始节点对应的用户标识与目的节点对应的用户标识之间存在社交关系,图数据处理装置1400还包括向量生成模块和子网络挖掘模块,向量生成模块用于根据社区网络图中各节点所在不同类别三角形的数量,生成节点所表示的用户标识对应的特征向量;子网络挖掘模块用于根据用户标识对应的特征向量,从社区网络图确定相似程度大于阈值的用户标识构成的社区子网络图;基于社区子网络图从社区网络中确定社区子网络。

上述图数据处理装置1400,通过将有向图中的有向边,以从起始节点指向目的节点的原始表示形式,按照起始节点与目的节点的节点标识之间的指定顺序,将有向边以统一形式表示,这样后续在统计三角形的数量时,就不会存在同一个三角形被查找到多次的情况,从而避免了三角形的冗余计算,节省了计算资源,运行速度更快,计算资源消耗更低,尤其是能够极大地缓解邻居很多的超级节点带来的计算压力,同时又保证了计算的正确性。同时,对于重新表示的有向边,还通过边标记记录有向边原始的边方向,能够在标记后的有向图中确定三角形的同时识别出三角形的类别,实现了有向图中由边的方向性引起的三角形类别的识别。

关于图数据处理装置1400的具体限定可以参见上文中对于图数据处理方法的限定,在此不再赘述。上述图数据处理装置1400中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图15所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的计算机设备通过网络连接通信。该计算机程序被处理器执行时以实现一种图数据处理方法。

本领域技术人员可以理解,图15中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-onlymemory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(randomaccessmemory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(staticrandomaccessmemory,sram)或动态随机存取存储器(dynamicrandomaccessmemory,dram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1