知识图谱与机器学习 | KG入门 -- Part1-b 图深度学习
介绍

我们正在定义一种新的机器学习方法,专注于一种新的范式 -- Data Fabric。
在上一篇文章中,我们对机器学习给出了新的定义:
机器学习是一种基于Data Fabric系统自动提取隐藏见解(insight)的机制;它通过预设算法能够识别出这些见解(insight),无需为此专门开发程序;从而建立模型以解决特定(或多个)问题。
理解这一点需要我们搭建一个Data Fabric。对于我来说,最合适的工具就是Anzo了,如前所述。

你可以使用Anzo构建所谓的“企业知识图谱”,当然也创建了Data Fabric。
现在我想专注于讲解一个机器学习的核心内容--深度学习。在这里,我阐述了深度学习的定义:
在机器学习领域中,深度学习被视为一个新兴分支,在数据科学中扮演着重要角色;它提供了一种能够从数据中提取并表达其复杂特征的方法;这种技术特别关注那些能逐步提取更高层次抽象意义的连续层
在当前研究阶段,我们深入探讨深度学习与图论的融合,并以探索这种融合如何助力推动我们的研究发展。
目标
建立对Data Fabric进行深度学习的基础。
细节
描述图深度学习的基础
探索Spektral库
验证对Data Fabric进行深度学习的可能性。
主要的假设
如果我们将一个支持公司所有数据的Data Fabric建立起来,并整合公司所有的数据资源,并通过结合深度学习技术来实现对这些数据进行系统性地识别和提取各种层次的见解的过程就可以在Data Fabric中运行。
第一节 图深度学习

通常我们会基于张量来进行神经网络的构建。但请注意,在某些情况下我们可以使用矩阵来定义张量。同样地,在表示图时也会使用矩阵进行描述。
Spektral库的文档中声明图一般由三个矩阵表示:
A

{0,1} ^ {NxN}:一种二值邻接矩阵,如果节点i与j之间有连接,Aij=1,否则Aij=0;
X

R ^ (NxF): 编码节点属性(或特征)的矩阵,其中F维属性向量与每个节点相关联;
E

R ^ (NxNxS):一种编码边属性的矩阵,其中一个s维属性向量与每个边相关联。
我在此不做深入阐述,请问您如需进一步了解图中的深度学习相关内容?如需进一步了解图中的深度学习相关内容,请参考Tobias Skovgaard Jepsen的文章
这里的重要部分是图神经网络(GNN)的概念。
图神经网络(GNN)

GNN的核心思路较为直接:用于对图中节点间的关系进行编码,每个节点Vi被表示为一个低维状态向量Si,其中1≤i≤N(记住向量本质上是秩为1的张量,而张量本身可以通过矩阵的形式来表示)
学习图深度模型的任务大致可以分为两个领域:
这些工作与图中的每个节点紧密关联起来
与图相关的关注点
与图相关的关注点
第二节 使用Spektral进行深度学习

Spektral的作者将其命名为关系表示学习的框架,并通过使用Python进行构建,并采用Keras API作为后端。
安装
我们将利用MatrixDS作为工具或直接运行我们的代码。请注意,在此环境中除了Anzo之外,您也可以在这里执行该代码。
你需要做的第一件事是复制MatrixDS项目:
https://community.platform.matrixds.com/community/project/5c6ae7c8c1b06ba1e18f2a6e/files
通过点击:

你将安装库并使一切正常工作。
如果在外面运行这个程序,请注意:该框架基于Ubuntu 16.04和18.04版本进行测试,并建议您按照以下步骤操作:sudo apt install graphviz libgraphviz-dev libcgraph6
然后安装库:
pip install spektral
数据表示
在Spektral库中,其中一些层和函数得以实现用于在一个图上工作;而另一些则考虑到图形的集合.
该框架有以下三种主要的操作模式:
single ,这种模式下我们考虑单个图,它的拓扑和属性;
batch ,这种模式下我们考虑一组图,每个图都有自己的拓扑结构和属性;
混合型中,在考虑具有固定拓扑结构的不同属性集合时;这可被视为一种特殊的批处理模式(其中所有邻接矩阵相同),但由于计算原因单独处理

