[参考link]
-1- 什么是图数据?
图数据无处不在 —— 从疾病诊断,遗传学研究还有健康管理,到银行和工程,图都是一种描述&解决问题的强有力的分析模式。简单来说,一张图
就是:节点
(比如人)和他们之间关系
(比如 Fatima 是 Jacob 的朋友)的集合
,这些节点通常具有自己的属性(比如 Fatima 23岁)。
如图所示,这个例子在数据库里通常是这样存储的。一个最主流的图数据库是Neo4j
,用他们自己的话说“ 这是一个处于世界领先地位的图数据库,因为它具有本地的图存储和图处理能力。你可以在 Neo4j 数据库中使用 Cypher 查询数据,这是一种类似于SQL的图查询语言。
在之前的演示示例中,我们可以这样获取一个 Fatima 朋友的列表:
MATCH (n1)-[:IS_FRIEND_OF]-(n2)
WHERE n1.name = "Fatima"
RETURN n2.name
图是描述数据的一种极具灵活性的强大方式。
传统的关系型数据库
很难用固定模式存储不同实体之间的联系,然而这些联系是现实世界中普遍且至关重要的一部分。
在图数据库
中,这些联系是非常易于存储和查询的。此外,通常很多事物之间的联系(例如家庭成员之间的关系)构成分析问题的关键,使用图数据库使得问题分析变得很简单。
备注:
关系(relationship)和边(edge)在这篇文章里是可以相互替换的。
Neo4j 语境下使用前者,图论语境下用后者。
-2- Graph ML : 为什么要在图数据上使用机器学习?
[Benedict Evans : Ways to think about machine Learning]总结了对于图机器学习(Graph ML) 的两种观点,在图数据上使用机器学习能:
*
对人类可以轻易实现,但难以向计算机描述的任务,进行自动化处理。
*
建立适用于超大规模图数据的,通用模式的、高效率的处理方法。
-3- Graph ML : 什么是图机器学习?
图机器学习可以简单地定义为在图数据上应用机器学习(applying machine learning to graph data)
。此处我们不再赘述传统的图算法
,如:PageRank,Clique Indentification, Shortest Path 等。而将专注于在图数据上使用神经网络
&深度学习
的应用。这些强大的当今最优选择的算法在公开资料中已有大量参考。
-3.1- 使用 Graph ML 会遇到什么样的挑战?
在ML这个令人激动又充满希望的领域里,Graph ML 还是一项非常年轻的技术。主流机器学习的讨论更多的是在可应用性(例如使用ResNet进行迁移学习来分类图像,或者在文本中使用BERT预测),还有对开发者的易用性上(例如 TensorFlow, PyTorch, FastAI)。
然而至于Graph ML,作为不那么简单而通用的技术,也没有任何流行的ML库支持图数据。同样的,像 Neo4j 这样的图数据库自己也没有支持在数据上运行ML的方法。(尽管 Neo4j 已经在尝试使它成为可能)。
在深度学习库中不支持图的其中一个原因是图具有过于灵活的的数据结构(例如任何节点与其他节点有任意多的连接)并不契合主流深度学习库和 GPU 架构中使用的固定大小图和固定尺寸张量。更简单来说,用矩阵来描述并操作一个稀疏图是非常困难的。不是不可能,但比使用向量描述文本还有图像要难得多。
尽管如此,Graph ML 的趋势依然无法阻挡。Graph ML 将成为在很多产业中分析数据的一个主流的基本方式。再提及一点,就像其他任何机器学习技术,大多数 Graph ML 都需要大量的训练数据。
-3.2- Graph ML系统在实际运行中是怎样的?
虽然这个问题的答案会随着具体的任务和数据集的变化而变化,但它有助于概括出在进行Graph ML时将会遇到的问题。
*
你需要自己来写代码实现逻辑,因为高级的 Graph ML 工具还不存在。
你可能会想要用 Python, 还有机器学习库 像TensorFlow 或者 PyTorch 来实现。
*
根据你的数据规模,你可以在单机上实现训练模型,也可以使用分布式系统。(有趣的是,很多图训练过程可以很好地在分布式系统上工作)。
*
Raw Data:从CSV 文件、 Neo4j 或者其他格式的图数据库中,提取数据。
*
Sample Prepare:把数据提供给机器学习库。对于涉及到百万节点的小图(small graphs),可以把每一张图都预先编译成了 TFRecord,特征向量存储了节点、联系、相邻矩阵信息。所有节点的属性与文本被标记成了一个字典的格式。对于超大规模节点的图,需要用某种方案把图分为较小的训练样本(比如分批训练,or按照 节点-边-节点 三个一组的形式训练)。建议:一些情况下数据在导入机器学习库之前进行表格化(tabularize )。Node2Vec
就是一个很好的例子,它的每一个节点都被随机游走(Random Walk)转换成向量,然后这些向量再以列表的形式传入机器学习模型。
*
Train Model:模型训练。
*
Model Use:使用模型,对线上case进行预测。一些情况下,一个模型计算完成后的新节点/边/图信息会存储在外部数据库里。另外一部分的模型会被部署在线上的产品中。在这种情形下,从图数据建立的模型系统需要更好的性能(可以是从图数据库中导入数据),然后这个预测模型最终会被用户或下一代系统所利用(例如 Alexa 和用户的问答系统)。
-4- 开始在图数据上进行机器学习
尽管Graph ML是一个年轻的领域,研究人员还是想出了一系列令人眼花缭乱丰富的方法处理Graph ML。
-4.1- 你想要执行什么类型的任务?
对于 Graph ML有各种各样的开始和执行过程的方式。因此,通过考虑你的任务目的来缩小开始的范围和方式是很有帮助的。如同任何机器学习系统一样,缩小和明确你要实现的目标,将对你的试验成功和试验过程有极大的帮助。通过提出一个最小的、明确的目标,你的模型和需要数据集就会减小到易于处理的程度。
我们将要阐述的任务类型:
预测两个节点之间的关系是否存在
预测和分类节点,边,还有整张图