当前位置: 首页 » 网站破解 » 知识图谱构建_知识图谱构建流程图

知识图谱构建_知识图谱构建流程图

作者:hacker 时间:2022-11-23 阅读数:160人阅读

目录:

知识图谱基础(三)-schema的构建

在前面一篇文章《知识图谱基础(二)-知识表达系统》中介绍了知识图谱的基础知识表达系统,什么是entity,什么是relation,什么是domain,什么是type等等。本篇文章主要从应用角度来聊一聊如何构建schema以及shcema构建中需要考虑的问题。以下所讲的schema构建主要是基于common sense进行构建的,弱关系图谱构建会在应用中讲到。

简单来说,一个知识图谱的schema就是相当于一个领域内的数据模型,包含了这个领域里面有意义的概念类型以及这些类型的属性。任何一个域的schema主要由类型(type)和属性(property)来表达。图1是plantdata内的创投schema,主要是为了发掘一级市场的投资和融资构建的schema。该schema主要是去定义需求,哪些数据对创投有用,才往上构建,例如:人物都有身高 体重,但是这些数据对创投来说意义不大,在schema中就不用构建了。关注创投的人会关注这些基金与人物投资了哪些公司,投资的公司所属行业,投资的公司属于哪一类企业,在该schema中就需要详细构建。

1.如何构建域(domain)

域(domain)的概念是凌驾于所有类型之上,对于域的定义应该尽量的抽象,不应该具体,同时域与域之间应尽量做到相互独立,不交叉。例如,省份就不应该是一个域的概念,在思考是否应该把一个概念当做域时,需要考虑到该概念是否能够继续向上抽象,例如:省份;城市;国家;县等等,他们同属于地理位置域。在明确域的概念时,应该定义好域的边界,这样比较容易区分不同域之间的区域划分。

2.如何确定一个域的类型(type)

这里需要产品经理去思考,构建这个schema的核心需求是什么,到底需要解决用户什么问题。为了满足这些核心需求,我们需要创造出哪些概念?

举个例子,在汽车领域,用户主要关心什么问题,例如:汽车的品牌、车系、发动机。

在NBA领域,用户主要关心球队、所属联盟、教练、球员等等。

针对不同的需求,需要在域下面构建不同的类型来满足用户的需求。

3.如何确定属性(property)

思考的角度如下:

1.以用户需求为出发点

2.以数据统计为证据

比如在构建完足球领域中的球队类型后,该类型集合了所有的球队实体,站在用户角度触发,用户会关注球队的哪些关系?

图2是我简单的针对足球领域构建的一个图谱,上面包含了梅西(球队的球员), 埃内斯托·巴尔韦德 (球队的教练),西甲(球队的所属联赛),其中梅西、西甲、埃内斯托.巴尔韦德又分属于不同的类型:足球球员,足球联赛,足球教练,这些所有的类型构成了足球域。

从上图的common sense配合图查询和自然语言处理技术已经可以支持基础的问答了,例如,梅西是哪个球队的?埃内斯托巴尔韦德是哪些球员的教练?西甲有哪些球队在踢球?等等

schema的应用是产品经理需要重点考虑的内容,因为产品需求决定了schema应该怎么构建,构建的是否完备。而产品的具体应用则主导了schema的整体构建方式,如果不仔细考虑产品应用的话,最惨的情况可能构建了很久的schema会因为一个逻辑坑而彻底报废掉,由于知识图谱又是一个牵一发而动全身的工程,根据实际经验来说,如果图谱构建和应用有部分脱节,可能修改图谱schema比重新构建图谱schema的成本还要高。所以,首先确认好具体的应用场景对于一个schema构建的成功与否是至关重要的。

笔者写一套曾经用过的确认schema的流程

先将应用根据需求的强弱划分,分为基础核心需求,schema特色需求,锦上添花需求,未来扩展性需求。

基础核心需求:是经过需求分析后,构建这个schema需要完成最核心的需求,该需求优先级最高

schema特色需求:构建图谱时可能会经常遇到图谱可以实现而其他方法实现比较困难的特色需求,这类需求可能需求强度不是很高,但是由于能够实现一定的差异性,经常会有意想不到的效果。

锦上添花需求:非基础核心需求,做了更好,不做也可以接受

未来扩展性的需求:确认schema的时候要充分考虑到未来的扩展性,因为这类需求有可能会大改图谱的schema结构

