楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

京东云开发者
• 阅读 385

halo,大家好很开心又和大家见面了

在第一篇 楠姐技术漫画:图计算的那些事 发布之后,楠姐收到了很多建议、鼓励和支持,非常感谢大家的喜欢,所以楠姐尽自己所能马不停蹄开始第二篇的创作,虽迟但到~

本篇依然是风控算法分享,其实也依然算是图算法系列。社区发现作为最基础的图算法之一,也是楠姐在2020年入职后,第一个跟着大腿有样学样,学习、上手和应用的图算法,因此在第一期之后,楠姐就立刻决定把它单独拿出来写一期,进一步来说,无论图计算今天和日后发展如何,我们都不该忘记最初的前人基石,同时也希望自己和每个小伙伴,无论路已走多远,都能不忘初心,不忘滴水之恩。

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

--- PART 1 ★---

其实社区发现

也并不是什么难懂的名词

相信所有看过第一期漫话的宝子们

应该还没忘记图的概念

那社区又是什么呢?

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

社区其实反映的是

网络中的个体行为的局部性特征

以及其相互之间的关联关系

换通俗一些的说法...

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

用户之间的点赞、私信、关注等动作形成了边

那些关联尤为紧密的用户就形成一个社区

而分属不同社区的用户之间

关联则非常稀疏或根本不存在关联

近几年流行的饭圈文化就是一个很好的例子

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

明白了什么是社区

其实社区发现所要做的事也就很易懂了

正是要发现这些潜在的、有特定关系的节点集合

以及每个社区中都有哪些节点

这样做的目的和效果也有很多

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

我们京东的注册/营销/支付/物流/信贷等各大系统

黑产团伙在很多细节上的关联总是非常紧密的

与正常用户显得格格不入

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

再比如**生物学领域**内

基因调控网络分析、主控基因识别

还有**疾病传播学**中

传染关键社区识别以及易感人群发现等

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

还有上一期评论区中提到的

👍基于社交网络的海王识别器👍

都可以用到社区划分

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

一是要确认当前使用场景内

确实存在着明显聚集规律

节点间存在一定的逻辑可以形成社区结构

而不是无规律分散

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

二是不要把**社区拓扑结构欧式空间结构**混淆

虽然在欧式空间中

向量夹角小的点向量彼此距离近

向量夹角大的点向量彼此距离远

但即使距离相近的点向量

也不一定就存在业务或者逻辑上的拓扑关联

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

牢记以上两点

才不会让你的社区划分被限制使用方式或失效

--- PART 2 ★---

那说到这呢

可能会有算法的小伙伴发现

社区发现好像和**聚类**非常相似

它们都属于无监督算法

聚类要做的是

“簇内距离最小化,簇间距离最大化”

社区发现要做的是

“社区内部节点关联紧密,社区之间节点关联稀疏”

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

确实二者之间存在着很多相似性

但依然也是有区别的

机器学习中常见的聚类算法

本质上是一种更通用的方法

适用于多种常见的数据类型

而社区发现本质上则是图结构上的聚类

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

而关于社区本身

其实也有两种不同的类型

非重叠社区****重叠社区

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

前者说的是图中的每个节点只属于一个社区

而后者则允许同一个节点可以分属于多个社区

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

--- PART 3 ★---

社区发现算法类别繁多

不同算法划分的社区自然也是不同的

不管是人还是模型去执行一些学习任务

都有关于学习是否到位的评判方法

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

那我们如何评价一个社区发现算法的好坏呢?

此时就不得不先提一个重要的基本概念

模块度(modularity)

这是一种常用的社区划分评估指标

为了怕大家睡着从而忘记一键三连

楠姐贴一个简化版的模块度计算公式

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

通俗来说

模块度的物理含义是

社区内部的边数与随机情况下的边数的差距

如果越大,说明社区内部密集度高于随机情况

这里的随机情况指的是图中节点和边的数量不变

把节点之间连接关系随机打乱

一个图如果看起来不像随机产生的

那可能就是存在社区的

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

如果一个社区发现算法

尽可能多的将关联紧密的点划分在同一社区中

尽量避免所得社区之间还存在过多的边

这样就能得到较高的模块度

也会被认为是较好的一种划分方式

--- PART 4 ★---

自从2002年“社区”概念被提出后

社区发现算法就一直在快速发展

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

首先是比较直接基于模块度的社区发现

这类算法直接把模块度作为优化目标

有着良好的解释性

Louvain算法是其中的典型代表

它的二阶段思路非常清晰

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

第一个阶段称为模块度优化阶段

先把图中的每个节点都视作一个独立的社区

对每个节点

依次尝试将其分配到它每个邻居节点的社区中

计算分配前后模块度的变化

并将该节点分配至**模块度增益最大的一个邻居社区**中

如果没有任何一个邻居社区能提升模块度

则该节点的社区保持不变

对所有节点进行一轮以上计算后

一些节点便已经被划分在了同一个社区

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

