Overlapping Community Detection with Graph Neural Networks

论文: Overlapping Community Detection with Graph Neural Networks.
源码: https://github.com/shchur/overlapping-community-detection

文章概述

现有的用于社团检测的神经网络只检测不相交的社区,而真实的社区却是重叠的,针对这一不足,提出了一种基于GNN的重叠社区检测模型NOCD。文章通过GCN模型学习图的隶属关系矩阵(affiliation matrix)F,用最大似然估计使F生成的图和真实图尽量相似,从而获得每个节点所属的社区。

Algorithm/Model

Bernoulli–Poisson model
Bernoulli–Poisson(BP) model是一种允许重叠社区存在的图生成(graph generative)模型,根据隶属关系矩阵 F ∈ R ⩾ 0 N × C F\in\mathbb{R}_{\geqslant0}^{N\times C} FR0N×C,可以生成对应的邻接矩阵,表示为:
A u v ∼ B e r n o u l l i ( 1 − e x p ( − F u F v T ) )   \\A_{uv}\sim Bernoulli(1-exp(-F_uF_v^T))\, AuvBernoulli(1exp(FuFvT))
F u F_u Fu是隶属关系矩阵F中节点u的行向量,直观来说,u和v的共同社区越多(即 F u F v T F_uF_v^T FuFvT的点积越大),它们就越有可能有边相连。

Model definition
Bernoulli–Poisson模型的最大负对数似然估计:
− log ⁡ p ( A ∣ F ) = − ∑ ( u , v ) ∈ E log ⁡ ( 1 − e x p ( − F u F v T ) ) + ∑ ( u , v ) ∉ E F u F v T   \\-\log p\left(\left.A\right|F\right)=-\sum_{(u,v)\in E}\log\left(1-exp(-F_uF_v^T\right))+\sum_{(u,v)\notin E}F_uF_v^T\, logp(AF)=(u,v)Elog(1exp(FuFvT))+(u,v)/EFuFvT
真实世界的图通常是非常稀疏的,这意味着方程中的第二项对损失的贡献要远大于第一项。于是使用了不平衡分类(imbalanced classification)的技术,通过平衡这两项来使损失函数更加合理:
L ( F ) = − E ( u , v ) ∼ P E [ ∑ log ⁡ ( 1 − e x p ( − F u F v T ) ) ] + E ( u , v ) ∼ P N [ F u F v T ]   \\L(F)=-E_{(u,v)\sim P_E}\left[\sum\log\left(1-exp(-F_uF_v^T\right))\right]+E_{(u,v)\sim P_N}\left[F_uF_v^T\right]\, L(F)=E(u,v)PE[log(1exp(FuFvT))]+E(u,v)PN[FuFvT]
其中, P E P_E PE P N P_N PN分别表示edges和non-edges上的均匀分布。
传统方法直接优化隶属关系矩阵F,本文使用GNN,寻找参数 θ ∗ \theta^\ast θ最小化平衡的负对数似然函数:
θ ∗ = arg ⁡ min ⁡ θ L ( G N N θ ( A , X ) )   \\\theta^\ast=\mathop{\arg\min}\limits_{\theta}L(GNN_\theta(A,X))\, θ=θargminL(GNNθ(A,X))
使用2层的图卷积神经网络GCN作为NOCD模型的基础,GCN定义为:
F ≔ G C N θ ( A , X ) = R e L U ( A ^ R e l U ( A ^ X W ( 1 ) ) W ( 2 ) )   \\F\coloneqq GCN_\theta(A,X)=ReLU(\hat{A}RelU(\hat{A}XW^{(1)})W^{(2)})\, F:=GCNθ(A,X)=ReLU(A^RelU(A^XW(1))W(2))
其中 A ^ = D ~ − 1 / 2 A ~ D ~ 1 / 2 \hat{A}=\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{1/2} A^=D~1/2A~D~1/2, A ~ = A + I N \tilde{A}=A+I_N A~=A+IN。模型与标准GCN模型的两个主要区别是(1)第一个图卷积层后的batch normalization和(2)所有权重矩阵的 L 2 L_2 L2正则化。模型有两种,一种是将节点属性X作为输入的NOCD-X,一种是使用邻接矩阵作为输入的NOCD-G。
在这里插入图片描述
Scalability
BP模型可以通过缓存技巧,使复杂度从 O ( N 2 ) O(N^2) O(N2)降低到 O ( N + M ) O(N+M) O(N+M)。通过不使用全部的邻接矩阵A,而是使用S个edges和non-deges的mini-batch,可以进一步加速。

在衡量指标的选取上,文章认为使用Jaccard和F1score可能非信息不完全的社区任意高的分数,而使用重叠归一化互信息(NMI)作为衡量指标更为健壮和有意义。

Experiment Detail

文章引入了4个新的论文引用数据集
在这里插入图片描述为了证明GNN的存在是必要的,还与将GNN替换成多层感知机(MLP)和直接优化F的方法进行了对比,结果说明使用GNN是有意义的
在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NOCD(neural overlapping community detection)是一种用于检测重叠社区结构的神经网络模型。它的创新点在于将图神经网络(GNN)和Bernoulli-Poisson概率模型相结合。 在NOCD模型中,首先需要进行数据预处理和特征提取。然后,通过构建GNN模型来学习节点的表示。GNN模型可以通过多层的图卷积操作来聚合节点的邻居信息,并将这些信息传递给下一层。这样,每个节点都可以得到一个表示向量,用于表示其在社区结构中的角色。 接下来,NOCD模型使用Bernoulli-Poisson概率模型来建模节点之间的连接概率。该模型考虑了节点之间的相似性和社区结构,并通过最大似然估计来学习模型参数。最终,通过优化目标函数,可以得到最佳的社区划分结果。 下面是一个示例代码,演示了如何使用NOCD模型进行重叠社区检测: ```python import nocd # 导入数据集 A = ... # 图的邻接矩阵 # 定义GNN模型 sampler = nocd.sampler.get_edge_sampler(A, batch_size, batch_size, num_workers=2) model = nocd.models.GNNModel(input_dim, hidden_dim, output_dim) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # 训练模型 for epoch in range(num_epochs): for batch in sampler: optimizer.zero_grad() output = model(batch) loss = nocd.losses.bpr_loss(output) loss.backward() optimizer.step() # 获取社区划分结果 communities = nocd.utils.get_communities(model) # 输出结果 for node, community in communities.items(): print(f"Node {node} belongs to community {community}") ``` 这是一个简单的示例,实际使用中可能需要根据具体情况进行参数调整和模型优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值