大规模网络中社团的快速展开
Fast unfolding of communities in large networks
Blondel VD, Guillaume J-L, Lambiotte R, Lefebvre E · Journal of Statistical Mechanics 2008 · DOI: 10.1088/1742-5468/2008/10/P10008
一句话看懂
先让每个节点单独成为一个社团,让每个节点尝试搬到邻居所在的社团、只要模块度增加就搬;搬不动了,就把每个社团缩成一个“超级节点”,在新网络上重复。这个简单的两阶段循环就是今天最常用的社团发现算法之一,Louvain 算法。
研究背景与问题
模块度最大化是社团发现的主流思路,但精确求解是计算上困难的问题,只能用近似算法。到 2008 年,最快的方法是 Clauset、Newman 与 Moore(CNM)的贪心合并算法,但它得到的模块度往往明显低于模拟退火,还倾向于产生吞并大部分节点的“超级社团”,难以处理百万节点以上的网络。文献中处理过的最大网络约 550 万节点。
与此同时,手机通话记录、网页链接等数据已经达到数千万乃至上亿节点。作者要解决的是:能否设计一个既快、模块度又高,并能给出层次结构的算法?
核心思想与方法
算法对加权网络定义,无权网络可视为权重全为 1。
第一阶段:局部移动。 初始时每个节点自成一个社团。依次考察每个节点 :计算把 从当前社团移出、放入某个邻居 所在社团时模块度的变化,选增益最大的社团,若增益为正就移动,否则留在原处。反复扫描所有节点,直到没有任何单个移动能提高模块度。
第二阶段:聚合。 把第一阶段得到的每个社团缩成一个新节点;两个新节点之间的边权为原社团之间所有边权之和,社团内部的边变成新节点的自环。
一次“局部移动 + 聚合”称为一轮(pass)。在新网络上重复,直到模块度不再增加。
移动增益:把孤立节点 放入社团 的模块度变化
其中 是 内部边权之和, 是与 中节点相连的边权之和, 是节点 的强度, 是 连向 的边权之和, 是全网边权之和。
速度来自两点: 只需要局部量,计算极快;社团数在前几轮急剧减少,大部分时间花在第一轮。每一轮的结果构成层次结构中的一层,算法天然给出“社团的社团”。
主要发现
- 速度与质量(表 1):在 34 节点到 1.18 亿节点的一系列网络上与 CNM、Pons–Latapy、Wakita–Tsurumi 三种方法比较,本文方法在每个网络上的模块度都不低于其他方法,速度也最快。例如在 32.5 万节点的 nd.edu 网页网络上,模块度 0.935,用时 3 秒;CNM 为 0.927,用时 5034 秒。
- 超大网络:在 3900 万节点、7.83 亿条边的 .uk 网页网络上用时 12 分钟;在 1.18 亿节点、约 10 亿条边的 WebBase 网页网络上用时 152 分钟。作者指出,限制规模的是内存而不是计算时间。
- 轮数很少:空手道俱乐部只需 3 轮(34 个节点先分成 6 个社团,再并成 4 个,第三轮没有变化),文中所有例子都少于 5 轮。
- 比利时手机网络(260 万用户,边权为 6 个月内的通话次数):得到 6 层层次结构;顶层有 261 个超过 100 人的社团,约覆盖 75% 的用户。在 36 个超过 1 万人的社团中,除一个位于法语区与荷兰语区交界处的社团外,其余社团中都有超过 85% 的成员说同一种语言。
- 人工基准网络:在 128 个节点、4 个社团的标准基准上,准确率与 Pons–Latapy 等算法相当;作者承认 Duch–Arenas 极值优化和模拟退火更准确,但它们计算代价太大,只能用于小得多的网络。
怎样读这篇论文
论文只有 12 页。先看图 1(两阶段示意图),再读第 2 节方法和 公式,自己在纸上对一个 6 个节点的小网络手算一轮。然后看表 1 和第 3 节手机网络的例子(图 3、图 4)。关于分辨率极限的讨论(图 2,30 个团组成的环)值得细读,因为作者的观点后来被证明需要修正。
局限与后续工作
- 分辨率极限并未真正解决:作者认为,由于第一阶段只移动单个节点,小社团不易被错误合并,中间层次的划分也有意义(图 2 中第一轮正确分出了 30 个团,第二轮才两两合并)。但最终输出仍是模块度的局部最大值,分辨率极限依然存在;实践中常用带分辨率参数 的模块度来调整社团大小。
- 节点顺序与随机性:作者指出结果依赖节点的访问顺序,并认为它对最终模块度影响不大,但会影响速度。实践中不同随机种子可能给出不同的划分,应报告多次运行的稳定性。
- 内部不连通的社团:Traag、Waltman 与 van Eck(2019)发现,Louvain 可能产生内部不连通甚至连接很差的社团,并提出了加入“细化”步骤的 Leiden 算法,现在一般推荐优先使用 Leiden。
- 贪心的本质:作为局部优化,算法没有最优性保证,在没有社团结构的随机网络中也会返回相当高的模块度。
关联知识
- Louvain 与 Leiden 算法介绍了本算法的两阶段框架;数学推导与算法推导了上面的 公式;社团发现方法的比较把它列为大网络的默认选择;专题的核心文献也收录了本文。
- 社团结构与社区发现专题的适用范围与常见误用中提到“Louvain 每次运行结果相同”是错误的,这与本文关于节点顺序的讨论直接对应。
- 建议对照阅读 Newman 2006:同样是最大化模块度,一个从全局谱结构出发,一个从局部贪心出发。
延伸思考
- 为什么社团数在前几轮急剧减少,就意味着算法的大部分时间花在第一轮?试用每轮网络规模的变化估计总计算量。
- 手机网络中“交界社团”的语言构成比较均衡。如果把这个思路用到医院患者转诊网络或细胞间相互作用网络上,“交界社团”可能代表什么?
- 在实际分析中,Louvain 每次运行可能给出不同的划分。请设计一个方案来报告社团划分的稳定性,并说明你会用什么指标比较两次划分的相似程度。