定义
知识图谱可以分割为知识和图谱。知识包含实体和实体之间的联系,
图谱就是用图的方式把实体和它们之间的关系用图表示出来。
例如微信,我和我的朋友以好友的关系而关联起来,而我的朋友又有他们的朋友圈,进而把整个关系群以一个网络的方式关联起来。
用途
-
智能问答
如果拥有了一个知识图谱,就可以构建一个智能问答系统
例如如果输入是:我感冒了应该看什么科
系统通过查找感冒和科室的关系,就可以找到科室应该为呼吸内科
系统就可以回答:呼吸内科
-
反欺诈
在风控领域,数据一般以人为单位,人跟人存在一种关系,人跟消费记录,行为记录,网上浏览记录形成了另外的一些关系,那么风控团队就获得了一张非常大的网络图
当需要对某人进行风控分析,可以使用Graph embedding对每个人的图进行向量化,然后放入机器学习的模型进行训练和预测,从而得出欺诈的预判
-
例如借款人张三说李四是他的父亲,王五是他的朋友;而同时王五说李四是他的父亲,张三是他的朋友。那么通过分析知识图谱,并进行推理,朋友的父亲不可能一样,引发不一致。此时就可以检测出,借款人有异常
-
智能搜索
例如Google,百度搜索
知识推理
存储
对于知识图谱,需要存储所有信息只有实体和实体之间的关系
一般来说市面上有非常多的图数据库引擎可以使用
例如最热门的neo4j
图数据库与传统关系性数据库
大家可能有疑问,对于实体和实体之间的关系,是可以通过关系性数据库来存储的。
为什么需要图数据库?
按我的理解
- -关系型数据库更多的关注实体和实体的属性,对关系的描述并不大看重,虽然有外键
- 在关系行数据库定义实体,表的数量会随着实体的数量而线性递增,如果单从实体和关系的角度分析,模型过于复杂
- 关系型数据库难以分布式存储,难以承受大数据
- 图数据库模型非常简单,就是实体和关系
- 图数据可以对这种简单的模型使用图算法更好的存储和检索数据
- 图数据非常容易做到分布式,适合大数据的存储
融合(构建)
需要构建知识图谱,首先需要数据的导入
一般来说数据源都是非结构化的,例如网络上爬取下来的网页,音频文件,视频文件,图片
需要使用到的技术有NLP,图片信息抽取,音频转文本等技术
此篇只关注NLP技术,其他技术,只是在信息提取的细节不一样,对于融合到知识图谱的过程,是一致的。
NLP信息融合
NLP目前市面上有非常多的第三方库可以使用,在避免重复造轮,我们在应用上,应该更多的使用市面上的库,而不是自己写,对于NLP的理论知识,后面会有一篇博文分享。
对于此篇,我们关注NLP库给我们提供了什么,我们可以基于这些库,可以做什么。
pyltp的功能
库的使用如下:
https://pyltp.readthedocs.io/zh_CN/latest/api.html
- 分句
- 分词
- 词性标注
- 命名实体识别
- 依存句法分析
- 语义角色标注
OK!有了上面对pyltp的感性认识,相信大家如果收到一份文本,通过使用以上的API,就可以轻而易举地分析出文本的信息。
关键词提取
例如我们要构建一个医疗问答系统,我们需要的信息如下:
- 病名
- 药名
- 科室
- 症状
- 可以吃的食物
- 不可以吃的食物
那么我们拿到一份非结构化的医疗报告,我们改怎么把非结构化的报告转化为知识图谱呢?
- 定义关键词
- 对文本进行NLP提取
- 匹配关键词,确定实体和关系
- 存入图数据库
例如病名,由于病名的数量是确定的,此时我们可以从某个医学的语料库找到大部分的病名,并定义为关键词
例如食物,一般来说食物前的动词时吃,食等动词,通过找到动宾结构,匹配动词,就可以确定谓语是食物
例如科室,通过命名实体识别找到所有的实体,并匹配是否包含关键词 ‘科’ ,就可以找到科室的名字
。。。。
功能
到目前为止,我们有了知识图谱,那么基于它,可以做什么呢?
成为其他机器学习输入参数
有了实体,有了关系,有了图,有了属性。
此时可以通过提取实体在图中的特征,并转化为vector特征,就可以对实体进行任何机器学习模型的输入参数
并进行更深度的数据挖掘。
Graph2vec
通过分析图的特征,并转化为vector的方法有很多,以下跟大家介绍Deepwalk
Deepwalk
- 每个节点都有一个向量w
- 对u进行随机游走t次
- 那么就可以得到对u节点的1个序列(u,w1,w2, w3...wt)
- 通过skip-gram得出向量
知识抽取
有了知识图谱在图数据库中
我们就可以各实体之间的关系。
例如我问系统:苏格拉底死了没有?