1 引言
社团检测(Community Detection,又译作社区发现)是一种在网络中找出关系密切的结点的集合(社团)的技术。随着当今互联网尤其是社交网络的发展,这一研究领域也越来越被人们所重视。目前已经有多种用于进行社团检测的方法,而随着大数据时代网络规模的急剧增大,社团检测领域的发展也迎来了新的挑战和机遇。
2 社团和社团检测
2.1 网络中的社团
什么是社团?很多人听到这个词的第一反应估计会是我们平时在学校或社会上见到的各种团体组织。那么,这个词又是怎么跟网络扯上关系的呢?要想理解这个问题,不如先暂时放一下“社团”这个词,来看看这里所说的“网络”是什么。
网络指的不仅仅是我们平时在用的互联网,而是指一个表示关系的集合。我们无论是在校园之中,还是在日常生活里,都会不可避免地遇到各种各样的人。我们会去和其他人成为朋友或合作者,而在此基础上,这些“其他人”又会再去和别人去进行交际。这些人与人之间的关系构成了我们所说的“社交圈”、“关系网”,而关系网恰恰算得上是最典型的一种网络了。
另一种网络则是我们常见的地图。我们要从一个地点前往另一个地点,就需要经过一些道路。但是并不是所有的地点之间都能够互相联通的;即使是通过飞机,也不是每个地方都有机场的。于是,我们可以以这些地点为顶点,地点之间的路径为边,构造一个地图网络。这样一来,当我们决定前往某个地点之时,就可以按照这个网络的指引来进行决策了。
再比如说我们在高中时学习过的蛋白质,大家都知道它们是生命的重要组成部分。不过,很多生命活动并不能只依靠单一的一种蛋白质,而是需要多种蛋白质来协作完成的。而且,蛋白质的效果还有可能会受到其他蛋白质的直接或间接的影响。那么,要如何表示蛋白质的这种相互作用关系呢?答案自然还是网络。通过蛋白质相互作用网络,我们就可以一目了然地看出蛋白质之间的关联。
图1 一个蛋白质网络的图表示[1]
上图来自STRING数据库。STRING数据库是STRING数据库是一个搜索已知蛋白质之间和预测蛋白质之间相互作用的数据库,该数据库可应用于2031个物种,包含960万种蛋白和1380万中蛋白质之间的相互作用。[2]
再以我们最熟悉的网络——互联网为例,我们所上的每一个网站里,都会有链接向其他网页的链接。这种相互链接的关系也构成了一张网络。只不过因为互联网上的网站数目众多,而链接关系又十分复杂,所以其规模自然是极为庞大的。
上面已经说明了,网络可以用一个图来表示,其中顶点与顶点之间的连线即代表了它们之间的关系。那么,在这样的一个关系网中,社团又指的是什么呢?首先先下一个定义:社团(Community,又译作社区)反映的是网络中的个体行为的局部性特征以及其相互之间的关联关系。[3]可能比较抽象?我们来举个例子:
我们交了朋友或者与人进行合作后,肯定得要保持联系。那么要用什么方法来保持这种联系呢?没错,大家很可能马上就会想到,可以用QQ啊!什么?你说合作者或朋友不只一个?那也好办,建Q群呗!于是,一些有着共同兴趣爱好或是目的的人就被聚集在了一起,然后这批人就可以愉快地水群,哦不,交流共同话题了。
说到这里,大家可能已经明白了:这里的Q群就相当于一个社团,是社交网络中一部分人(顶点)的集合。在这样的一个社团里,其中的成员(群员)就可以进行更加密切的交流,或是会互加一波好友,因为他们有着共同的目标或话题。这样一来,我们就可以说这个Q群之中的人的相互关系更加紧密了。而实际上,在一个网络中的社团里,用来定义一个顶点是否在某个社团之中的方法,其实就是看它与该社团中的其他顶点的关联是否密切。或者说,正是这一簇互相关联紧密的顶点,才构造出了网络中的一个社团。