当前位置:   article > 正文

kegra:用Keras深度学习知识图_keras 知识图谱

keras 知识图谱

你好。 我在过去的文章中提到我正在为企业数据集进行认知计算。 就是这样。

本文将需要深入学习的一些理解,但您应该能够遵循对数据科学的最小理解。

我一直致力于在GPU上深入学习的图形中检测模式。 Thomas Kipf 编写了一个用 Keras对图形节点进行分类的好库 。 本文基于他的作品“ 图形卷积网络的半监督分类 ”。 我们来看一下。

首先,图表是什么?

那么,我关心我工作中的知识图。 这些图表代表像“白宫”和“唐纳德特朗普”这样的实体作为节点,像“作品”这样的关系是边缘。 我们如何构建这些图表是另一回事。 在本文中,我正在研究交易数据以训练分类器来识别欺诈交易。 如果你更喜欢顶点和圆弧而不是节点和边缘,那么阅读这篇文章 。

我在这个奇怪的图表世界中感到宾至如归。 我在图表上的工作可以追溯到我的硕士论文。 在那项工作中,我有兴趣在有向无环图内找到共同元素(凸子图)。 我正在确定基于它运行的软件添加到处理器的定制指令。 我用整数线性规划来解决这个问题。 在大图上,求解器可能需要数小时甚至数天。

这一系列研究的链接:

以下是OrientDB中知识图本体的一个例子:

来源: OrientDB演示页面

其次,我们可以发现什么样的模式?

我们想要标记节点。 图中的每个实体都有一些我们想要分类的特征,而我们只有一些节点的标签。 我们可以预测出简单的布尔标签,比如“人物”或“不是人物”,还有更有趣的标签,比如节点分类到几个类别之一。 然后我们可以做更复杂的回归,比如根据图表中的实体数据预测实体所带来的风险。 这包括节点到其他节点的连接。 让我们坚持本文中的布尔节点标签/分类问题,以保持简单。 我们希望通过大约4,000个银行帐户标记594,643笔交易,要么是可疑的,要么是不可疑。 我们希望在不到一分钟的时间内完成 。 不是几小时或几天。

第三,我们如何定义kegra理解的图形?

我们需要指定两个文件。 第一个节点具有节点描述,第二个节点说明节点如何连接。 在kegra提供的cora示例中,有2,708个节点的描述和标签,其中有5,429个边(节点对),用于定义节点彼此的连接。

以下是每个文件几行的视图:

节点之间的链接
每个节点ID后面跟着特征(大多数为0),最后还有一个节点标签(例如Neural_Networks,Case_Based)。  这些功能大多为0,并在上面的屏幕截图中为许多行换行。  每个特征表示在某个单词的文档(节点)中的使用。  更多信息请点击此处kegra自述文件 。

让我们试试看

首先,你需要Keras 2,所以这样做:

 点安装keras  - 升级 

假设你安装了Keras和TensorFlow,keras-gcn依赖于gcn,所以让我们克隆并逐个安装它们。

  #install gcn 
  git clone https://github.com/tkipf/gcn.git 
  cd gcn / 
  python setup.py安装 
  cd .. 
  #install keras-gcn 
  git clone https://github.com/tkipf/keras-gcn.git 
  cd keras-gcn / 
  python setup.py安装 

首先,让我们使用kegra称为cora的现成示例运行代码。 我们在输出中看到cora从原始数据中检测并打印了预期的节点数和边数。

训练运行在cora数据集上:36%的准确性和上升。
cora数据集的测试结果:77.6%的准确性。

我们现在对kegra理解输入文件的方式做一些小改动,只是为了让这些名字更好。 在github的当前版本中,输入文件是描述节点之间的弧的“* .cites”,描述节点的“* .content”。 相反,我改变了kegra以读取“* .link”和“* .node”文件。 你的数据文件夹现在应该是这样的:

  〜/ kegra / keras-gcn / kegra $ ls -l data / cora / 
 总计7720 
  -rwxrwxr-x 1 ubuntu ubuntu 69928 Dec 3 02:52 cora.link(was cora.cites) 
  -rwxrwxr-x 1 ubuntu ubuntu 7823427 Dec 3 02:52 cora.node(was cora.content) 
  -rwxrwxr-x 1 ubuntu ubuntu 1560 Dec 3 02:52自述文件 
  〜/ kegra / keras-gcn / kegra $ ls -l data / customerTx / 
 总计7720 
  -rwxrwxr-x 1 ubuntu ubuntu 7823427 Dec 3 05:20 customerTx.node 
  -rwxrwxr-x 1 ubuntu ubuntu 1560 Dec 3 05:20自述文件 
  -rwxrwxr-x 1 ubuntu ubuntu 69928 Dec 3 05:20 customerTx.link 

现在让我们用交易数据填写customerTx.nodecustomerTx.link 。 第一个文件是银行客户及其功能的列表。 格式是:

快速查看一些交易记录。  在这种情况下,有货币的发送者和收款人,以及已发送金额的记录(金额栏),以及由审阅交易的人类分析员(欺诈栏)应用的标签。  我们可以忽略前两列(索引和步骤栏)。
边缘文件( customerTx.link )记录双方在每次交易中的人员。
节点文件( customerTx.node )将图表中每个节点上的信息记录为每笔交易的资金发送者。  txCount列列出了离开节点的事务(边)的数量。  amountMean列指定平均事务大小。  “ 欺诈平均值”列是此数据涵盖期间发件人帐户上标记的交易的平均值。  请注意,绝大多数交易都可以,而不是FRAUD,这是一种数据集失衡 。
图中有4112个节点。  分析师平均有2.3%被标记为问题。

我们现在可以使用kegra来分析各种分析精度的图表。

如果系统是由完美的分析师对数据进行培训的,那么应该完全学会如何分析图表。 但是,如果人类分析师在20%的时间内出错,那么kegra模型的预测能力应该同样被限制在80%。 为了试验这个,我给图形标签添加了不同数量的随机噪声,看看kegra会如何做,因为训练数据的质量越来越差。

以表格和图表形式显示的结果如下:

交易标签实验的原始结果,在知识图上使用深度学习
这与上表中的数据相同,但更易于理解图形

这里有很多东西需要消化。 首先,我们看到,随着数据(蓝色)中的噪声增加,早期停止(x轴上的标签)会在训练中更早和更早地进行踢球。 这告诉我们,特征数量太少(少数列)导致训练数据过度拟合。 其次,我们看到测试精度通常低于训练精度。 这是预期的,因为训练数据对于分类器而言是熟悉的,而测试数据则不是。 第三,测试精度不为零。 好! 这意味着分类器可以仅使用图形和每个节点的特征(txCount,amountMean和fraudMean)重新生成OK / FRAUD标签。 第四,随着注入的噪声(蓝色)上升,分类器(橙色)的准确度下降。 这意味着结果不是随机的。 第五,我们看到,训练准确度(红色)加上附加噪声(蓝色)增加了大约100%,这意味着分类器与标注数据集的分析师一样好/坏,但不会更糟。

总之,kegra在知识图谱分类上表现得非常好。 与他们的论文中的结果相比,这些结果可能太好了。 我将检查交易文件中的欺诈标签列是否太具有说明性,并将其替换为难以用来从诸如原籍国,城市,邮政编码等更广泛的数据集中预测的功能。

我的下一个动作是从源文件中重新生成具有更多列的交易数据集,并查看kegra是否仍然表现如此出色。 在cora数据集上没有提前停止,所以我怀疑交易数据对kegra来说并不具有挑战性,这是我之前提到的原因之一。 也许如果我将更多语义特征嵌入到生成的图中......我可以做很多有趣的事情作为下一步。

特别感谢Thomas Kipf在出版前观察这篇文章。 与我平常的高级文章相比,这是一篇非常复杂的文章,可以准备(和阅读)。 如果你喜欢这篇关于图表的深度学习文章,那么请让我知道写出更多这样的研究内容。 我也很高兴在评论中听到您的意见。 你怎么看?


https://towardsdatascience.com/kegra-deep-learning-on-knowledge-graphs-with-keras-98e340488b93

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/851975
推荐阅读
相关标签
  

闽ICP备14008679号