掌桥专利:专业的专利平台
掌桥专利
首页

一种社区聚合的方法及装置

文献发布时间:2023-06-19 11:39:06


一种社区聚合的方法及装置

技术领域

本申请涉及监控领域,特别涉及一种社区聚合的方法及装置。

背景技术

随着信息技术的发展,信息系统中保存着大量用户的信息特征,用户与用户之间也存在着某种关联性,用户的特征具有多维度,多关联性。信息系统可以用图来存储大量用户的信息特征,在该图中每个用户为一个节点,每个节点与其周围的节点之间有边相连形成网络。

为了帮助人们更有效地了解该网络的结构特征,目前采用社区识别技术从该网络中识别出一个个社区,社区可以由至少一个节点构成的聚类,同一社区内的节点具有相同兴趣,然后基于识别的社区用于下游的应用。

目前可以使用随机邻居LOUVAIN算法从图中识别社区,但随机邻居LOUVAIN算法复杂度较高,当图中包括大量的节点时,从图中识别社区的耗时很高。

发明内容

本申请实施例提供了一种社区聚合的方法及装置,以减少识别社区的耗时。所述技术方案如下:

一方面,本申请提供了一种社区聚合的方法,所述方法包括:

获取第一社区集合,所述第一社区集合包括多个社区,每个社区包括图中的一个节点,所述图是包括多个节点的无向图;

获取第一节点的任意两个邻居节点的模块度增加值,所述第一节点是所述图中的任一个节点;在所述第一社区集合中根据所述两个邻居节点的模块度增加值将所述第一节点从第一社区移动到所述两个邻居节点中的一个邻居节点所在的社区,得到第二社区集合,所述第一社区是所述第一节点所在的社区;

获取第二节点的每个邻居节点的模块度增加值,所述第二节点是所述图中的任一个节点;在所述每个邻居节点对应的模块度增加值中的最大模块度增加值超过预设阈值时,在所述第二社区集合中将所述第二节点从第二社区移动到最大模块度增加值对应的邻居节点所在的社区中,得到第三社区集合,所述第二社区是所述第二节点所在的社区。

作为一种示例,所述获取第一节点的任意两个邻居节点的模块度增加值,包括:

将第一节点从第一社区移动到第一邻居节点所在的社区并获取当前所有社区的第一模块度增加值,所述第一模块度增加值为所述第一邻居节点的模块度增加值,所述第一邻居节点是所述第一节点的任一个邻居节点;

将所述第一节点从第一邻居节点所在的社区移动到第二邻居节点所在的社区并获取当前所有社区的第二模块度增加值,所述第二模块度增加值为所述第二邻居节点的模块度增加值,所述第二邻居节点是所述第一节点的另一个邻居节点;

作为一种示例,所述根据所述两个邻居节点的模块度增加值将所述第一节点添加到所述两个邻居节点中的一个邻居节点所在的社区,包括:

从所述第一模块度增加值和所述第二模块度增加值中选择最大模块度增加值;

在所述最大模块度增加值大于0时,将所述第一节点从所述第二邻居节点所在的社区移动到所述最大模块度增加值对应的邻居节点所在的社区中。

作为一种示例,所述根据所述两个邻居节点的模块度增加值将所述第一节点从第一社区移动到所述两个邻居节点中的一个邻居节点所在的社区之后,还包括:

在获取所述图中的每个节点的两个邻居节点的模块块增加值后,增加第一社区识别次数,在所述第一社区识别次数未达到第一预设次数阈值时,从所述图中的其他节点中选择一个节点作为第一节点,执行所述获取第一节点的任意两个邻居节点的模块度增加值的操作;在所述第一社区识别次数达到第一预设次数阈值时,在将所述第一节点移动到所述两个邻居节点中的一个邻居节点所在的社区后执行所述获取第二节点的每个邻居节点的模块度增加值。

作为一种示例,所述获取第二节点的每个邻居节点的模块度增加值,包括:

将第二节点移动到所述第二节点的一个邻居节点所在的社区并获取当前所有社区的模块度增加值,将所述模块度增加值确定为所述一个邻居节点的模块度增加值。

作为一种示例,所述方法还包括:

在所述每个邻居节点对应的模块度增加值中的最大值未超过预设阈值时,增加第二社区识别次数,在所述第二社区识别次数未达到第二预设次数阈值时,将识别的每个社区确定为所述图中的一个节点,执行所述将图中的每个节点确定为一个社区的操作。