在构建schema的时候,根据上述分类,需要去考虑该schema一期需要满足哪些具体的功能,将功能一一列下来,哪些功能是需要放在第二期、第三期完成的,未来的扩展性需求需要在构建的哪一块区域留下可扩展的内容。

常用的方法可以使用excel去列出一、二、三期所需要的功能点。

列出上述的功能点后,针对每一个功能点在后面备注好该功能的构建要点(注:这个非常重要),通常需求只需要将产品需求转化成一定的查询结构即可,笔者原来用的是cypher查询语法。以图2为例,我要支持某个教练教了哪些球员?转化成查询语言就是(a:足球教练)-{b:教练}-(c:球队)-{d:球员}-(e:足球球员) return e。将a变成参数,输入a即可返回所有的e,即输入埃内斯托巴尔韦德,返回就是梅西。

流程如下:query:埃内斯托巴尔韦德带了哪些球员?→语义解析→转化成上述查询,将埃内斯托巴尔韦德作为参数a代入查询→返回结果→前端包装展示

注:上面在每个功能点后面备注了构建要点,当大部分功能点的构建要点都写完的时候,需要集中查看构建要点,因为如果需求本身比较大的话,不同的需求很容易造成schema的构建冲突,正如前面所讲,schema尽量要保证少出错。这个时候由于备注了构建要点,可以全局的来审视这个schema中间有没有逻辑黑洞。常出现的问题主要是在属性的设计,以及知识融合上。

拿着上述文件去找开发,确认一下哪些是比较好实现的,一般来说做到这种程度大多数需求开发都是会接的。如果开发同学足够专业的话,他会从他的视角去给你提出他的宝贵意见。通常产品经理在思考schema这一块更倾向于思考这个schema的作用,而开发同学会思考工程实现、实现效率、运行效率、计算量等问题。

大规模构建schema的时候需要认真考虑数据源的情况,由于不同公司掌握的数据不同,所应用的对策也不同。

通常笔者会将数据源分为如下几种:

1.已经清洗好的结构化数据:这部分数据一般是公司的核心数据,或者其他公司的核心数据,构建的时候应该优先考虑这类数据。这部分数据通常只需要改变数据格式即可入图谱。

2.清洗好的结构化数据,但数据残缺:这部分数据通常需要数据挖掘,知识融合。清洗难度是由残缺比例决定的。

3.无数据:没有这部分数据,但是又需要这部分数据,通常只能去选择让BD去购买数据,或者让爬虫组去专业网站爬取,例如:企业数据可以去企查查,电影的数据可以去猫眼,产业的数据可以去产业信息网等等。

假设需要构建的图谱entity数量在千万级别,开发力量不够强大的时候,慎用纯数据挖掘方案,有条件的话笔者建议直接去买结构化数据,因为可能挖掘和知识融合在经济上的成本比直接买数据要高,而且时间周期也会很长。

个人认为,大规模构建schema最难的地方就在于挖掘数据的知识融合上,举个例子:全国有10000个叫王刚的人,爬虫从A网站挖下来5000个“王刚”,从B网站挖下来7000个“王刚”,那么这5000个王刚和那7000个王刚到底是不是一个人?在没有身份证号码的情况下如何确定哪些王刚是一个人呢?常规的做法是去挖掘出“王刚”的其他信息,例如出生年月,任职信息,籍贯等等,然后通过一定的算法进行知识融合。通常,网站的数据不一定全面,即使经过知识融合后,挖掘的数据中一定会有大量的噪音,不同的需求对噪音的承受能力是不同的,构建schema的时候需要充分考虑数据出现噪音的可能性,去评价这部分需求对噪音的承受能力。

如果知识融合完成了话,大规模构建其实就是一个导数据的过程,由于图谱数据结构的关系,一般存2张表(点、边)或者使用RDFs存储,在entity数量上千万以后,图谱的查询压力会比较大,单机查询可能会直接跪掉,开发一般会采用graphX的分布式的存储,不过由于点和边的切割方式的问题,会有一定的副作用。

知识图谱概念是什么?

知识图谱的概念是:知识图谱是自顶向下(top-down)的构建方式。自顶向下指的是先为知识图谱定义好本体与数据模式,再将实体加入到知识库。

该构建方式需要利用一些现有的结构化知识库作为其基础知识库,例如 Freebase 项目就是采用这种方式,它的绝大部分数据是从维基百科中得到的。

然而目前,大多数知识图谱都采用自底向上(bottom-up)的构建方式。自底向上指的是从一些开放连接数据(也就是 “信息”)中提取出实体,选择其中置信度较高的加入到知识库,再构建实体与实体之间的联系。

