1 引言

社团检测(Community Detection,又译作社区发现)是一种在网络中找出关系密切的结点的集合(社团)的技术。随着当今互联网尤其是社交网络的发展,这一研究领域也越来越被人们所重视。目前已经有多种用于进行社团检测的方法,而随着大数据时代网络规模的急剧增大,社团检测领域的发展也迎来了新的挑战和机遇。

 

2 社团和社团检测

2.1 网络中的社团

       什么是社团?很多人听到这个词的第一反应估计会是我们平时在学校或社会上见到的各种团体组织。那么,这个词又是怎么跟网络扯上关系的呢?要想理解这个问题,不如先暂时放一下“社团”这个词,来看看这里所说的“网络”是什么。

       网络指的不仅仅是我们平时在用的互联网,而是指一个表示关系的集合。我们无论是在校园之中,还是在日常生活里,都会不可避免地遇到各种各样的人。我们会去和其他人成为朋友或合作者,而在此基础上,这些“其他人”又会再去和别人去进行交际。这些人与人之间的关系构成了我们所说的“社交圈”、“关系网”,而关系网恰恰算得上是最典型的一种网络了。

       另一种网络则是我们常见的地图。我们要从一个地点前往另一个地点,就需要经过一些道路。但是并不是所有的地点之间都能够互相联通的;即使是通过飞机,也不是每个地方都有机场的。于是,我们可以以这些地点为顶点,地点之间的路径为边,构造一个地图网络。这样一来,当我们决定前往某个地点之时,就可以按照这个网络的指引来进行决策了。

       再比如说我们在高中时学习过的蛋白质,大家都知道它们是生命的重要组成部分。不过,很多生命活动并不能只依靠单一的一种蛋白质,而是需要多种蛋白质来协作完成的。而且,蛋白质的效果还有可能会受到其他蛋白质的直接或间接的影响。那么,要如何表示蛋白质的这种相互作用关系呢?答案自然还是网络。通过蛋白质相互作用网络,我们就可以一目了然地看出蛋白质之间的关联。

 

科普论文:漫谈社团检测

图1 一个蛋白质网络的图表示[1]

上图来自STRING数据库。STRING数据库是STRING数据库是一个搜索已知蛋白质之间和预测蛋白质之间相互作用的数据库,该数据库可应用于2031个物种,包含960万种蛋白和1380万中蛋白质之间的相互作用。[2]

 

       再以我们最熟悉的网络——互联网为例,我们所上的每一个网站里,都会有链接向其他网页的链接。这种相互链接的关系也构成了一张网络。只不过因为互联网上的网站数目众多,而链接关系又十分复杂,所以其规模自然是极为庞大的。

       上面已经说明了,网络可以用一个图来表示,其中顶点与顶点之间的连线即代表了它们之间的关系。那么,在这样的一个关系网中,社团又指的是什么呢?首先先下一个定义:社团(Community,又译作社区)反映的是网络中的个体行为的局部性特征以及其相互之间的关联关系。[3]可能比较抽象?我们来举个例子:

       我们交了朋友或者与人进行合作后,肯定得要保持联系。那么要用什么方法来保持这种联系呢?没错,大家很可能马上就会想到,可以用QQ啊!什么?你说合作者或朋友不只一个?那也好办,建Q群呗!于是,一些有着共同兴趣爱好或是目的的人就被聚集在了一起,然后这批人就可以愉快地水群,哦不,交流共同话题了。

       说到这里,大家可能已经明白了:这里的Q群就相当于一个社团,是社交网络中一部分人(顶点)的集合。在这样的一个社团里,其中的成员(群员)就可以进行更加密切的交流,或是会互加一波好友,因为他们有着共同的目标或话题。这样一来,我们就可以说这个Q群之中的人的相互关系更加紧密了。而实际上,在一个网络中的社团里,用来定义一个顶点是否在某个社团之中的方法,其实就是看它与该社团中的其他顶点的关联是否密切。或者说,正是这一簇互相关联紧密的顶点,才构造出了网络中的一个社团。

 

科普论文:漫谈社团检测

图2 网络中社团的简易表示。圆点代表网络中的顶点,黑色直线代表相互关系,而被红色曲线圈起来的区域则构成了一个社团

 