另一方面,本申请提供了一种社区聚合的装置,所述装置包括:

获取模块,用于获取第一社区集合,所述第一社区集合包括多个社区,每个社区包括图中的一个节点,所述图是包括多个节点的无向图;

第一移动模块,用于获取第一节点的任意两个邻居节点的模块度增加值,所述第一节点是所述图中的任一个节点;在所述第一社区集合中根据所述两个邻居节点的模块度增加值将所述第一节点从第一社区移动到所述两个邻居节点中的一个邻居节点所在的社区,得到第二社区集合,所述第一社区是所述第一节点所在的社区;

第二移动模块,用于获取第二节点的每个邻居节点的模块度增加值,所述第二节点是所述图中的任一个节点;在所述每个邻居节点对应的模块度增加值中的最大模块度增加值超过预设阈值时,在所述第二社区集合中将所述第二节点从第二社区移动到最大模块度增加值对应的邻居节点所在的社区中,得到第三社区集合,所述第二社区是所述第二节点所在的社区。

作为一种示例,所述第一移动模块包括:

第一移动单元,用于将第一节点从第一社区移动到第一邻居节点所在的社区并获取当前所有社区的第一模块度增加值,所述第一模块度增加值为所述第一邻居节点的模块度增加值,所述第一邻居节点是所述第一节点的任一个邻居节点;

第二移动单元,用于将所述第一节点从第一邻居节点所在的社区移动到第二邻居节点所在的社区并获取当前所有社区的第二模块度增加值,所述第二模块度增加值为所述第二邻居节点的模块度增加值,所述第二邻居节点是所述第一节点的另一个邻居节点;

作为一种示例,所述第一移动模块还包括:

选择单元,用于从所述第一模块度增加值和所述第二模块度增加值中选择最大模块度增加值;

第三移动单元,用于在所述最大模块度增加值大于0时,将所述第一节点从所述第二邻居节点所在的社区移动到所述最大模块度增加值对应的邻居节点所在的社区中。

作为一种示例,所述装置还包括:

选择模块,用于在获取所述图中的每个节点的两个邻居节点的模块块增加值后,增加第一社区识别次数,在所述第一社区识别次数未达到第一预设次数阈值时,从所述图中的其他节点中选择一个节点作为第一节点,执行所述获取第一节点的任意两个邻居节点的模块度增加值的操作;在所述第一社区识别次数达到第一预设次数阈值时,在将所述第一节点移动到所述两个邻居节点中的一个邻居节点所在的社区后执行所述获取第二节点的每个邻居节点的模块度增加值。

作为一种示例,所述第二移动模块,用于将第二节点移动到所述第二节点的一个邻居节点所在的社区并获取当前所有社区的模块度增加值,将所述模块度增加值确定为所述一个邻居节点的模块度增加值。

作为一种示例,所述确定模块,还用于:

在所述每个邻居节点对应的模块度增加值中的最大值未超过预设阈值时,增加第二社区识别次数,在所述第二社区识别次数未达到第二预设次数阈值时,将识别的每个社区确定为所述图中的一个节点,执行所述将图中的每个节点确定为一个社区的操作。

本申请实施例提供的技术方案可以包括以下有益效果:

获取第一社区集合中的任意两个邻居节点的模块度增加值,在第一社区集合中根据该两个邻居节点的模块度增加值将该节点移动到该两个邻居节点中的一个邻居节点所在的社区,得到第二社区集合。由于获取该两个邻居节点的模块度增加值,所以参与运算的节点数目较少,从而能够快速地将第一社区集合中的大量节点聚类到社区中。然后,获取第二社区集合中的节点的每个邻居节点的模块度增加值,将第二节点移动到最大模块度增加值对应的邻居节点所在的社区中,从而能够使图快速地收敛,不仅提高了识别社区的精度,还减少识别社区的耗时。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

图1是本申请实施例提供的一种图的结构示意图;

图2是本申请实施例提供的一种社区聚合的方法流程图;

图3是本申请实施例提供的另一种社区聚合的方法流程图;

图4是本申请实施例提供的另一种图的结构示意图;

图5是本申请实施例提供的一种社区聚合的装置结构示意图;

图6是本申请实施例提供的一种终端结构示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