知识图谱的体系架构是:

知识图谱的架构主要包括自身的逻辑结构以及体系架构。

知识图谱在逻辑结构上可分为模式层与数据层两个层次,数据层主要是由一系列的事实组成,而知识将以事实为单位进行存储。

如果用(实体1,关系,实体2)、(实体、属性,属性值)这样的三元组来表达事实,可选择图数据库作为存储介质,例如开源的 Neo4j、Twitter 的 FlockDB、JanusGraph 等。

模式层构建在数据层之上,主要是通过本体库来规范数据层的一系列事实表达。本体是结构化知识库的概念模板,通过本体库而形成的知识库不仅层次结构较强,并且冗余程度较小。

大规模知识库的构建与应用需要多种智能信息处理技术的支持。通过知识抽取技术,可以从一些公开的半结构化、非结构化的数据中提取出实体、关系、属性等知识要素。通过知识融合,可消除实体、关系、属性等指称项与事实对象之间的歧义,形成高质量的知识库。

知识推理则是在已有的知识库基础上进一步挖掘隐含的知识,从而丰富、扩展知识库。分布式的知识表示形成的综合向量对知识库的构建、推理、融合以及应用均具有重要的意义。

技术 | 知识图谱构建关键技术点梳理

本文主要内容整理自知识图谱两篇代表性综述:

1. 徐增林,盛泳潘,贺丽荣,王雅芳. 知识图谱技术综述[J]. 电子科技大学学报(4期):589-606.

2. 刘峤, 李杨, 段宏, et al. 知识图谱构建技术综述  [J]. 计算机研究与发展, 2016(3):582-600,共19页.

文章从知识图谱的定义和技术架构出发,对构建知识图谱涉及的关键技术进行了自底向上的全面解析。本文是对涉及技术点的罗列,后续会针对单个技术点一一梳理。

1.1 所解决的问题 

如何从半结构化和无结构数据中抽取实体、关系以及实体属性等结构化信息。

1.2 涉及的关键技术 

1.2.1 实体抽取 Entity Extraction

也称命名实体识别(Named Entity Recognition, NER),指从文本数据集中自动识别出命名实体。

1.2.2 关系抽取 Relation Extraction

指从相关语料中提取出实体之间的关联关系,通过关系将实体(概念)联系起来。

1.2.3 属性抽取 Attribute Extraction

指从不同信息源中采集特定实体的属性信息,例如抽取某个公众人物的昵称、生日、国籍、教育背景等信息。

2.1 所解决的问题 

将现实世界中的各类知识表达成计算机可存储和计算的结构。

2.2 涉及的关键技术 

传统的知识表示方法主要是以RDF(Resource Description Framework资源描述框架)三元组SPO(subject,property,object)来符号性描述实体之间的关系,近年来,以深度学习为代表的表示学习技术也取得了重要的进展。

3.1 所解决的问题

信息抽取结果中可能包含大量的冗余和错误信息,数据之间的关系也是扁平化的,缺乏层次性和逻辑性,通过知识融合,可以消除概念的歧义,剔除冗余和错误概念,确保知识质量。

3.2 关键技术

3.2.1 实体链接 Entity Linking

指对于从文本中抽取得到的实体对象,将其链接到知识库中对应的正确实体对象的操作。主要涉及两方面:

▪ 实体消歧Entity Disambiguation

用于解决同名实体产生歧义问题的技术。例如“李娜”(指称项)可以对应于作为歌手的李娜这个实体,也可以对应于作为网球运动员的李娜这个实体。

▪ 共指消解Entity Resolution

也称实体对齐(object alignment)、实体匹配(entity matching)、实体同义(entity synonyms)等,用于解决多个指称项对应于同一实体对象的问题。例如在一篇新闻稿中,“Barack Obama”,“president Obama”,“the president”等指称项可能指向的都是“奥巴马”这同一个实体。

3.2.2 知识合并

指从第三方知识库产品或已有结构化数据获取知识输入。

4.1 所解决的问题

信息抽取和知识融合可以得到一系列基本的事实表达。但事实不等于知识,要想最终获得结构化、网络化的知识体系,还需要经历知识加工的过程。

4.2 涉及的关键技术

4.2.1 本体构建 Ontology Extraction

本体(ontology)是对概念进行建模的规范,是描述客观世界的抽象模型,以形式化方式对概念及其之间的联系给出明确定义。