2.2 社团检测是个啥

       说完了社团,我们重新来看回本文的主角社团检测。顾名思义,社团检测就是要在一个网络中找到这些社团,即一批关联紧密的顶点。那么要怎么找呢?其实主要的问题就出现在这个“关联紧密”上,要怎样才能说得上是紧密呢?这里我们先从上面的图2下手,总结一些直观规律出来:

       观察图2,可以发现该社团中的每个顶点都与处于社团内的至少4个其他顶点相连;而相比之下,处于该社团外部的顶点就没有这么多与社团中顶点相连的边。注意到该图中有一些点是与社团中的顶点相连的,但却没有被划分到社团之中。事实上,社团的性质中就有这么一条:社团之中的成员顶点的相互关系比社团成员与非社团成员之间的关系要更加密切。还是拿Q群来比喻的话(以后这个比喻还会出现多次),那就是指在同一个群里的志同道合的人更有可能跟你加好友,而群外的人虽然也会有好友关系,却没有那么多。

       那么,直观印象已经有了。社团检测的目的,就在于通过这些局部的密切关系,来判断网络中的顶点是否属于同一个社团中,以及有多少个这样的“密集区域”。显然,社团检测的重点在于判断“是否密切”,而对于不同领域和不同的检测算法,这一判别指标也会不尽相同。我们会在后面来了解其中的一些。

 

2.3 社团检测有啥用

有人可能会问,找到这些社团有什么用呢?我们在QQ里加入Q群的时候,不是已经知道自己处于什么社团之中了吗?其实不然,这可以用“不识庐山真面目,只缘身在此山中”来概括了,因为你只知道你自己处于什么社团之中,却不知道他人的情况;而事实上,其他人可能离你的“距离”比你想象中的要近很多。什么意思呢?再度用Q群来形容的话,可以说得上是“与你同在一个群却没有和你加好友”的人吧。你们有着共同的爱好或目标,可以说是很容易就成为朋友了,但你们却又彼此不认识,怎么办?诶,这就是QQ对社团检测这一技术的现成运用了:好友推荐。

       想必很多人都有着这种经历:打开QQ,猛然发现好友列表那里出现了一个红圈①,而正当我们嘀咕着是谁来加好友,打开“新朋友”列表一看,却发现是一个“好友推荐”的信息。上面写着“XXX,跟你有Y名共同好友”。这句话虽然看起来简单,但其实已经是大有文章了。还记得我们上面说的社团的定义是什么吗?没错,网络图中一批相互关系密切的顶点。那么,共同好友多,显然算是评判关系密切的一种重要指标吧。这个看似不起眼的好友推荐系统,其实已经蕴含着社团检测的核心思想了。

 

科普论文:漫谈社团检测

图3 一张交友关系图,圆点代表人,连线代表朋友关系。张三和李四虽然并不是直接的朋友关系,他们却有着4位共同的朋友。因此,根据社团检测思想,可以认为张三、李四有较大的概率也成为朋友,并和其他朋友构成一个社团

 

       从上面的例子不难看出,社团检测的一个重要的应用就是这种社交网络中的推荐系统。通过检测与你关系密切的人的情况,来找出你可能会感兴趣的人或群组。在实际的运用中,判别信息可绝不仅仅是“有多少名共同好友”那么简单了,社交网络还会通过各种其他信息来帮助用户们“搭桥牵线”。比如,通过分析用户的住址,来寻找住在同一小区内的人,构成一个“某某小区社团”,这样就可以方便人们认识自己的邻居;又或者,视频网站可以根据用户看的视频类型,找到跟他们有着同样喜好的用户,毕竟有了共同话题,交流起来也更容易不是吗?

       除了“找朋友”外,社团检测还可以“抓坏人”。有句话叫“物以类聚,人以群分”,如果警察发现某个人与一些已知的坏人关系密切,那么他即使没有参与违法行动,也有很多概率知道这些坏人们的一些信息。这样一来,抓捕犯人就有了线索;此外,医疗机构也可以通过调查已经感染某种传染病的人与其他人的关系,找出有可能受到传染病影响的潜在患者,以便尽早让他们脱离危险。显然,与多名传染病患者关系密切的人最有可能成为此类。可以看到,社团检测对于社会关系这张巨大的网络有着很大的作用,如果能够实施好这项技术,就可以防患于未然,解决很多潜在的问题。

       那么,在社交网络以外的网络,社团检测又有什么用呢?以我们刚才所说的蛋白质相互关系网络为例,我们可以将参加同一类生命活动的蛋白质定义为一个社团,以此来分析某些特定蛋白质的作用(看它们出现在哪些社团之中),甚至是以此为基础来预测新型蛋白质的作用;而在互联网上,社团检测的应用领域也非常广泛。例如搜索引擎,可以对用户搜索的关键词进行社团检测,找出其中的“热门领域”,进而增加这方面信息的检索。可以说,社团检测技术提供了一把钥匙,让我们在面对各种实际问题之时可以打开一条“便捷通道”。

 