参见图1所示的图,该图可以是包括多个节点的无向图,对于该图中的每个节点,该节点可以与其邻居节点之间使用边相连。图中的每个节点可以是用户,节点与其邻居节点之间存在边相连,表示两个用户之间存在某种联系,例如该两个用户之间可能互为好友。在本申请中可以通过如下任一实施例在该图中识别社区,社区是具有相同兴趣的节点进行聚类得到的节点集群。

参见图2,本申请实施例提供了一种社区聚合的方法,所述方法包括:

步骤201:获取第一社区集合,第一社区集合包括多个社区,每个社区包括图中的一个节点。

在本步骤中,将图中的每个节点确定为一个社区并组成第一社区集合,该图是包括多个节点的无向图,该图中的节点数目与确定的社区数目相等。

步骤202:获取第一节点的任意两个邻居节点的模块度增加值,第一节点是第一社区集合中的任一个节点;在第一社区集合中根据该两个邻居节点的模块度增加值将第一节点从第一社区移动到该两个邻居节点中的一个邻居节点所在的社区,得到第二社区集合,第一社区是第一节点所在的社区。

本步骤是二值随机邻居LOUAIN迭代算法的实现过程。由于该算法只获取第一节点的两个邻居节点的模块度增加值,需要参与运算的邻居节点数目较少,所以该算法的计算复杂度较低。因此在本步骤中,首先使用该迭代算法对第一社区集合中的节点进行社区识别,能够使第一社区集合快速收敛,将第一社区集合中的大量节点聚类成社区,得到第二社区集合。但是在本步骤中只能对第一社区集合进行粗框架聚类,因此在对第一社区集合中的每个节点进行至少一次步骤202的操作后,得到第二社区集合,然后可以对第二社区集合执行如下步骤203的操作。

步骤203:获取第二节点的每个邻居节点的模块度增加值,第二节点是第二社区集合中的任一个节点;在每个邻居节点对应的模块度增加值中的最大模块度增加值超过预设阈值时,在第二社区集合中将第二节点从第二社区移动到最大模块度增加值对应的邻居节点所在的社区中,得到第三社区集合,第二社区是第二节点所在的社区。

本步骤是随机邻居LOUAIN迭代算法的实现过程。由于该算法获取第二节点的每个邻居节点的模块度增加值,在第二社区集合中第二节点可能有较多的邻居节点,需要参与运算的邻居节点数目较多,所以该算法的计算复杂度较高,但对第二社区集合进行聚类的效果较好。但是在本步骤中,第二社区集合中的大量节点已聚类成社区,再使用本步骤对第二社区集合进行一步细化聚类,会很快使用第二社区集合达收敛,并保证社区聚类的效果。

上述方法的执行主体可以为终端或服务器等,终端可以为手机、笔记本电脑或台式电脑等。

在本申请实施例中,对于第一社区集合中的任一节点即第一节点,获取第一节点的任意两个邻居节点的模块度增加值,根据该两个邻居节点的模块度增加值将第一节点移动到该两个邻居节点中的一个邻居节点所在的社区,由于在第一节点和该两个邻居节点之间进行社区的聚类,所以参与运算的节点数目较少,从而能够快速地将第一社区集合中的大量节点聚类到社区中,得到第二社区集合。然后,对第二社区集合中的每个节点即第二节点,获取第二节点的每个邻居节点的模块度增加值,将第二节点移动到最大模块度增加值对应的邻居节点所在的社区中,由于在大量节点已聚类到社区的第二社区集合中,基于第二节点和每个邻居节点之间进行社区的进一步聚类,从而能够使第二社区集合快速地收敛,不仅提高了识别社区的精度,还减少识别社区的耗时。

参见图3,本申请实施例提供了一种社区聚合的方法,该方法包括:

步骤301:获取第一社区集合,第一社区集合包括多个社区,每个社区包括图中的一个节点。

在本步骤中,将图中的每个节点确定为一个社区,得到第一社区集合。该图是包括多个节点的无向图,该图中的节点数目与第一社区集合中的社区数目相等。

图中的每个节点都有自身的ID号,对于每个节点,可以将该节点的ID号确定为该节点所在社区的编号,将该节点的ID号和该节点所在的社区的编号对应保存在对应关系表中,从而实现将图中的每个节点确定为一个社区。