接着开始**第二阶段**——社区聚合阶段

把同一个社区的节点视作一个新的节点

社区内部的边视作权重和累加的自环边

社区之间的边视作新节点之间的边

根据这个新的图结构再重复第一阶段

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

两个阶段循环往复

直到模块度不再更优为止

Louvain算法由于其较低的时间复杂度

十分适用于大规模网络的社区检测

也成为应用最广泛的算法之一

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

★★

第二种经典方法

是基于节点表达的社区发现

该类方法将图节点表达和映射到多维向量空间

并结合传统聚类算法将它们聚集成社区

这种方法不可避免的要进行矩阵计算

或者使用额外的节点表征算法

计算开销很大

但它能直接使用传统聚类的成果

因此灵活性非常好

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

比如,典型的一个方案就是

使用node2vec进行图节点编码

再使用聚类将相似的节点向量进行聚合

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

node2vec其实是借鉴了NLP领域中的word2vec

简单来讲,它先会在图结构中进行随机游走

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

通过随机游走

采样出多条节点序列

类似于文本序列

而我们要表征的节点

就类似于文本中的字词

再使用NLP领域中常用的**SkipGram**算法

将节点表示成量化的向量表达

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

以文本理解为例

如果我们想让人工智(zhi)能(zhang)理解下面这句话:

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

那是不是可以把这句话中“技术漫话”遮挡住

让模型进行填空:

“楠姐发了____,很快就要火了”

如果模型能正确填上

就可以一定程度代表模型学会了这句话中每个字词的含义

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

或者反过来也可以

把除了“技术漫话”之外其他的字全部遮挡住

让模型进行补写:

“**技术漫话,**_____”

要是模型补充的很不错

也代表模型学会了这句话和里面的字词

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

上面做的这些事

就是NLP领域内的**word2vec**算法

第一种填空的方式叫**CBOW**模型

第二种补充的方式就是**SkipGram**模型

在图的节点表征中

用于图节点序列也是一样的道理

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

那么说回社区发现

有了节点的数值表示

就可以借助任意一个传统的聚类算法

达成最终的节点社区划分的目标

但是分两步的方法终究费时费力

也有一些优秀的算法

可以将节点编码和聚类合二为一

一起进行优化

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

单纯是由于懒

楠姐就不再赘述

★★★

今天要说的第三种经典的社区发现思路

是基于信息论的社区发现

里面的典型代表是楠姐的“老熟人”

——赫赫有名的**infomap**算法

它也采用了在图中随机游走的方式进行节点序列的采样

但它社区发现的目标

是最小化节点的平均编码长度

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

所谓编码

其实就是用有限个标记的组合来表示原始信息

大家最熟知的就是二进制编码

即只用0和1两个数字

编码与原始对象通常是一一对应的

比如“楠”可能对应着“11”,“姐”对应着“1001”,那么“楠姐”就对应着(11,1001)

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

如果需要我们快速地记录下所看到的文字

记录的方式需要将每个字对应一个二进制编码

那为了记得更快

我们显然是希望经常出现的字用短的编码

比如“楠姐”这个词如果出现的很频繁

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

如果用“11000010001”来表示“楠姐”

要是每次听到“楠姐”都需要写这么长的数字

该是多么一件糟心的事情

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

如果用短的编码,比如“10”来表示“楠姐”

那相对而言记录速度就能有明显提升

也显得“楠姐”没有那么讨厌了

那么该如何找到一种最优的节点编码

使得平均编码最短呢

这个在信息论中已经给出了严谨的公式计算

也就是存在着一个“**信息熵**”的极限

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

不管用什么样的编码方式

其平均编码都不可能低于信息熵

这个信息熵也正是无损压缩的能力极限

这也正是信息论中的最小熵原理

回到Infomap算法本身

它额外借助了一个分组编码的思路

把最小信息熵和社区发现结合了起来

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

有没有一种可能

大家选择的记忆方式是酱紫的:

前面五个是人类活动

其次两个是搬砖项目

再往后三个是好吃的

后面三个是游戏

最后大家再分别记住四种分组里具体都有什么

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

是的,没错

这样的记忆方式就是一种更高效的方式

也是infomap所采用的编码方式——**层次编码**

它把每个节点都尝试进行分类

节点的编码均为在类内的编码

额外还有一套独立的类别编码

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

由于有了分类的思想

不同类的节点可以使用相同的编码

比如“楠姐”和“东坡肘子”都可以用使用“01”

这样就无形中压缩了整体的编码长度

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

再加上前面提到的最小熵目标

我们就可以搜寻一种最优的分层编码

来使得最短平均编码长度越小越好

最后每个节点编码时的分类

就是最终所属的社区

Infomap最大的优点也在于此

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

真是一种强大且漂亮的算法

还有一些其他类型的社区发现

比如基于**标签传播**的方法

基于**图分割**的方法

广义社区发现等等

感兴趣的宝子们可以卷起来了!

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

--- PART 5 ★---