例如,如果我们运行
from spektral.datasets import citation
adj, node_features, edge_features, _, _, _, _, _ = citation.load_data('cora')
我们将在sigle模式下加载数据,我们的邻接矩阵为:
In [3]: adj.shape
Out[3]: (2708, 2708)
节点属性为:
In [3]: node_attributes.shape
Out[3]: (2708, 2708)
边属性为:
In [3]: edge_attributes.shape
Out[3]: (2708, 7)
使用图注意层(GAT)进行半监督分类
这里假设你知道Keras,对于更多的细节和代码可以查看:
该平台上的社区成员可访问该链接。
该平台上的社区成员可访问该链接,并可获取到与项目相关的资源库。
GAT是一种新型的神经网络架构,在其设计中通过掩蔽机制的自注意力层对图数据进行操作。在Spektral框架中,默认情况下,默认实现_ GraphAttention _层通过类似于layers.GraphConv的方式执行卷积运算。具体而言,在计算时采用了注意力机制来加权邻接矩阵而非传统的归一化拉普拉斯矩阵。
该方法通过逐层堆叠节点实现对邻域特征的参与,并赋予邻域中各不同节点各自独特的权重。这不仅避免了进行高计算开销的操作(如矩阵求逆),同时也无需预先掌握图的结构即可完成任务。

我们将使用的模型非常简单:
# Layers
dropout_1 = Dropout(dropout_rate)(X_in)
graph_attention_1 = GraphAttention(gat_channels,
attn_heads=n_attn_heads,
attn_heads_reduction='concat',
dropout_rate=dropout_rate,
activation='elu',
kernel_regularizer=l2(l2_reg),
attn_kernel_regularizer=l2(l2_reg))([dropout_1, A_in])
dropout_2 = Dropout(dropout_rate)(graph_attention_1)
graph_attention_2 = GraphAttention(n_classes,
attn_heads=1,
attn_heads_reduction='average',
dropout_rate=dropout_rate,
activation='softmax',
kernel_regularizer=l2(l2_reg),
attn_kernel_regularizer=l2(l2_reg))([dropout_2, A_in])
# Build model
model = Model(inputs=[X_in, A_in], outputs=graph_attention_2)
optimizer = Adam(lr=learning_rate)
model.compile(optimizer=optimizer,
loss='categorical_crossentropy',
weighted_metrics=['acc'])
model.summary()
# Callbacks
es_callback = EarlyStopping(monitor='val_weighted_acc', patience=es_patience)
tb_callback = TensorBoard(log_dir=log_dir, batch_size=N)
mc_callback = ModelCheckpoint(log_dir + 'best_model.h5',
monitor='val_weighted_acc',
save_best_only=True,
save_weights_only=True)
但是这个模型会很大:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 1433) 0
__________________________________________________________________________________________________
dropout_1 (Dropout) (None, 1433) 0 input_1[0][0]
__________________________________________________________________________________________________
input_2 (InputLayer) (None, 2708) 0
__________________________________________________________________________________________________
graph_attention_1 (GraphAttenti (None, 64) 91904 dropout_1[0][0]
input_2[0][0]
__________________________________________________________________________________________________
dropout_18 (Dropout) (None, 64) 0 graph_attention_1[0][0]
__________________________________________________________________________________________________
graph_attention_2 (GraphAttenti (None, 7) 469 dropout_18[0][0]
input_2[0][0]
==================================================================================================
Total params: 92,373
Trainable params: 92,373
Non-trainable params: 0
因此如果机器性能没有那么优秀的话,则可以避免使用过多的迭代次数。\n\n然后我们进行训练(若机器性能不足为惧,则所需时间可能会较长):
# Train model
validation_data = ([node_features, adj], y_val, val_mask)
model.fit([node_features, adj],
y_train,
sample_weight=train_mask,
epochs=epochs,
batch_size=N,
validation_data=validation_data,
shuffle=False, # Shuffling data means shuffling the whole graph
callbacks=[es_callback, tb_callback, mc_callback])
得到最好的模型:
model.load_weights(log_dir + 'best_model.h5')
评估模型:
print('Evaluating model.')
eval_results = model.evaluate([node_features, adj],
y_test,
sample_weight=test_mask,
batch_size=N)
print('Done.\n'
'Test loss: {}\n'
'Test accuracy: {}'.format(*eval_results))
更多的信息可以参见MatrixDS项目:
https://community.platform.matrixds.com/community/project/5c6ae7c8c1b06ba1e18f2a6e/files
第三节 这在Data Fabric中处于什么位置?
如果你还记得上一部分,假设我们有一个Data Fabric:

一种”洞察力“(insight)可以被认为是它的一个凹痕:

当你在MatrixDS平台使用本教程时
一个N×N的邻接矩阵(N是节点数)
一个N×D的特征矩阵(D是每个节点的特征数)
一个N×E的二值标签矩阵(E是类的数量)
并且存储的是一系列文件:
ind.dataset_str.x => the feature vectors of the training instances as scipy.sparse.csr.csr_matrix object; ind.dataset_str.tx => the feature vectors of the test instances as scipy.sparse.csr.csr_matrix object; ind.dataset_str.allx => the feature vectors of both labeled and unlabeled training instances (a superset of ind.dataset_str.x) as scipy.sparse.csr.csr_matrix object; ind.dataset_str.y => the one-hot labels of the labeled training instances as numpy.ndarray object; ind.dataset_str.ty => the one-hot labels of the test instances as numpy.ndarray object; ind.dataset_str.ally => the labels for instances in ind.dataset_str.allx as numpy.ndarray object; ind.dataset_str.graph => a dict in the format {index: [index_of_neighbor_nodes]} as collections.defaultdict object; ind.dataset_str.test.index => the indices of test instances in graph, for the inductive setting as list object.
这些数据以图形形式存在,在我们的操作过程中,我们实现了对这些数据的加载到存储库中的目标。实际上,在存储系统中我们可以将其表示为NetworkX、numpy和sdf文件的形式。
这意味着如果我们把数据存储在Data Fabric中,则我们拥有了我们的知识图谱,并且已经具备了这些特征。我们需要找到一种方法将它们与库连接起来。目前这是一项最大的挑战
随后,在Data Fabric内部执行图运算的过程中,我们开始识别"洞察力"(insight)。
值得注意的是,在图数据库中运行这些算法确实存在可能性。实际上,在图数据库中运行这些算法确实存在可能性。然而,在实际应用中可能会遇到一些挑战与限制条件。例如,在Neo4j上探索这种方法会发现其独特之处:
Visiting the https://towardsdatascience.com/graphs-and-ml-multiple-linear-regression-c6920a1f2e70 article provides a comprehensive exploration of graph representations in machine learning, particularly focusing on how multivariate regression models can be effectively applied to analyze complex datasets.
This resource delves into the intricacies of integrating graph structures with machine learning algorithms, offering practical insights into leveraging these techniques for predictive modeling and pattern recognition tasks.
By examining the interplay between graph theory and statistical methods, readers are encouraged to explore innovative approaches for enhancing model performance in various real-world applications.
The article concludes with a detailed discussion on the implementation strategies and best practices for applying these advanced techniques, making it an invaluable resource for researchers and practitioners in the field of data science.
但这项工作仍在进行中。我想象这个过程是这样的:

神经网络能够存在于Data Fabric中,并且算法能够与该系统中的资源协同运行。
但我在这里甚至没有提到非欧几里德数据的概念。但在后续的文章中将会涉及这一主题。
总结
如果将知识图谱与Spektral或其他库建立连接,则可以在Data Fabric上运行相应的深度学习算法。
除了标准图形推理等任务之外,在节点或图分类等方面,基于图的深度学习的方法也被应用于广泛的学科中。例如,在建模社会网络影响、推荐系统、化学、物理领域以及疾病预防与药物研发领域中都有广泛的应用。此外,在自然语言处理(NLP)领域、计算机视觉领域以及智能交通系统预测中也得到了广泛应用,并且在解决NP难问题中的图相关问题上也展现出显著效果。也可以参考文献中的相关内容。
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/