例如,参见图1所示的图,该图中包括15个节点,将该图中的每个节点确定为一个社区后形成15个社区。该15个节点分别为节点1、2、3、……、15,节点1、2、3、……、15的ID号分别为1、2、3、……、15。将节点1的ID号“1”确定为节点1所在的社区的编号,将节点2的ID号“2”确定为节点1所在的社区的编号,将节点3的ID号“3”确定为节点3所在的社区的编号,……,将节点15的ID号“15”确定为节点15所在的社区的编号。其中,第一社区集合包括编号为1、2、3、……、15的社区,即在初始,第一社区集合包括15个社区,如图1所示。

将图中的每个节点确定为一个社区后,即得到第一社区集合后,基于第一社区集合当前包括的所有社区计算所有社区对应的模块度值,并记录该模块度值。模块度值是一种衡量社区聚类程度的度量,用于表示当前识别的所有社区的合理程度。模块度值越高,表示当前识别的所有社区的合理程度越高,反之表示当前识别的所有社区的合理程度越低。

例如,将图1所示的图中的每个节点确定为一个社区后得到15个社区,分别为第一社区集合的社区1、2、3、……、15,基于社区1、2、3、……、15计算该15个社区对应的模块度值v1,并记录该模块度值v1。

步骤302:获取第一节点的任意两个邻居节点的模块度增加值,第一节点是该图中的任一个节点。

在本步骤中,可以通过如下3021-3023的操作来实现。该3021-3023的操作可以分别为:

3021:从第一社区集合中选择一个节点作为第一节点,从第一节点的邻居节点中随机选择两个邻居节点,为了便于说明称该两个邻居节点分别为第一邻居节点和第二邻居节点。

在从第一社区集合中选择一个节点作为第一节点后,从第一社区集合中获取与第一节点之间存在边相连的各节点作为第一节点的邻居节点,从第一节点的邻居节点中随机选择第一邻居节点和第二邻居节点。

例如,从图1所示的第一社区集合中选择节点1作为第一节点,从第一社区集合中获取与第一节点之间存在边相连的节点2、4、7作为第一节点的邻居节点,从第一节点的邻居节点2、4、7中随机选择两个邻居节点。假设选择邻居节点2和4,将邻居节点2作为第一邻居节点,将邻居节点4作为第二邻居节点。

3022:将第一节点从第一社区中移动到第一邻居节点所在的社区并获取当前所有社区的第一模块度增加值,第一模块度增加值为第一邻居节点的模块度增加值,第一社区为第一节点所在的社区。

在本步骤中,在对应关系表中将第一节点对应的第一社区的编号修改为第一邻居节点所在社区的编号,实现将第一节点从第一社区移动到第一邻居节点所在的社区,基于当前所有社区计算当前所有社区对应的模块度值,计算该模块度值与记录的模块度值之间的差值,将该差值作为第一邻居节点的模块度增加值。

例如,在图1所示的第一社区集合中,将第一节点1对应的第一社区的编号修改为第一邻居节点2所在的社区2的编号2,实现将第一节点1从社区1移动到社区2中。此时当前所有的社区包括14个社区,分别为社区2、3、4、……、15,其中,社区2中包括第一节点1和节点2,其他的每个社区均包括一个节点。基于当前14个社区计算当前14个社区对应的模块度值v2,计算该模块度值v2与记录的模块度值v1之间的差值Δw1=v2-v1,将该差值Δw1作为第一邻居节点2的模块度增加值,即第一模块度增加值为Δw1。

3023:将第一节点从第一邻居节点所在的社区移动到第二邻居节点所在的社区并获取当前所有社区的第二模块度增加值,第二模块度增加值为第二邻居节点的模块度增加值。

在本步骤中,在对应关系表中将第一节点对应的社区的编号修改为第二邻居节点所在社区的编号,实现将第一节点移动到第二邻居节点所在的社区,基于当前所有社区计算当前所有社区对应的模块度值,计算该模块度值与记录的模块度值之间的差值,将该差值作为第二邻居节点的模块度增加值。

例如,在图1所示的第一社区集合中,将第一节点1对应的社区的编号修改为第二邻居节点4所在的社区4的编号4,实现将第一节点1移动到社区4中。此时当前第一社区集合中的所有的社区包括14个社区,分别为社区2、3、4、……、15,其中,社区4中包括第一节点1和节点4,其他的每个社区均包括一个节点。基于当前14个社区计算当前14个社区对应的模块度值v3,计算该模块度值v3与记录的模块度值v1之间的差值Δw2=v3-v1,将该差值Δw2作为第二邻居节点4的模块度增加值,即第二模块度增加值为Δw2。

