d8e0615d07fd8d1897b65f1cae34f4c0.png

作者 | Mark Needham

译者 | Tianyu、Shawnice

编辑 | Jane

出品 | AI科技大本营(ID:rgznai100)

图算法不是一个新兴技术领域,在开源库中已经有很多功能强大的算法实现。近两年,业内的学者与科学家都在积极探索可以弥补深度学习不可解释性,无法进行因果推断的这个缺陷,而图神经网络(GNN)成为备受关注和期待的“宠儿”。随着学界和业界越来越关注GNN,各种新工作不断被提出,基于图神经网络的框架随之产生,如大家现在都已经熟悉的DGL,两大深度学习框架PyTorch和TensorFlow中也开始支持相应的功能,大家对图(Graph)、图计算、图数据库、图机器学习等研究的关注度越发高涨。

基于图数据的优秀性质,吸引越来越多的企业在基于图数据的机器学习任务中开始投入研究与使用,将图数据与机器学习算法结合,弥补算法缺陷,赋予新一代图数据库新的使命。有不少企业内部自研图数据库与图分析计算平台,但是可直接使用的开源或成熟工具并不完善,对没有能力自研的企业来说,基于图数据的机器学习该怎么做?工程师在自己的研究中有什么可行的尝试方法?

今天的文章中,通过大家都非常熟悉的两个工具——图数据库 Neo4J和Scikit-Learning 提供一种解决思路。我们将以构建一个机器学习分类器任务为例,从基础背景知识、算法原理到算法代码实现进行全面的讲解与指导。

数据库 Neo4J

数据库 Neo4J 是一种图形数据库,目前几个主流图数据库有 TigerGraph、Neo4j、Amazon Neptune、JanusGraph和ArangoDB,近年来,Neo4J一直位列图数据库排行榜榜首,随着这几年知识图谱的火热发展,让数据库 Neo4J受到广泛关注。

Neo4J 主要基于Cypher语言,基于Graph Algorithm 实现图分析算法。获取安装Neo4j Desktop也非常容易,只需一键。

Neo4j Desktop 地址:

https://neo4j.com/download/

92dca5994627384f68533d3e3cf2119b.png

这里再给大家推荐主要基于 Neo4J实现的案例算法书《Graph Algorithms》,其作者 Amy Holder 和 Mark Needham也是 Neo4j的员工。

1036b7bdd1a1467a0440c0b4ec6ecdd6.png

在线阅读地址:

https://neo4j.com/docs/graph-algorithms/current/

图数据库对于分析异构数据点之间的关系特别的有用,例如防欺诈或Facebook的好友关系图,以在社交网络关系的预测任务为例,复杂的(社交)网络一个最重要的基本构成是链接,在社交关系网络中基于已有节点和链接构成的网络信息,预测潜在关系,这背后一个核心的算法就是链路预测算法。这也是我们今天文章中的核心算法,Neo4J图算法库支持了多种链路预测算法,在初识Neo4J 后,我们就开始步入链路预测算法的学习,以及如何将数据导入Neo4J中,通过Scikit-Learning与链路预测算法,搭建机器学习预测任务模型。

链路预测算法

(一)什么是链路预测?

链路预测已经被提出很多年了。2004年,由 Jon Kleinberg 和 David Liben-Nowell 发表相关论文之后,链路预测才被普及开来。他们的论文为《The Link Prediction Problem for Social Networks》

论文地址:

https://www.cs.cornell.edu/home/kleinber/link-pred.pdf

随后,Kleinberg 和 Liben-Nowell 提出从社交网络的角度来解决链路预测问题,如下所述:

若给定一个社交网络的快照,我们能预测出该网络中的成员在未来可能出现哪些新的关系吗?我们可以把这个问题看作链路预测问题,然后对网络中各节点的相似度进行分析,从而得出预测链路的方法。

后来,Jim Webber 博士在 GraphConnect San Francisco 2015 大会上介绍了图算法的发展历程,他用图理论讲解了第二次世界大战。

演讲视频:

https://youtu.be/kVHdMD-XT9s

除了预测世界大战和社交网络中的朋友关系,我们还可能在什么场景用到关系预测呢?我们可以预测恐怖组织成员之间的关系,生物网络中分子间的关系,引文网络中潜在的共同创作关系,对艺术家或艺术品的兴趣等等,这些场景都可能用得上链路预测。

链路的预测都意味着对未来可能发生的行为进行预测,比如在一个引文网络中,我们是在对两个人是否可能合作写一篇论文进行预测。

(二)链路预测算法

Kleinberg 和 Liben-Nowell 介绍了一系列可以用于链路预测的算法,如下图所示:

baaed3878d407bf084d15f4a109a8a13.png

Kleinberg 和 Liben-Nowell 在论文中所介绍的算法

这些方法都是计算一对节点的分数,该分数可看作为那些节点基于拓扑网络的“近似度”。两个节点越相近,它们之间存在联系的可能性就越大。

下面我们来看看几个评估标准,以便于我们理解算法的原理。

(三)算法评估标准

  • 1、共同邻居数

最简单的度量方法之一是计算共同邻居数,对这个概念,Ahmad Sadraei 的解释如下:

作为预测因子,共同邻居数可以捕捉到拥有同一个朋友的两个陌生人,而这两个人可能会被这个朋友介绍认识(图中出现一个闭合的三角形)。

这个度量标准计算了一对节点所共享的相同邻居数目。如下图所示,节点 A 和 D 有两个共同邻居(节点 B 和 C),而节点 A 和 E 只有一个共同邻居(节点 B)。因此,我们认为节点 A 和 D 更相近,未来更有可能产生关联。

f608460b7acb15592e004f2b96395b02.png
  • 2、Adamic Adar(AA 指标)

早在2003年,Lada Adamic 和 Eytan Adar 在研究社交网络的预测问题时,提出了 Adamic Adar 算法。AA 指标也考虑了共同邻居的度信息,但除了共同邻居,还根据共同邻居的节点的度给每个节点赋予一个权重,即度的对数分之一,然后把每个节点的所有共同邻居的权重值相加,其和作为该节点对的相似度值。

9a3d6687057b409ea6bd2bb30ff5db90.png

节点的度指它的邻居数,该算法的初衷是:当图中出现一个闭合的三角时,那些度数低的节点可能有更大的影响力。比如在一个社交网络中,有两个人是被他们的共同好友介绍认识的,发生这种关联的可能性和这个人还有多少对朋友有关。一个“朋友不多”的人更有可能介绍他的一对朋友认识。

  • 3、优先连接

对于图算法研究者来说,这应该是最常见的概念之一,最初由 Albert-László Barabási 和 Réka Albert 提出,当时他们正在进行有关无尺度网络的研究。该算法的设计初衷是,一个节点拥有的关系越多,未来获得更多关联的可能性就越大。这是计算起来最简单的度量标准,我们只需要计算每个节点的度数的乘积。

b67161d685c44eb64494ac5ced4cde81.png

(四)链路预测 - Neo4j 图算法库

目前,Neo4j 图算法库涵盖了6种链路预测算法:Adamic Adar 算法、共同邻居算法( Common Neighbors)、优先连接算法(Preferential Attachment)、资源分配算法(Resource Allocation)、共同社区算法(Same Community)、总邻居算法(Total Neighbors)。

快速学习一下以下五种算法的原理:

(1)Adamic Adar:计算共同邻居的度数的对数分之一,并求和。

(2)优先连接算法:计算每个节点的度数的乘积。

(3)资源分配算法:计算共同邻居的度数分之一,并求和。

(4)共同社区算法:利用社区发现算法,检查两个节点是否处于同一个社区。

(5)总邻居算法:计算两个节点所拥有的不同邻居的数目。

现在来看一下如何使用库中的共同邻居函数,以之前提到的图关系作为例子。

首先执行 Cypher 语句,在 Neo4j 中创建一个图:

UNWIND [["A
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