一、知识图谱简介
“知识图谱本质上是语义网络(Semantic Network)的知识库”。但这有点抽象,所以换个角度,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图(Multi-relational Graph)。
二、怎么构建知识图谱呢? 2.1 知识图谱的数据来源第一种:业务本身的数据。这部分数据通常包含在公司内的数据库表并以结构化的方式存储,一般只需要简单预处理即可以作为后续AI系统的输入;
第二种:网络上公开、抓取的数据。这些数据通常是以网页的形式存在所以是非结构化的数据,一般需要借助于自然语言处理等技术来提取出结构化信息。
2.2 信息抽取的难点信息抽取的难点在于处理非结构化数据。(如图)
2.3 构建知识图谱所涉及的技术在构建类似的图谱过程当中,主要涉及以下几个方面的自然语言处理技术:
实体命名识别(Name Entity Recognition,NER):就是从文本里提取出实体并对每个实体做分类/打标签。
关系抽取(Relation Extraction,RE):通过关系抽取技术,把实体间的关系从文本中提取出来。
实体统一(Entity Resolution,ER):不同词汇其实是指向同一个实体。
指代消解(Coreference Resolution):文本中出现的“it”, “he”, “she”这些词到底指向哪个实体
三、知识图谱的存储知识图谱主要有两种存储方式:
一种是基于RDF的存储;
另一种是基于图数据库的存储。
其中Neo4j系统目前仍是使用率最高的图数据库,它拥有活跃的社区,而且系统本身的查询效率高,但唯一的不足就是不支持准分布式。
四、Neo4J 介绍与安装安装与环境配置参考博客
安装完成后win下输入代码:neo4j.bat console 4.1 Neo4J Web 界面 介绍
:7474/browser/
4.2 Cypher查询语言Cypher:
介绍:是Neo4J的声明式图形查询语言,允许用户不必编写图形结构的遍历代码,就可以对图形数据进行高效的查询。
设计目的:类似SQL,适合于开发者以及在数据库上做点对点模式(ad-hoc)查询的专业操作人员。
五、Neo4J 实战参考知乎@异尘手把手教你快速入门知识图谱 - Neo4J教程
六、通过 Python 操作 Neo4j 6.1 neo4j模块:执行CQL ( cypher ) 语句 # step 1:导入 Neo4j 驱动包 from neo4j import GraphDatabase # step 2:连接 Neo4j 图数据库 driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password")) # 添加 关系 函数 def add_friend(tx, name, friend_name): tx.run("MERGE (a:Person {name: $name}) " "MERGE (a)-[:KNOWS]->(friend:Person {name: $friend_name})", name=name, friend_name=friend_name) # 定义 关系函数 def print_friends(tx, name): for record in tx.run("MATCH (a:Person)-[:KNOWS]->(friend) WHERE a.name = $name " "RETURN friend.name ORDER BY friend.name", name=name): print(record["friend.name"]) # step 3:运行 with driver.session() as session: session.write_transaction(add_friend, "Arthur", "Guinevere") session.write_transaction(add_friend, "Arthur", "Lancelot") session.write_transaction(add_friend, "Arthur", "Merlin") session.read_transaction(print_friends, "Arthur")上述程序的核心部分,抽象一下就是:
neo4j.GraphDatabase.driver(xxxx).session().write_transaction(函数(含tx.run(CQL语句)))