步骤303:根据该两个邻居节点的模块度增加值将第一节点添加到该两个邻居节点中的一个邻居节点所在的社区。

在本步骤中,从第一模块度增加值和第二模块度增加值中选择最大模块度增加值;在最大模块度增加值大于0时,将第一节点从第二邻居节点所在的社区移动到最大模块度增加值对应的邻居节点所在的社区中;在最大模块度增加值小于或等于0时,将第一节点停留在第一社区中,即将第一节点从第二邻居节点所在的社区移动到第一社区中。

在最大模块度增加值大于0时,表示第一节点和最大模块度增加值对应的邻居节点所在的社区中的节点之间的关联性比较高,将第一节点添加到最大模块度增加值对应的邻居节点所在的社区后可以增加社区划分的合理程度。

在最大模块度增加值小于或等于0时,表示第一节点和第一邻居节点所在的社区中的节点之间的关联性较低,第一节点和第二邻居节点所在的社区中的节点之间的关联性也较低,因此不需要将第一节点移动到第一邻居节点所在的社区和第二邻居节点所在的社区。

在最大模块度增加值大于0时,还将记录的模块度值与该最大模块度增加值进行累加,将记录的模块度值更新为累加得到的累加值。或者,确定该最大模块度增加值对应的邻居节点,将记录的模块度值更新为该邻居节点对应的模块度值。

例如,假设第一模块度增加值为Δw1大于第二模块度增加值为Δw2,且第一模块度增加值为Δw1大于0,则将第一节点1移动到最大模块度增加值对应的邻居节点2所在的社区2中。将记录的模块度值v1与第一模块度增加值Δw1进行累加,得到累加值v2,将记录的模块度值v1更新为累加值v2。

如果第一社区集合中还存在未选择的节点,则从未选择的节点中随机选择一个节点作为第一节点,然后重复执行上述步骤302至303的操作。如果第一社区集合中不存在未被选择的节点,则执行步骤304。

例如,对于图1所示的图中未被选择的节点为节点2、3、……、15,从节点2、3、……、15中随机选择一个节点,假设选择节点2作为第一节点,然后重复执行上述步骤302至303的操作,直至对节点1、2、3、……、15中的每个节点均执行过上述步骤302至303的操作后,才开始执行如下步骤304的操作。

步骤304:增加第一社区识别次数,在第一社区识别次数未达到第一预设次数阈值时,从第一社区集合中包括的节点中随机选择一个节点作为第一节点,执行步骤302;在第一社区识别次数达到第一预设次数阈值时,将此时的第一社区集合作为第二社区集合,执行步骤305。

其中,第一社区识别次数的初值为0,在本实施例中,可以设置对第一社区集合中的节点重复执行上述步骤302至303的次数达到第一预设次数阈值时,才开始执行如下步骤305。在上述步骤中,由于只需要获取第一节点的任意两个邻居节点的模块度增加值,获取的模块度增加值较少,能够很快执行完上述302和303两个步骤,如此能够从第一社区集合包括的大量节点中很快聚类出多个社区。

第一预设次数阈值可以为1、2或3等数值。

例如,假设对图1所示的第一社区集合中的节点经过第一预设次数阈值次上述步骤302至303的操作,将图1中的社区聚类为社区2、4、5、8和10,此时第一社区集合作为第二社区集合,第二社区集合包括社区2、4、5、8和10。假设,社区2中包括节点1、2、3,社区4包括节点4、7、9,社区5包括节点5、11,社区8包括节点6、12,社区10包括节点10、13、14、15。

步骤305:在第二社区集合中获取第二节点的每个邻居节点的模块度增加值,第二节点是第二社区集合中的任一个节点。

在本步骤中,可以通过如下3051-3052的操作来实现。该3051-3052的操作可以分别为:

3051:从第二社区集合中选择一个节点作为第二节点,从第二节点的邻居节点中随机选择一个邻居节点。

在从第二社区集合中选择一个节点作为第二节点后,从第二社区集合中获取与第二节点之间存在边相连的各节点作为第二节点的邻居节点,从第二节点的邻居节点中随机选择一个邻居节点。

例如,从第二社区集合中选择节点1作为第二节点,从第二社区集合中获取与第二节点之间存在边相连的节点2、4、7作为第二节点的邻居节点,从第二节点的邻居节点2、4、7中随机选择一个邻居节点。假设选择邻居节点4。

3052:将第二节点从第二社区中移动到该邻居节点所在的社区并获取当前所有社区的模块度增加值,将该模块度增加值确为该邻居节点的模块度增加值,第二社区为第二节点所在的社区。

在本步骤中,在对应关系表中将第二节点对应的社区的编号修改为该邻居节点所在社区的编号,实现将第二节点移动到该邻居节点所在的社区,基于当前所有社区计算当前所有社区对应的模块度值,计算该模块度值与记录的模块度值之间的差值,将该差值作为该邻居节点的模块度增加值。

如果第二节点的邻居节点中还存在未被选择的邻居节点,则从未被选择的邻居节点中再随机选择一个节点,然后执行本步骤,直至选择完第二节点的所有邻居节点时为止。

例如,在第二社区集合中,将第二节点1对应的社区的编号修改为其邻居节点4所在的社区4的编号4,实现将第二节点1移动到社区4中。此时当前所有的社区包括5个社区,分别为社区2、4、5、8和10,其中,社区2中包括节点2和3,社区4包括节点4、7、9,社区5、8和10中的每个社区中的节点保持不变,即社区5包括节点5、11,社区8包括节点6、12,社区10包括节点10、13、14、15。基于当前该5个社区计算当前该5个社区对应的模块度值v4,计算该模块度值v4与记录的模块度值v之间的差值Δw5=v2-v,将该差值Δw5作为该邻居节点4的模块度增加值。

从第二节点的邻居节点2、4、7中选择邻居节点2,再重复执行3052的操作得到邻居节点2的模块度增加值Δw6,以及从第二节点的邻居节点2、4、7中选择邻居节点7,再重复执行3052的操作得到邻居节点7的模块度增加值Δw7。

步骤306:在每个邻居节点对应的模块度增加值中的最大模块度增加值超过预设阈值时,将第二节点移动到最大模块度增加值对应的邻居节点所在的社区中,得到第三社区集合。

在最大模块度增加值超过预设阈值时,表示第二节点和最大模块度增加值对应的邻居节点所在的社区中的节点之间的关联性比较高,将第二节点移动到最大模块度增加值对应的邻居节点所在的社区后可以增加社区聚类的合理程度。

在最大模块度增加值未超过预设阈值时,表示第二节点和其每个邻居节点所在的社区中的节点之间的关联性较低,因此不需要将第二节点添加到其邻居节点所在的社区。

在最大模块度增加值超过预设阈值时,还将记录的模块度值与该最大模块度增加值进行累加,将记录的模块度值更新为累加得到的累加值。或者,确定该最大模块度增加值对应的邻居节点,将记录的模块度值更新为该邻居节点对应的模块度值。

在每个邻居节点对应的模块度增加值中的最大模块度增加值超过预设阈值时,从第二社区集合中再随机选择一个节点作为第二节点后,重复执行上述步骤305和306的操作。

在该每个邻居节点对应的模块度增加值中的最大模块度增加值未超过预设阈值时,增加第二社区识别次数,在第二社区识别次数未达到第二预设次数阈值时,将识别的每个社区确定为第二社区集合中的一个节点,重复执行上述步骤301至306的操作,第二社区识别次数的初值为0。在第二社区识别次数达到第二预设次数阈值时,将此时的第二社区集合作为第三社区集合。

第二预设次数阈值可以为1、2或3等数值。

例如,假设将第二社区集合中的社区聚类为社区4、5、8和10。假设,社区4包括节点1、2、3、4、7、9,社区5包括节点5、11,社区8包括节点6、12,社区10包括节点10、13、14、15。将社区4、5、8和10中的每个社区作为一个节点,得到四个节点,分别为新的节点4、5、8和10。

对于该四个社区中的任一两个社区,如果该两个社区中的节点之间存在边相连,则该两个社区对应的两个节点也存在边相连。例如,对于社区4和社区5,由于社区4中的节点7和社区5中的节点5之间存在边相连,所以社区4对应的新节点4和社区5对应的新节点5之间存在边相连。同理,社区4对应的新节点4与社区8对应的新节点8之间存在边相连,社区4对应的新节点4与社区10对应的新节点10之间存在边相连,社区5对应的新节点5与社区8对应的新节点8之间存在边相连,社区5对应的新节点5与社区10对应的新节点10之间存在边相连,社区8对应的新节点8与社区10对应的新节点10之间存在边相连,从而得到如图4所示的新的第二社区集合,然后对图4所示的第二社区集合执行上述步骤305至306的操作。