社区发现算法算是图计算中的一条重要分支

也是我们风控技术中离不开的工具

它在纷繁复杂的网络结构中

总能提供给我们一种微观视角

揭示着事物的结构和本质

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

只要你的想象力足够丰富

就绝对有社区发现算法所能发挥的空间

事在人为,行则终至!

加油吧,算法攻城狮们~

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

----写在最后----

本篇文章图片构思、创意、整体结构、后期修改,全部版权归楠姐所有,素材生成均源自于Midjourney以及楠姐原创提示词生成。楠姐出图不易,并非完美,请勿未经允许用于其他场合及目的。

本篇文章图片创意均只为了说明及示意,且带有一定夸张和幽默元素,切勿对号入座哦如有雷同,纯属巧合无意冒犯~

本篇文章文字均根据以下参考文献汇总撰写:

[1]. 马耀,汤继良. 图深度学习[M].电子工业出版社.

[2]. 张长水,唐杰,邱锡鹏[M]. 图神经网络导论[M].人民邮电出版社.

[3]. CSDN. 写综述想到的[EB/OL]. https://blog.csdn.net/loptimistic/article/details/8173555

[4]. CSDN. 社区发现(Community Detection)算法[EB/OL]. https://blog.csdn.net/huangxia73/article/details/11801661

[5]. 博客园. 社区发现算法总结[EB/OL]. https://www.cnblogs.com/nolonely/p/6262508.html

[6]. 知乎. 简析社区发现和聚类[EB/OL]. https://zhuanlan.zhihu.com/p/428821516

[7]. 知乎. 万物皆网络,万字长文详解社区发现算法Louvain[EB/OL]. https://zhuanlan.zhihu.com/p/556291759

[8]. CSDN. infomap最全面易懂的解释--最小熵原理:“层层递进”之社区发现与聚类[EB/OL]. https://blog.csdn.net/jinking01/article/details/103511553

作者:京东科技 丁楠

来源:京东云开发者社区 转载请注明来源

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Elasticsearch和Kibana变更开源许可协议;Facebook利用AI增强为视障人士描述照片能力
\_开发者社区技术周刊\_又和大家见面了,快来看看这周有哪些值得我们开发者关注的重要新闻吧。!(https://static001.geekbang.org/infoq/0e/0ef0749d6a02848951b542a9d8828656.webp)京东科技主导的开源项目ShardingSphere荣登国人主导开源项目活跃度第五
Wesley13 Wesley13
3年前
2019 年 CNCF 中国云原生调查报告
!头图.jpg(https://ucc.alicdn.com/pic/developerecology/6db0c465111b4d9a96eb1ffe85c00e7a.jpg)中国72%的受访者生产中使用Kubernetes在CNCF,为更好地了解开源和云原生技术的使用,我们定期调查社区。这是第三次中国云原生调查,以中文进行
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
2020H1中国AI云服务市场规模增长远超预期;C++20 标准正式发布
开发者社区技术周刊又和大家见面了,让我们一起看看,过去一周有哪些值得我们开发者关注的重要新闻吧。!(https://static001.geekbang.org/infoq/0e/0ef0749d6a02848951b542a9d8828656.webp)C20标准正式发布2020H1中国AI云服务市场规模增长远
Stella981 Stella981
3年前
2021年全球公有云终端用户支出将增长18% ;EMNLP 2020最佳论文:无声语音的数字发声
!(https://static001.geekbang.org/infoq/af/af9f6637b50b09be60b00a42f3812d5e.png)开发者社区技术周刊又和大家见面
可莉 可莉
3年前
2021年全球公有云终端用户支出将增长18% ;EMNLP 2020最佳论文:无声语音的数字发声
!(https://static001.geekbang.org/infoq/af/af9f6637b50b09be60b00a42f3812d5e.png)开发者社区技术周刊又和大家见面
Easter79 Easter79
3年前
TIOBE 11 月编程语言:Java 首次跌出前二;基于Pytorch的Kornia可微分计算机视觉库开源
!(https://static001.geekbang.org/infoq/af/af9f6637b50b09be60b00a42f3812d5e.png)开发者社区技术周刊又和大家见面了,萌妹子主播为您带来最新一期“开发者技术联播”。让我们一起听听,过去一周有哪些值得我们开发者关注的重要新闻吧。!(https://static001.ge
Stella981 Stella981
3年前
Jenkins 插件开发之旅:两天内从 idea 到发布(上篇)
本文首发于:Jenkins中文社区(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fjenkinszh.cn)!huashan(https://oscimg.oschina.net/oscnet/f499d5b4f76f20cf0bce2a00af236d10265.jpg)
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
楠姐技术漫话:图计算的那些事 | 京东云技术团队
不知道大家在平时的工作中有没有听说过“图计算”这个名词,但大家一定在各工作汇报,技术分享中听说过“智能化”,“人工智能”这样的字眼,而我们今天要唠的这个图计算,就是人工智能领域内近几年炙手可热的前沿宠儿