3 社团检测面临的问题

上面已经分析了社团检测的基本思想以及其运用。有的人就会问:不就是找一批密集的点吗,不是一眼就能看出来吗?然而实际上,大部分网络的复杂程度都是难以用上面的那种无向图来表示的;即使可以强行画一幅,那也会是“整张图上密密麻麻都是线”。所以可视化手段在这里并不适用,要想进行有效的社团检测,就需要让计算机学会去自行进行。

用计算机从一个大规模网络中寻找社团,这在本质上就是一种数据挖掘了。数据挖掘(Data mining)相信很多人都有听过,就是在大量的数据中搜索隐藏的信息的过程。在网络中通过社团检测来挖掘可能的关系自然也属于此列。在这一过程中,面临的主要问题如下:

 

3.1 网络规模的膨胀

       随着现在大数据时代下的数据量越来越大,网络的规模也在不断膨胀。随着网络尺度的增大,网络的维数也开始急剧膨胀。所谓维数,就是指一个顶点所具有的属性。例如,如果要搞一个社交网络,可以采用的属性有用户的兴趣爱好、地点和职业等。而现在,这样的属性页变得越来越多。而让问题更为棘手的是,以往的社团检测算法大多只会参照一个单一标准,例如只针对兴趣爱好或只针对地点。随着网络模型的日渐复杂,以多个属性为标准来进行社团检测的意义也越来越大。

       除了规模增大本身带来的影响以外,还有一个影响在于网络的变化速度也越来越快。还是以社交网络为例,每一天都会有大量新用户注册,并且会有新的好友关系、群组等。网络的数据量增大以及频繁变化,都迫使社团检测算法必须要快速做出应对,即要求其有着更快的计算速度。

 

3.2 网络结点角色的差异性

       在传统的网络模型中,一般会认为每个结点拥有同等的地位。但实际的研究表明,网络中的结点也符合“二八规则”,即只有20%的结点能够在其中起到引领的作用。与其他的结点相比,它们更具有权威性、中枢性、核心型等特征。同时也具有更多的经验和影响力,对社团的形成起着决定性的作用,对网络拓扑结构的演化、网络中的信息流通和传播有重大影响。[3]在社交网络中,这样的结点就相当于每个群组里面的核心人物,例如群主、管理员之类;而在上面所提到的通过社交网络寻找犯人线索的例子中,这样的“核心人物”就很有可能是犯罪团伙的头子了。显然,如果能够有效地找出这样的领袖级别人物,对于整个社团检测来说都是非常有利的。

 

3.3 重叠社团

       终于来到了这个重头戏,这也是目前社团检测领域里的一大重点。什么是重叠社团呢?和之前一样,我们用Q群来作为例子。其实道理很简单:人们用QQ时会只加入一个Q群吗?想必绝大部分人的答案肯定是不会,而是有着多于一个Q群。那么,就可以说你同时属于两个Q群所对应的社团中。这样的情况显然并不少见:一个人可以同时有多个兴趣爱好,并加入不同的兴趣群体之中;而同一种蛋白质也有可能会对多种生命活动产生影响。这样一来,不同的社团就会在这个特定的顶点这里“重叠”了。

 

科普论文:漫谈社团检测

图4 重叠现象的简易Venn图表示,红圈代表同属于两个社团的结点,黑圈代表社团

 

       事实上,重叠社团可不仅仅是一个点重叠这么简单。在实际情况下,往往有多个这样的结点,也就是网络中的一部分子图会处在这个重叠区域之中。根据重叠部分的顶点数量以及与其他顶点的联系,我们可以判断其重叠的稠密程度,并用图像来表示这些社团之间的重叠情况。

 

科普论文:漫谈社团检测