在本申请实施例中,对于第一社区集合中的任一节点即第一节点,获取第一节点的任意两个邻居节点的模块度增加值,根据该两个邻居节点的模块度增加值将第一节点移动到该两个邻居节点中的一个邻居节点所在的社区,由于在第一节点和该两个邻居节点之间进行社区的聚类,所以参与运算的节点数目较少,从而能够快速地将第一社区集合中的大量节点聚类到社区中,得到第二社区集合。然后在大量节点已聚类到社区的第二社区集合中,对于第二社区集合中的每个节点即第二节点,获取第二节点的每个邻居节点的模块度增加值,将第二节点移动到最大模块度增加值对应的邻居节点所在的社区中,由于在大量节点已聚类到社区的第二社区集合中,基于第二节点和每个邻居节点之间进行社区的进一步聚类,从而能够使第二社区集合快速地收敛,不仅提高了识别社区的精度,还减少识别社区的耗时。

下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。

参见图5,本申请提供了一种社区聚合的装置500,所述装置500包括:

获取模块501,用于获取第一社区集合,所述第一社区集合包括多个社区,每个社区包括图中的一个节点,所述图是包括多个节点的无向图;

第一移动模块502,用于获取第一节点的任意两个邻居节点的模块度增加值,所述第一节点是所述图中的任一个节点;在所述第一社区集合中根据所述两个邻居节点的模块度增加值将所述第一节点从第一社区移动到所述两个邻居节点中的一个邻居节点所在的社区,得到第二社区集合,所述第一社区是所述第一节点所在的社区;

第二移动模块503,用于获取第二节点的每个邻居节点的模块度增加值,所述第二节点是所述图中的任一个节点;在所述每个邻居节点对应的模块度增加值中的最大模块度增加值超过预设阈值时,在所述第二社区集合中将所述第二节点从第二社区移动到最大模块度增加值对应的邻居节点所在的社区中,得到第三社区集合,所述第二社区是所述第二节点所在的社区。

作为一种示例,所述第一移动模块502包括:

第一移动单元,用于将第一节点从第一社区移动到第一邻居节点所在的社区并获取当前所有社区的第一模块度增加值,所述第一模块度增加值为所述第一邻居节点的模块度增加值,所述第一邻居节点是所述第一节点的任一个邻居节点;

第二移动单元,用于将所述第一节点从第一邻居节点所在的社区移动到第二邻居节点所在的社区并获取当前所有社区的第二模块度增加值,所述第二模块度增加值为所述第二邻居节点的模块度增加值,所述第二邻居节点是所述第一节点的另一个邻居节点;

作为一种示例,所述第一移动模块502还包括:

选择单元,用于从所述第一模块度增加值和所述第二模块度增加值中选择最大模块度增加值;

第三移动单元,用于在所述最大模块度增加值大于0时,将所述第一节点从所述第二邻居节点所在的社区移动到所述最大模块度增加值对应的邻居节点所在的社区中。

作为一种示例,所述装置500还包括:

选择模块,用于在获取所述图中的每个节点的两个邻居节点的模块块增加值后,增加第一社区识别次数,在所述第一社区识别次数未达到第一预设次数阈值时,从所述图中的其他节点中选择一个节点作为第一节点,执行所述获取第一节点的任意两个邻居节点的模块度增加值的操作;在所述第一社区识别次数达到第一预设次数阈值时,在将所述第一节点移动到所述两个邻居节点中的一个邻居节点所在的社区后执行所述获取第二节点的每个邻居节点的模块度增加值。

作为一种示例,所述第二移动模块503,用于将第二节点移动到所述第二节点的一个邻居节点所在的社区并获取当前所有社区的模块度增加值,将所述模块度增加值确定为所述一个邻居节点的模块度增加值。

作为一种示例,所述确定模块501,还用于:

在所述每个邻居节点对应的模块度增加值中的最大值未超过预设阈值时,增加第二社区识别次数,在所述第二社区识别次数未达到第二预设次数阈值时,将识别的每个社区确定为所述图中的一个节点,执行所述将图中的每个节点确定为一个社区的操作。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图6示出了本发明一个示例性实施例提供的终端600的结构框图。该终端600可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端600还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。

通常,终端600包括有:处理器601和存储器602。

处理器601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器601可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器602中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器601所执行以实现本申请中方法实施例提供的社区识别的方法。

在一些实施例中,终端600还可选包括有:外围设备接口603和至少一个外围设备。处理器601、存储器602和外围设备接口603之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口603相连。具体地,外围设备包括:射频电路604、触摸显示屏605、摄像头606、音频电路607、定位组件608和电源609中的至少一种。

外围设备接口603可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器601和存储器602。在一些实施例中,处理器601、存储器602和外围设备接口603被集成在同一芯片或电路板上;在一些其他实施例中,处理器601、存储器602和外围设备接口603中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。

射频电路604用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路604通过电磁信号与通信网络以及其他通信设备进行通信。射频电路604将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路604包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路604可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路604还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。

显示屏605用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏605是触摸显示屏时,显示屏605还具有采集在显示屏605的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器601进行处理。此时,显示屏605还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏605可以为一个,设置终端600的前面板;在另一些实施例中,显示屏605可以为至少两个,分别设置在终端600的不同表面或呈折叠设计;在再一些实施例中,显示屏605可以是柔性显示屏,设置在终端600的弯曲表面上或折叠面上。甚至,显示屏605还可以设置成非矩形的不规则图形,也即异形屏。显示屏605可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。

摄像头组件606用于采集图像或视频。可选地,摄像头组件606包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件606还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。

音频电路607可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器601进行处理,或者输入至射频电路604以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端600的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器601或射频电路604的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路607还可以包括耳机插孔。

定位组件608用于定位终端600的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件608可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。

电源609用于为终端600中的各个组件进行供电。电源609可以是交流电、直流电、一次性电池或可充电电池。当电源609包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。

在一些实施例中,终端600还包括有一个或多个传感器610。该一个或多个传感器610包括但不限于:加速度传感器611、陀螺仪传感器612、压力传感器613、指纹传感器614、光学传感器615以及接近传感器616。

加速度传感器611可以检测以终端600建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器611可以用于检测重力加速度在三个坐标轴上的分量。处理器601可以根据加速度传感器611采集的重力加速度信号,控制触摸显示屏605以横向视图或纵向视图进行用户界面的显示。加速度传感器611还可以用于游戏或者用户的运动数据的采集。

陀螺仪传感器612可以检测终端600的机体方向及转动角度,陀螺仪传感器612可以与加速度传感器611协同采集用户对终端600的3D动作。处理器601根据陀螺仪传感器612采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。

压力传感器613可以设置在终端600的侧边框和/或触摸显示屏605的下层。当压力传感器613设置在终端600的侧边框时,可以检测用户对终端600的握持信号,由处理器601根据压力传感器613采集的握持信号进行左右手识别或快捷操作。当压力传感器613设置在触摸显示屏605的下层时,由处理器601根据用户对触摸显示屏605的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。

指纹传感器614用于采集用户的指纹,由处理器601根据指纹传感器614采集到的指纹识别用户的身份,或者,由指纹传感器614根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器601授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器614可以被设置终端600的正面、背面或侧面。当终端600上设置有物理按键或厂商Logo时,指纹传感器614可以与物理按键或厂商Logo集成在一起。

光学传感器615用于采集环境光强度。在一个实施例中,处理器601可以根据光学传感器615采集的环境光强度,控制触摸显示屏605的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏605的显示亮度;当环境光强度较低时,调低触摸显示屏605的显示亮度。在另一个实施例中,处理器601还可以根据光学传感器615采集的环境光强度,动态调整摄像头组件606的拍摄参数。

接近传感器616,也称距离传感器,通常设置在终端600的前面板。接近传感器616用于采集用户与终端600的正面之间的距离。在一个实施例中,当接近传感器616检测到用户与终端600的正面之间的距离逐渐变小时,由处理器601控制触摸显示屏605从亮屏状态切换为息屏状态;当接近传感器616检测到用户与终端600的正面之间的距离逐渐变大时,由处理器601控制触摸显示屏605从息屏状态切换为亮屏状态。

本领域技术人员可以理解,图6中示出的结构并不构成对终端600的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

相关技术
  • 一种社区聚合的方法及装置
  • 一种在线学习社区中的用户聚合方法和装置
技术分类

06120113007048