4.2.2 知识推理 Knowledge Inference

指从知识库中已有的实体关系数据出发,经过计算机推理,建立实体间的新关联,从而拓展和丰富知识网络。

4.2.3 质量评估 Quality Evaluation

对知识的可信度进行量化,通过舍弃置信度较低的知识,保障知识库的质量。

5.1 所解决的问题

知识图谱的内容需要与时俱进,其构建过程是一个不断迭代更新的过程。主要包括概念层的更新和数据层的更新。

▪ 数据层更新: 主要是新增或更新实体、关系和属性值等。

▪ 模式层更新: 指新增数据后获得了新的模式,需要自动将新的模式添加到知识库的模式层中。

知识图谱是如何实现自动化构建?

通过自然语言处理,从专业领域的自然语言数据和结构化数据中抽取出实体和关系,构建三层知识图谱。

知识图谱可以用python构建吗?

知识图谱可以用python构建吗?

答案当然是可以的!!!

那么如何使用python构建

什么是知识图谱

从Google搜索,到聊天机器人、金融风控、物联网场景、智能医疗、自适应教育、推荐系统,无一不跟知识图谱相关。它在技术领域的热度也在逐年上升。

互联网的终极形态是万物的互联,而搜索的终极目标是对万物的直接搜索。传统搜索引擎依靠网页之间的超链接实现网页的搜索,而语义搜索是直接对事物进行搜索,如人物、机构、地点等。这些事物可能来自文本、图片、视频、音频、IoT设备等各种信息资源。而知识图谱和语义技术提供了关于这些事物的分类、属性和关系的描述,使得搜索引擎可以直接对事物进行索引和搜索。

知识图谱是由Google公司在2012年提出来的一个新的概念。从学术的角度,我们可以对知识图谱给一个这样的定义:“知识图谱本质上是语义网络(Semantic Network)的知识库”。但这有点抽象,所以换个角度,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图(Multi-relational Graph)。

那什么叫多关系图呢? 学过数据结构的都应该知道什么是图(Graph)。图是由节点(Vertex)和边(Edge)来构成,但这些图通常只包含一种类型的节点和边。但相反,多关系图一般包含多种类型的节点和多种类型的边。

本项目利用pandas将excel中数据抽取,以三元组形式加载到neo4j数据库中构建相关知识图谱。

运行环境

基于Neo4j能够很容易构建知识图谱,除了用neo4j自带的cypher,也支持Python包py2neo创建节点和关系从而构建知识图谱。本项目是基于发票信息,将发票数据中结构化数据抽象成三元组,分别创建节点和关系从而构建成知识图谱。

具体包依赖可以参考文件requirements.txt

neo4j-driver==1.6.2numpy==1.15.3pandas==0.23.4parso==0.3.1pickleshare==0.7.5pluggy==0.8.0prompt-toolkit==1.0.15py==1.7.0py2neo==3Pygments==2.2.0pytest==3.9.3python-dateutil==2.7.5wcwidth==0.1.7wincertstore==0.2xlrd==1.1.0

将所需依赖安装到pyton中:pip install -r requirements.txt

Pandas抽取excel数据

python中pandas非常适用于数据分析与处理,可以将excel文件转换成dataframe格式,这种格式类似于Spark中的Dataframe结构,可以用类sql的形式对数据进行处理。

Excel数据结构如下

通过函数data_extraction和函数relation_extrantion分别抽取构建知识图谱所需要的节点数据以及联系数据,构建三元组。

数据提取主要采用pandas将excel数据转换成dataframe类型

invoice_neo4j.py

建立知识图谱所需节点和关系数据

DataToNeo4jClass.py

具体代码请移步到GitHub上下载

详细内容请到github下载,项目名neo4j-python-pandas-py2neo-v3

更多Python知识,请关注:Python自学网!!

  • 评论列表
  •  
    发布于 2022-11-19 05:38:26  回复
  • 的关键技术 4.2.1 本体构建 Ontology Extraction 本体(ontology)是对概念进行建模的规范,是描述客观世界的抽象模型,以形式化方式对概念及其之间的联系给出明确定义。 4.2.2 知
  •  
    发布于 2022-11-19 02:21:48  回复
  • 是否完备。而产品的具体应用则主导了schema的整体构建方式,如果不仔细考虑产品应用的话,最惨的情况可能构建了很久的schema会因为一个逻辑坑而彻底报废掉,由于知识图谱又是一个牵一发而动全身的工程,根据实际经验来说,如果

发表评论: