学习知识图谱:Neo4j入门和基础知识

释放双眼,带上耳机,听听看~!
本文介绍了学习知识图谱和Neo4j图数据库的入门和基础知识,包括创建数据库、在线课程学习、图的遍历等内容。

前言:

Abstract:本文的主要内容是图数据库的入门以及Neo4j的基础知识

笔者近日在学习有关知识图谱Knowledge Graph的相关内容。

Neo4j是项目所需的一款功能强大的应用,特此来学习之,并记录于本文。

笔者是AI领域的小白,作为初学者,文章中难免会有出错或者不恰当的部分,烦请读者朋友们指出(在以下任意平台)。

个人博客:conqueror712.github.io/

知乎:www.zhihu.com/people/soeu…

Bilibili:space.bilibili.com/57089326

掘金:juejin.cn/user/129787…

还有要说明的是,笔者此前的文章存在一个问题是,篇幅过长,

这不仅导致读者不愿意看,就连笔者自己再次翻阅的时候都只能利用Ctrl+F才能找到我要找的内容。

故拆分之,便于阅读和查看,每篇文章控制在1.5k~3.5k字之间。

注意:本文不是教程,只是个人学习的记录和心得,可能会对你有帮助,建议配合官方文档一起学习!

官方文档链接:graphacademy.neo4j.com/courses/neo…

Neo4j – AuraDB入门:

入门部分会有五个板块:

  1. Create a database
  2. View online courses
  3. Start console tour
  4. Open Sample Guide
  5. More resources

首先进入网址:console.neo4j.io/?product=au…

我们就暂时用免费版来学习,点击Start Here,随后会生成一个随机的初始密码,就像这样:

学习知识图谱:Neo4j入门和基础知识

随后我们会修改这个密码,这实在是太难记了!

学习知识图谱:Neo4j入门和基础知识

可以看到,我们已经创建成功了,它在欢迎我们呢!

到此为止,都非常顺利,不过我们马上就遇到了第一个难题:他居然推荐我们先学四个课程再来玩这个,

学习知识图谱:Neo4j入门和基础知识

那好吧,作为优秀的新时代新青年,我们秉承磨刀不误砍柴工的精神,先去学一下这些课程。

官方告诉我们,这四门课程总共需要6个小时才能学完,

不要紧,俗话说的好,慢慢来才比较快,接下来我们就进入课程的学习吧。

(已经学完了或者认为自己不需要学的读者可以直接跳到下一部分)

Neo4j – 基础知识:

这些课程都有官方的中文版教程,有能力的读者可以自行前往阅读,

这里笔者给出自己的学习过程,以及一些在学习过程中的见解。

注意:与官方文档中重复的部分就不予记录了,查阅即可!

(文档链接还是最上面的链接,大家Start Here之后就有了)

以图的方式去思考

关于概念:

七桥问题→图论的诞生:节点 + 边

现在看来,图是一种非常有用的工具,可以帮我们建模和分析数据,广泛应用于解决复杂问题上,包括路线查找、供应链分析和实时推荐

学到这里,你会发现这个网站的教程居然还有课堂小测!这真是太良心了,感动哭了

在知识图谱中,我们经常听到”对象”,”实体”这样的名词,事实上,这都是”节点”的别名,它可以代表任何你想代表的事物

而”关系”,也就是”边”,通常是动词

关系是图数据库中最重要的元素。

关于图的遍历:

Neo4jCypher语言针对节点遍历进行了优化,因此边不会被多次遍历,这对应用程序来说是一个巨大的性能提升

Graphs are Everywhere:

MATCH (c:Category)-[:HAS_CHILD|HAS_PRODUCT*1..3]->(p:Product)
RETURN p.id, p.title, collect(c.name) AS categories

解释:

  1. 查找距离类别节点最多三个关系远的产品节点
  2. 查询匹配到的产品节点的id和title属性,同时返回一个集合categories,其中包含了这些产品所属的所有类别的名称。

为什么推荐算法中常用图数据库?

因为图数据库的优势在于,需要遍历更小比例的图就能生成推荐

你可以简单地从一个产品节点遍历购买该产品的用户,然后再遍历他们购买的后续产品。

不仅如此,图和图数据库还可以用到方方面面,Neo4j Graphgist站点有许多示例数据模型。

属性图

哦!我们大概终于是遇到了一个新的概念——属性图。

我们可以使用两个额外的元素来为数据提供一些附加的上下文

什么是属性图

标签

只需要一张图就可以解释清楚,这也是官方文档中给出的图:

看!那些黑框框里面的零个、一个或多个词就是标签。

学习知识图谱:Neo4j入门和基础知识

属性

同样给出一张图,不过这可能就得多说两句了,

为节点添加属性,可以使其具体化

属性是键值对的形式。

不需要为具有特定标签的每个节点都指定属性。 如果节点的属性不存在,则将其视为 null

学习知识图谱:Neo4j入门和基础知识

边的类型和属性以及方向

不仅是点,边(关系)也是有标签和属性的,只不过把”标签”换成了”类型”。

并且和点不同的是,Neo4j的每个关系必须有一个类型

这不仅完善了图的含义,还便于我们对图进行部分遍历

什么是部分遍历呢?就比如说我们只关心谁在哪工作,不关心谁和谁结婚。

当然,如果是这样的话我们可能需要进行多源遍历,这需要看情况。

对于关系的属性,这些可以指加权图中的权值,或者只是为关系提供额外的上下文

学习知识图谱:Neo4j入门和基础知识

除此之外,在Neo4j中,图的每个关系必须有方向。

不过,尽管方向是必需的,但可以在任一方向查询关系,或在查询时完全忽略。

原生图的优势

接下来的内容可能有点陌生了,至少对于笔者这样的新手来说是这样的,

理解和学习可能会花费更多的时间,

不过没关系,让我们继续吧!

Neo4j是一个原生图数据库,这意味着从数据存储到查询语言的所有内容都是专门为遍历而设计的

Neo4j符合ACID标准——事务中的一组修改将全部提交或失败。

无索引邻接IFA

提交数据库事务时,对关系的引用关系开始和结束处的节点一起存储。

由于每个节点都知道与其连接的每个传入和传出关系,底层图引擎将简单地查询内存中的指针——这是计算机非常擅长的。

查询过程:

  1. 根据指定的锚点计划查询
  2. 使用索引来检索锚节点
  3. 按照指针检索所需的结果节点

与关系数据库访问相比,IFA 的好处是:

  • 更少的索引查找
  • 没有表扫描
  • 减少数据重复

还是不好理解?没关系,以下这个例子会帮助到你!

假设你要规划一次旅行,并且需要找到一个好的餐厅去享受美食。

你可能会在互联网上搜索各种餐厅的信息,并且想了解它们的菜单、位置、评价等信息。

如果这些信息存储在一个关系型数据库中,那么你可能需要进行多个查询来获取所有信息。

例如,你可能需要先查询餐厅表格,然后再查询菜单表格和评论表格,最后将这些信息整合起来以得出你需要的信息。这种查询方式需要多次查询和连接多个表格,因此查询速度可能会比较慢。

相比之下,如果这些信息存储在一个图数据库中,那么你只需要进行一个查询,就能够得到所有相关的信息。

图数据库使用图的方式来存储数据,其中节点表示实体,边表示实体之间的关系。

例如,在图数据库中,你可以使用**一个节点表示餐厅,另一个节点表示菜单,使用一条边表示餐厅和菜单之间的关系。**这种查询方式只需要一次查询和一次遍历,因此查询速度会比较快!

从其他数据库到图数据库

随着关系数据库中记录数的增加,查询变得越来越慢

图数据库中的查询时间将与查询期间实际触及的数据大小保持一致

将关系视为一等公民也可以在开始时提供优势。

图中建模关系比创建数据透视表来表示多对多关系更自然

也就是说,总结起来就是一句话:

可以将关系模型实现为图模型,这样对于理解起来会更方便!

除此之外,键值存储文档存储也是可以实现用图来提高性能的存储方式。

你的第一个图

电影图数据

这部分内容是一个图数据库的例子,帮助理解上述知识,

这里放一张图,以示实际应用中的图数据库是什么样子的:

学习知识图谱:Neo4j入门和基础知识

具体的内容就不展开了,大家可以自行前往查看。

可能有的读者会大失所望,还以为是要开始创建第一个项目了呢!

先别着急,还记得一开始官方教程中告诉我们的吗?这刚刚是第一个基础,还有三个基础等着我们呢!

先让我们庆祝一下,我们已经完成了第一部分的学习!

学习知识图谱:Neo4j入门和基础知识

甚至给我颁发了一个证书 XD

学习知识图谱:Neo4j入门和基础知识

Thanks for reading and see you next time!

本文正在参加 人工智能创作者扶持计划

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

AI参数对绘画效果的影响及选择方法

2023-12-17 15:51:14

AI教程

使用DeepAI进行文本创作图像生成 - 探索AI艺术创作的可能性

2023-12-17 16:10:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索