知识图谱task02
这次应该算我第四次参加datawhale组队学习了,首先还是要感谢datawhale这个平台,给了我们这样一个学习的机会,好了,废话少说,下面进入正题。
1.知识图谱介绍
这里简要介绍一下知识图谱。知识图谱是由 Google 公司在 2012 年提出来的一个新的概念。从学术的角度,我们可以对知识图谱给一个这样的定义:“知识图谱本质上是语义网络(Semantic Network)的知识库”。但这有点抽象,所以换个角度,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图(Multi-relational Graph)。
图有节点和边构成,我们可以理解为节点为实体,可以是具体的人,也可以是某个地名,甚至是某样物品,而边代表着两个实体之间的关系。比如,小王和小李是朋友,小王和老王是父子等。
2.neo4j
知识图谱由于其数据包含实体、属性、关系等,常见的关系型数据库诸如MySQL之类不能很好的体现数据的这些特点,因此知识图谱数据的存储一般是采用图数据库(Graph Databases)。而Neo4j是其中最为常见的图数据库。
首先在 Neo4J官网 下载 Neo4J。
我这里下载的是离线版本,在网址:https://neo4j.com/download-center/#community
进入后下载社区版,并将其解压到相应的目录下,如 D:\Neo4j\neo4j-community-4.2.2
注意,安装neo4j前要先安装 java jdk11及以上版本,并配置环境变量。
然后在环境变量新建名为 NEO4J_HOME 的变量,将解压地址填入。
再在环境变量path中加入 %NEO4J_HOME%\bin
在window下打开命令行,并输入 neo4j.bat console 便可启动
打开浏览器,输入http://127.0.0.1:7474/browser/,界面如下图所示:
3.neo4j语句
3.1 创建节点
创建人物节点
CREATE (n:Person {name:'John'}) RETURN n
创建地区节点
CREATE (n:Location {city:'Miami', state:'FL'})
CREATE (n:Location {city:'Boston', state:'MA'})
CREATE (n:Location {city:'Lynn', state:'MA'})
CREATE (n:Location {city:'Portland', state:'ME'})
CREATE (n:Location {city:'San Francisco', state:'CA'})
创建关系
MATCH (a:Person {name:'Liz'}),
(b:Person {name:'Mike'})
MERGE (a)-[:FRIENDS]->(b)
查询下所有在Boston出生的人物
MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b
4.创建知识图谱
这个项目地址为:QASystemOnMedicalGraph
首先,在项目跟目录下,运行
python build_graph.py
运行介绍之后,打开浏览器进入网址:http://localhost:7474/browser/,可以看到我们导入的数据的知识图谱,如下:
5.启动问答测试
运行 以下命令:
python kbqa_test.py
运行结果如下图所示:
6.代码目录介绍data:存放数据
| - - img:存放readme里的图片。
| - - model:存放训练好的tfidf模型和意图识别模型。
| - - build_graph.py:构建图,详见task03。
| - - entity_extractor.py:抽取问句中的实体和识别意图,详见task04。
| - - search_answer.py:根据不同的实体和意图构造cypher查询语句,查询图数据库并返回答案。