图5 社团重叠的程度[4]

 

       显然,这些重叠的部分会增大社团检测的难度。一些传统的社团检测方法只能将顶点归类到一个社团当中,对重叠社团则无能为力;另外的一些算法虽然做出了改进以适应重叠社团检测,奈何它们在大规模的网络下表现不佳。

       有人可能会问:费那么大力气来找这些重叠社团有什么意义呢?继续有请标准例子Q群。如果你加入了多个Q群,而另一名同志加入的Q群跟你有很多的重复。这意味着什么呢?自然就是你们的共同兴趣爱好、共同目标会更多。而这样志同道合的人们,不是更容易会成为朋友或互相协助吗?通过这个例子,我们可以看出重叠社团检测的一个主要作用:判断重叠部分的结点之间是否有网络相连。对于社交网络而言,这样的连线就意味着更大的潜在交友机会,有助于这些社交平台进一步改进好友推荐系统;对于蛋白质相互关系网络而言,检测一些蛋白质是否都处于不同生命活动所产生的社团中,有助于判断它们之间是否存在相互关系;而对于地图网络而言,重叠社团检测可以判定两个地点之间的潜在联系,进而对其交通发展做出更好的规划。要想更好地发展社团检测技术,重叠社团检测显然会是必须要跨越的一座大山。

 

4 一些社团检测方法

上面已经说明了社团检测的定义、难点以及应用价值,接下来会介绍一些比较知名的社团检测方法。

 

4.1 Infomap

       Infomap是一种基于信息量的社团检测方法。你问我什么是信息量?简单来说,就是一件事情能够提供的信息的多少。这个要怎么衡量呢?还是来看一个直观例子:如果抛一枚质量均匀的硬币,那么出现正反面的概率各占50%,这意味着“知道抛这枚硬币的结果是正面”给我们所带来的信息与“知道抛这枚硬币的结果是反面”所带来的信息价值相等;现在我们对这枚硬币做些手脚,让它有着更大的可能性出现正面。这样一来,“知道抛这枚硬币的结果是正面”给我们所带来的信息就会增加吗?不,刚好相反,你已经知道了这枚硬币有更大的可能性出现正面,那知道单次为正所获得的信息不就变少了吗?相对应的,在这种正面占主导的情况下,如果出现一次反面,那么它所带来的信息就会增加,因为这是人们“难以预料到的”。通过上面这个例子,我们可以先给信息量一个粗略的结论:一个事件能够给出的信息多少有其发生概率决定,发生的概率越小获得的信息就越多。

       知道了这个之后,我们接下来回到Infomap上。它使用随机游走作为网络上信息传播的代理,网络上的随机游走会产生相应的数据流。随机游走产生的信息量使用平均一步随机游走产生的码字长度衡量,即平均码字长度。[5]随机游走顾名思义,就是每一次随机到一个与当前结点相连的结点上,如此反复。那么信息量在这里有什么用呢?回想一下,社团中的结点是不是更容易互相连接?那么这样一来,它们在随机过程中被选中的概率自然就会增大。如此一来,我们就可以用信息量来作为判定社团的依据。该算法思路较为创新,效果也比较好,而且该算法的改进型也可用于重叠社团检测。

 

4.2 Clique算法

       除了信息量以外,还有很多别的方式来区分网络中的社团,其中一种方法就是网格。简单来说,就是用大小、形状相同的格子来划分整个网络,然后看哪些格子里面的结点数量更多。显然,结点数量越多的网格,其存在社团的可能性也就越高。对应一个网格,Clique算法会首先判断其是不是密集网格,如果是密集网格。那么对其相邻的网格进行遍历,看是否是密集网格,如果是的话,那么属于同一个簇。该方法可以划分出重叠的社团,但对于高维数据,基于网格的聚类倾向于效果很差。[6]

 

科普论文:漫谈社团检测

图6 基于网格的聚类方式之图像表示[7]

 

4.3 AGM

       Affiliation Graph Model,简称AGM,是一种用来表示社团与网络中结点之间关系的图。什么叫社团与结点的关系呢?留意我们之前所讲的网络相关内容,一般都是各个用户(顶点)之间的相互连接。那么,我们现在换一种思路:有这么一个网络,对于同一条边,一端连接的是用户,而另一端则是其所在的社团。这就是AGM的基本思想,通过将网络重建为关系图模型来解决对特定结点的社团检测问题。该方法的特性注定了它在解决重叠社团检测问题方面有着独有的优势,因为可以在关系图中把一个结点与多个社团相连。

 

科普论文:漫谈社团检测

图7 社团关系图的图像表示[4]

 

       要构建这样的网络,首先需要取得原网络中的结点信息,接下来就要构建从这些顶点连接到社团的边。构建边的过程可以描述为一个概率运算,即计算结点属于某个社团的概率。在网络模型构建完成后,就可以对某个特定的结点来进行社团检测。AGM算法虽然对重叠社团检测很有效,但是在计算概率这块的运行速度仍然较慢。

 

4.4 BIGCLAM

       Cluster Affiliation Model for Big Networks,简称BIGCLAM,可以说是AGM的升级版本了。与AGM相比,BIGCLAM主要改进了两个地方:第一是给关系网络模型中的边加上了权重。还记得之前提到的社团检测中的某个问题吗?是的,网络中结点的差异性,即某些核心结点可能可以更好地反应社团的信息。那么要如何反应这些特殊结点的重要性呢?在机器学习里常用的方法就是给它们增加权重,即量化这一结点的重要性。加上了权重后,在进行社团检测时就可以更多地参考这些结点;第二则是改进了计算概率时的方法,通过放宽检测条件来获得更快的运行速度,但实际性能仍然很好。机器学习当中涉及的计算过程会比较繁琐,而BIGCLAM也是如此,这里也不具体进行描述了。

在实际的测试中,BIGCLAM有着比其他算法高出1000倍的运行速度,而在社团检测的过程中可以保证80%以上的点与真实情况对应。研究人员也使用这种网络来对各种现有的大规模网络结构,例如Amazon、YouTube等进行检测,表现效果仍然十分出色。因此,BIGCLAM被认为是目前比较有效的一种对于大规模网络的社团检测方法。[4]

 

科普论文:漫谈社团检测

图8 BIGCLAM与其他社团检测方法的运行速度比较,可以看出BIGCALM随着网络规模扩大,其运行时间的增加幅度远小于其他算法[4]

 

科普论文:漫谈社团检测

图9 BIGCLAM对现有的大型网络进行检测的结果[4]

 

5 总结

在当今的网络迅速发展之际,从其中找出结点所在的社团变成了一项尤为重要的工作。因此,计算机科学家们对这一研究领域也开始逐渐重视了起来,社团检测也将会在可预见的未来中变得更加普及。而事实上,这一技术也早已渗透到了我们生活中的方方面面,无论是我们平时在用的社交网站、地图还是生物医药方面,社团检测都可以大显身手。不过,随着网络的膨胀和多元化,社团检测也变得更为困难。因此,社团检测领域也需要很快地进行更新迭代,不断改进现有的方法以及推出新方法,这样才能达到与时俱进的目的。

 

参考文献

[1] STRING数据库. [DB/OL]. https://string-db.org/cgi/input.pl. 引用日期:2018-07-08

[2] 测序百乐门. 蛋白互作网络(PPI)分析——STRING数据库. 搜狐网.

https://www.sohu.com/a/193820768_99902741. 引用日期:2018-07-08

[3] 百度百科. 社区发现算法. 百度. https://baike.baidu.com/item/社区发现算法/19460396. 引用日期:2018-07-08

[4] J. Yang and J. Leskovec. Overlapping Community Detection at Scale:

A Nonnegative Matrix Factorization Approach. ACM, 2013.

[5] 百度百科. 基于信息论的社团发现算法. 百度.

https://baike.baidu.com/item/%E5%9F%BA%E4%BA%8E%E4%BF%A1%E6%81%AF%E8%AE%BA%E7%9A%84%E7%A4%BE%E5%9B%A2%E5%8F%91%E7%8E%B0%E7%AE%97%E6%B3%95/22130357. 引用日期:2018-07-09

[6] CLIQUE:一种类似于Apriori的子空间聚类算法. CSDN.

https://blog.csdn.net/WOJIAOSUSU/article/details/58251769. 引用日期:2018-07-09

[7] HK Zhang. CLIQUE 聚类算法以及Java实现+多线程. CSDN.

https://www.cnblogs.com/1zhk/p/4676671.html. 引用日期:2018-07-09

相关文章:

  • 2021-08-18
  • 2021-10-30
  • 2022-03-05
  • 2021-08-30
  • 2021-06-21
  • 2022-12-23
  • 2021-10-22
  • 2021-11-22
猜你喜欢
  • 2021-05-21
  • 2021-09-09
  • 2021-07-26
  • 2021-08-24
  • 2022-12-23
  • 2021-12-02
相关资源
相似解决方案