http://www.sohu.com/a/192557627_99934777
摘要:
这篇是PPT的下半部分,更加偏重于实战中关键技术的难点剖析。
行业知识图谱关键技术
上篇我们讲行业知识图谱生命周期划分为6个阶段,分为知识建模,知识获取,知识融合,知识存储,知识计算和知识应用。接下来我们详细描述每个阶段具体是如何完成的,有没有现成可用的工具、工具的优缺点如何、没有现成工具的话如何实现;同时,我们会以金融证券领域的创投知识图谱为例来进行实战描述。
知识建模
即为行业的知识和数据进行抽象建模。上篇描述了行业数据的特点和企业面临的数据利用挑战,也提到了使用行业知识图谱来克服这些难题。具体而言,首先使用知识图谱相关技术对行业知识和数据进行建模:
-
以实体为主体目标,实现对不同来源的数据进行映射与合并。(实体抽取与合并)
-
利用属性来表示不同数据源中针对实体的描述,形成对实体的全方位描述。(属性映射与归并)
-
利用关系来描述各类抽象建模成实体的数据之间的关联关系,从而支持关联分析。(关系抽取)
-
通过实体链接技术,实现围绕实体的多种类型数据的关联存储。(实体链接)
-
使用事件机制描述客观世界中动态发展,体现事件与实体间的关联;并利用时序描述事件的发展状况。(动态事件描述)
了解语义网或知识工程的朋友应该都使用过或者听过Protégé,它是由斯坦福大学开发的一个本体编辑器软件,基于RDF(S),OWL等语义网规范,并且还提供图形化界面以及在线版本(WebProtégé)。
但是Protégé在使用过程中存在以下不足之处:
-
基本只提供单人编辑,在线版本的并发功能支持也不完善;并发编辑时需要通过文件共享来实现;
-
完全依靠人工,难以实现与知识图谱构建(半)自动化过程的交互。
-
不支持复杂事件及时态的建模;
-
因为基于单机构建,因此对大数据量支持不够,会出现内存溢出;因此,可以说Protégé适用于原型快速构建的场景,在生产环境下使用会遇到各种问题。
通过我们在行业中的经验积累,结合以上几个问题,总结得出构建一个良好的知识建模工具应该具备如下一些特性:
一)在线并发协作编辑
支持在线并发协作编辑,能够将编辑的知识实时保存,当其它用户对当前用户正在编辑的内容有更新时,系统自动提示加载最新版本,因此能够有效地解决并发知识编辑冲突。
这是我们所构建的知识建模的在线编辑界面
这是上下位关系定义界面:
这是属性定义编辑界面:
二)自动导入、集成
同时它提供导入、集成功能,能够把现有的知识通过导入功能进行集成,以存储为桥梁,可以对自动算法的结果进行编辑。
三)支持复杂动态事件建模
在对动态事件数据的建模时,使用时态信息存储实现事件时间的描述。
该图为融资事件的建模示例
四)大数据量支持
支持大数据量的知识图谱编辑:编辑是基于底层的知识图谱存储的,每次编辑时加载到前端的仅为当前相关的数据,因此不会造成内存溢出等问题。
知识获取
针对不同种类的数据,我们利用不同的技术进行获取。利用D2R从结构化数据库中获取知识,利用包装器Wrapper从半结构化数据中获取知识,利用文本信息抽取技术从非结构化文本中获取知识。
一)D2R
我们先看下目前主流的D2R工具—D2RQ,D2RQ是一个将关系数据库转换为虚拟的RDF数据库的平台,主要包括三个模块
1. D2R Server,HTTP Server,提供对 RDF数据的查询访问接口,以供上层的 RDF 浏览器、SPARQL查询客户端以及传统的 HTML 浏览器调用;
2. D2RQ Engine:利用一个可定制的 D2RQ Mapping 文件将关系型数据库中的数据换成 RDF 格式;
3. D2RQ Mapping Language:定义将关系型数据转换成 RDF 格式的 Mapping 规则。
D2RQ的主体架构如下:
从其功能描述我们可知D2RQ是直接将关系型数据库转换成RDF的,因此难以与知识建模结果对应,同样也难以同其他知识进行融合,在新数据的增量映射以及海量数据映射时会出现问题。
因此我们的解决方案是将D2R映射与知识建模结合,在数据模式的基础上进行映射;例如从数据库中的“企业信息表”中把记录映射成概念“企业”下的实体。
同时通过设置合并条件,把D2R的结果与知识图中的已有知识进行融合;例如对于企业,设置“如果企业名称相同则进行合并”的规则。
在实现数据的增量映射功能时,通过特定的关键词及规则来设置数据更新的标记;例如,对于企业,设置“若成立时间为上次更新时间之后的企业为新的企业”。
最终经过D2R映射的数据直接存储成为知识图谱中的知识,因而其数据量仅取决于存储的支撑量,也就不存在海量数据映射会导致的性能问题。
下面是D2R操作过程演示的视频,从创投新闻数据库中进行实体、实体属性和关系知识的抽取。
二)包装器
半结构化行业数据源解析一般采用包装器的方式,由于这些行业的数据源网站大多通过模板生成。包装器可以自动进行学习,但为了保证准确度,我们通常会使用人机结合的方法。
在行业数据源解析实践中,由于网站的高度可变性,因此目前尚没有统一的包装器工具,所以在实际应用中,通常针对不同结构的数据配置相应的包装器,完成数据的解析。
下图为我们研发使用的包装器配置工具,一般分为5个步骤,前两步较为直观,首先设置输入源,可以是网页的URL、网页的源码文件等,然后进行预处理,主要是过滤CSS、Java等与信息抽取无关的噪声数据;第三步,配置抽取的目标,指定抽取的是知识图谱中的何种元素;第四步中我们为抽取的目标设置了一系列的抽取规则,包括网页标签规则、前置规则、后置规则,正则表达式等;最后是对抽取结果的过滤等后处理操作
下面我们来看几个从半结构化数据中抽取专利知识的包装器的示例
示例1:抽取专利,设置抽取的目标为专利实体名称及专利的属性,然后依据网页的特征设置相应的规则。
示例2:另一个专利信息抽取的例子
三)文本信息抽取
行业知识图谱构建过程中文本信息抽取的任务非常多,这里主要讨论实体识别、概念抽取、关系抽取以及事件抽取。
信息抽取的方法主要有CloseIE和OpenIE两类,两者的对比状况如下:
OpenIE 的典型代表工具有 ReVerb、TextRunner。由于OpenIE 工具准确率比较低,会增加知识融合的难度,因此在行业知识图谱构建中实用性不高。通常被用于做第一轮的信息抽取探索,从它的结果中发现新的关系,然后在此基础上应用其它的信息抽取方法。
CloseIE的典型工具为DeepDive。
Deepdive是由斯坦福大学InfoLab实验室开发的一个开源知识抽取系统。它通过弱监督学习,从非结构化的文本中抽取结构化的关系数据,核心关键点是能够在更短的时间内提供更高质量的数据。
其基于联合推理的算法,让用户只需要关心特征本身,要求用户思考特征而不是算法,而其他机器学习系统则要求开发者思考聚类算法、分类算法的使用等;同时DeepDive允许用户使用简单的规则来影响学习过程以提升结果的质量,也会根据用户反馈来提高预测的准确度;DeepDive使用机器学习算法训练系统来减少各种形式的噪音和不确定性,并为每一个决断进行复杂的可能性计算。
下图为Deep Dive进行关系抽取的基本过程,首先指定抽取任务;其次进行中文分词、命名实体识别;再进行实体定位;生成候选实体关系对;接着使用DDlib为候选词和候选关系自动生成特征;加载标注的数据源;然后基于规则的远程监督自动标注;模型训练;最终输出结果。
总结一下:DeepDive主要针对关系抽取,在指定的关系抽取中效果比较理想,在实体确定后可以很好地进行关系抽取。同时也支持中文关系抽取,仅需要引入中文相关的基础处理工具即可。不足之处在于未提供专门的针对概念、实体和事件抽取的支持,同时需要大量的标注语料支持,并通过人工设置标注规则。
对于文本信息抽取的方法,目前还没有统一的实现各类信息抽取的现成工具。 我们采用的是把现有的工具进行集成,依据抽取任务使用不同的工具,包括
-
NLP分词、命名实体识别工具:NLPIR、LTP、FudanNLP、Stanford NLP……
-
关系抽取工具:DeepDive
而对于行业抽取任务,需要针对性的方法来完成,通常采用的做法是基于已有的结构化知识进行远程监督学习。
接下来介绍事件抽取
事件抽取可以分为预定义事件抽取和开放域事件抽取,行业知识图谱中主要为预定义事件抽取。 我们通常会采用采用模式匹配方法,包括三个步骤:
-
准备事件触发词表
-
候选事件抽取:寻找含有触发词的句子
-
事件元素识别:根据事件模版抽取相应的元素
下图为创投知识图谱融资事件抽取的示例,事件元素识别的过程与包装器模板配置过程基本相似
知识抽取实践过程中,我们采用的是一种称为“多策略学习”的方法;“多策略”体现在多数据源、多目标类型、多抽取方法,总体原则是:利用不同数据源之间的冗余信息,使用较易抽取的信息(结构化数据库)来辅助抽取那些不易抽取的信息。
下图是多策略学习方法的整体过程示意图:
以下为我们的多策略学习方法示例
知识融合
知识图谱中的知识融合是一件非常复杂的工作,包括数据模式层(概念、概念的上下位关系、概念的属性)的融合与数据层的融合。行业知识图谱的数据模式通常采用自顶向下和自底向上结合的方式,因此基本都经过人工的校验,保证了可靠性;所以知识融合的关键任务在数据层的融合。对于数据层的融合,为保证数据的质量,通常在知识抽取环节中进行控制,减少知识融合过程的难度。
下面直接介绍我们的实践方案
数据模式层融合方法:
行业知识图谱的数据模式层通常是由专家人工构建或从可靠的结构化数据中映射得到的,通常在映射时会通过设置融合的规则来确保数据的统一。
数据层的融合:
实体合并,在构建行业知识图谱时,实体优先从结构化的数据中获取;
对于结构化的数据,通常有对实体进行唯一标识的主键,因此在进行知识抽取时即可设定实体合并的依据;
从非结构化数据中抽取的实体,同样使用设置合并条件的规则来完成实体的合并;例如:企业合并可以通过企业名称直接合并;企业高管合并可以采用人名相同+同一企业进行合并,因为同一家企业高管中同名的概率是极低的。
实体属性与关系的合并,具有时态特性的属性,我们可以使用新的数据覆盖老的数据;其次可依据数据源的可靠性进行选取,通常结构化数据源中的质量较高。
以人物实体合并为例来看下数据层融合的方法过程:
知识存储
针对知识存储,其主要理念就是“使用不同的存储来实现不同类型数据的存储和使用”。
知识图谱是基于图的数据结构,其存储方式主要有两种方式:RDF存储和 图数据库(Graph Database)。Wikipedia对两者的解释分别如下:
A triplestore or RDF store is a purpose-built database for the storage and retrieval of triples through semantic queries. A triple is a data entity composed of subject-predicate-object. [Wikipedia]
A graph database has a more generalized structure than a triplestore, using graph structures with nodes, edges, and properties to represent and store data. [Wikipedia]
下图为db-engine中常见图数据存储的排名,里面的多个Graph DBMS我们都有介绍过。
如何选用合适的图数据存储呢?下列指标是我们重点考量的:
-
数据存储支持
-
数据操作和管理方式
-
支持的图结构
-
实体和关系表示
-
查询机制
针对主流图数据存储我们整理了如下表格,从数据存储支持、数据操作和管理方式、支持的图结构、实体和关系表示以及查询机制角度来进行全面的比较(数据可能不全是最新的)。
介绍一下Neo4j,它是当前图数据存储排名第一的图数据库,它具有支持原生图存储和处理、支持ACID事务处理的特点,同时neo4j不使用schema,因此在开始添加数据之前,你是不需要定义概念、属性和关系的,但这样带来的不足之处在于,在企业数据管理场景下如不使用 Schema则难以从整体把握数据;同时neo4j也不支持时态信息的存储,非企业版本会受到数据量、查询速度等方面的限制。
我们的大规模知识图谱存储解决方案如下:
-
基础存储
-
可按数据场景选择使用关系数据库、NoSQL数据库及内存数据库。
-
基础存储保证可扩展、高可用
-
-
数据分割
-
属性表:依据数据类型划分
-
基本类型:整数表、浮点数表、日期类型表、…
-
集合类型:List型表、Range型表、Map型表、…
-
-
大属性单独列表:例如数量超过10M的属性单独列表
-
-
缓存与索引
-
使用分布式Redis 作为缓存,按需对数据进行缓存。
-
对三元组表按需进行索引,最多情况下可建立九重索引。
-
-
善于使用现在成熟存储
-
使用ElasticSearch 实现数据的全文检索
-
结构固定型的数据可使用关系数据库或NoSQL
-
-
对于非关系型的数据尽量不入图存储,避免形成大节点
-
非关系型的数据,使用适合的数据存储机器进行存储,通过实体链接的方式实现与图谱数据的关联。
-
-
不直接在图存储中进行统计分析计算
-
对于需要进行统计分析计算的数据,需要导出到合适的存储中进行。
-
前面还提到知识图谱中的时态信息,时态信息的需求与技术一直是伴随着数据库技术的发展而产生和发展的,下图为时态数据库与其他类型数据库相比的发展趋势:
可以发现时态数据库的发展趋势远远高于与其他数据存储方式。
知识图谱中的时态信息包含事实的生成时间和某事实的有效时间段,比如融资事件的事件。
因此在知识图谱时态信息存储的实践应用中,我们使用了历史数据库,用于记录事实的有效时间,用有限的数据冗余实现数据时态信息的应用。
具体实践原则如下:
-
在基础知识图谱的基础上,构建针对时态数据处理的中间件;
-
对于特定类型的时序型数据,采用其它的存储机制进行存储。
关于知识图谱数据存储的更详细的内容,请参看之前公众号发布的详细专题文章。
知识计算
知识计算的范畴同样非常广,这里仅以图挖掘计算、基于本体的推理以及基于规则的推理三个最常用的技术进行介绍。
一)图挖掘计算
前面讲到知识图谱是一种基于图的数据结构,因此它自然会集成实现基本图算法。
列举一些我们常用的图算法:
-
图遍历:广度优先遍历、深度优先遍历
-
最短路径查询:Dijkstra(迪杰斯特拉算法)、Floyd(弗洛伊德算法)
-
路径探寻:给定两个或多个节点,发现它们之间的关联关系
-
权威节点分析:PageRank算法
-
族群发现:最大流算法
-
相似节点发现:基于节点属性、关系的相似度算法
其中权威节点分析做过社交网络分析的人应该都知道,可以用来做社交网络里的权威人物分析,我们在创投知识图谱中用来做权威投资机构的发现。
族群发现算法一般用来在社交网络中主题社区的发现,在这里我们同样可以用来识别企业知识图谱中的派系(阿里系、腾讯系)。
相似节点发现应用就更加广泛了,在企业知识图谱中可以做相似企业的发现,这里有个很重要的实际应用场景,可以利用相似企业进行精准的获客营销。
二)基于本体的推理
本体推理基本方法包括:
-
基于表运算及改进的方法:FaCT++、Racer、 Pellet Hermit等
-
基于一阶查询重写的方法(Ontology based data access,基于本体的数据访问)
-
基于产生式规则的算法(如rete):Jena 、Sesame、OWLIM等
-
基于Datalog转换的方法如KAON、RDFox等
-
回答集程序Answer set programming
这里我们介绍一个本体知识推理工具:RDFox,它的特点如下:
-
支持共享内存并行OWL 2 RL推理
-
三元组数据可以导出为Turtle文件,规则文件可以导出为RDF数据记录文件;全部数据内容可以导出为二进制文件,可完全恢复数据存储状态
-
支持Java、Python多语言APIs访问,并且 RDFox 还支持一种简单的脚本语言与系统的命令行交互
由于RDFox是完全基于内存的,所以对硬件的要求较高。
当然基于本体的知识推理应用也非常的多,比如我们在实际场景中的冲突检测。因为不管是手动构建,还是自动构建知识图谱,都会碰到这样一个问题:或者数据来源不同,或者构建的人员不同、方法不同,这就会不可避免的导致一些冲突,这些冲突自身很难直观的去发现,但是可以利用知识图谱里面的冲突检测去发现存在的有矛盾的、有冲突的知识。
下图为我们从不同渠道获取花椒直播融资金额的冲突检测示例
三)基于规则的推理
基于规则的推理是在知识图谱基础知识的基础上,专家依据行业应用的业务特征进行规则的定义,这在业务应用中是非常常见的。
介绍一下我们常用的Drools(因被JBOSS收购,现已更名为JBoss Rules),它是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现,使用了OO接口的RETE,使得商业规则有了更自然的表达,其推理的效率也比较高。
结合规则引擎工具,基于基础知识与所定义的规则,执行推理过程给出推理结果。
以下代码为我们使用drools定义的一个高风险企业规则
知识应用
关于知识应用我们主要介绍以下三个方向的关键技术:语义搜索、智能问答和可视化辅助决策。
一)语义搜索
知识图谱提出的初衷即为解决搜索的准确率问题,改进搜索质量;由于传统基于关键词的检索完全不考虑语义信息,因此传统的搜索主要面临两个难题:
-
自然语言表达的多样性
-
自然语言的歧义
对此我们的解决方案为利用实体链接技术,进行基于知识图谱的语义搜索。
先看下目前常见的两款实体链接工具
Wikipedia Miner,在应用中集成维基百科的数据。
该工具用来分析有歧义的实体的上下文和发现出现在维基百科里的概念。
另一个广泛使用的基于维基百科的语义标注系统是DBpedia Spotlight,这是一个免费的可定制的web系统,它通过DBpeida的URIs标注文本,其目标是DBpedia本体。
市面上目前现有的实体链接工具大部分都是针对百科类的知识库工作的,基本上不支持中文的处理。
在我们具体实践过程中采用了如下三种实体链接方法:
-
基于向量模型相似度计算的实体链接方法
-
基于知识图谱语义扩展的实体链接方法
-
基于propagation计算相似度的实体链接方法
实体链接的基本方法过程如下图:
该视频为基于实体连接的创投数据语义标注演示:
实体链接完成后,我们可以把它引入到基于知识图谱的语义搜索中。语义搜索是对传统搜索的一种改变,其发展的最终形态为智能问答。
最后看一个创投知识图谱中的语义搜索示例,在PlantData平台中搜索“北京小桔科技”实体,会识别出这是一个企业实体,系统会自动返回企业相关的融资状况,高管信息以及链接的新闻数据信息。
二)智能问答
智能问答是指用户以自然语言提问的形式提出信息查询需求,系统对用户查询意图分析与理解,从各种数据资源中自动查询检索出最符合用户意图的答案。
以下为基于知识图谱的自动问答系统的基本过程流程图
智能问答现在的方法主要有这么四类
1. 基于信息检索的方法
基于信息检索的方法首先利用中文分词,命名实体识别等自然语言处理工具找到问句中所涉及到的实体和关键词,然后去知识资源库中去进行检索。它的优点在于实现简单,应用面广,在大部分场景下均可得到结果。缺点在于要求答案中必须至少包含问句中的一个字或词,所以不如语义解析方法精确。改进的方法可以利用基于知识图谱的知识进行语义扩充,提高匹配率,同时基于知识图谱进行检索时的语义消岐。
2. 基于语义分析的方法
基于语义分析的方法非常符合人们的直觉,它将一个自然语言形式的问句,按照特定语言的语法规则,解析成语义表达式,在得到语义表达式之后,我们可以非常容易地将其转化为某种数据库的查询语言。最常用的方法是利用组合范畴语法(CCG),CCG的核心是词汇,首先自然语言问句的词汇被映射到语义表达式中的词汇,然后按照特定的语法规则将汇组合起来,进而得到了最终的语义表达式。我们的做法是在特定的领域里边,基于知识图谱的实体、属性、概念等进行词法解析与映射,然后基于图结构进行语法规则匹配,这就相当于是图里面的子图查询匹配问题。
3. 基于规则的专家系统方法
专家系统是一个具有大量的专门知识与经验的程序系统,它应用人工智能技术和计算机技术,根据某领域一个或多个专家提供的知识和经验,进行推理和判断,模拟人类专家的决策过程,以便解决那些需要人类专家处理的复杂问题。
在智能问答系统中,不是所有的问题都可以利用现存的知识库直接进行回答,有很多隐含知识我们需要通过已经抽取到的知识进行推理回答。因此基于知识推理的方法通常不单独使用,而是与其它的方法进行结合,增强对复杂问题回答的支持。
4. 基于深度学习的方法
近几年卷积神经网络(CNN)和循环神经网络(RNN)在NLP领域任务中表现出来的语言表示能力,越来越多的研究人员尝试深度学习的方法完成问答领域的关键任务,包括问题分类(question classification),语义匹配与答案选择(answer selection),答案自动生成(answer generation)。此外,互联网用户为了交流信息而产生的大规模诸如微博回复、社区问答对的自然标注数据,给训练深度神经网络模型提供了可靠的数据资源,并很大程度上解决自动问答研究领域的数据匮乏问题。
该方法优点是实现“端到端”的问答:把问题与答案均使用复杂的特征向量表示,使用深度学习来计算问题与答案的相似度。不足之处在于不支持复杂的查询;需要比较长的训练过程,不适用于现实应用场景中的知识更新后的实时查询。
知识图谱应该算是自动问答里面的大脑,我们在实践过程中选用的最佳方法是基于语义解析的方法加上基于信息检索的方法。
这样做的好处在于基于语义解析的方法可解释性强,并且能够方便地转换成知识图谱的查询,给出明确的答案;因此对于用户输入,首先使用基于语义解析的方法进行回答;
而基于信息检索的方法应用面广,因此当语义解析方法无法给出结果时,则使用信息检索的方法进行回答。
下面两张图是我们在创投行业应用里实践智能问答的示例,首先我们会人工配置语义解析的模板,其次对用户的输入进行分词匹配,与知识图谱里面的元素进行映射,即知识图谱通用的子图匹配模板。
三)可视化辅助决策
首先介绍两个比较常见的可视化工具D3.js和ECharts。
D3.js全称Data-Driven Documents,是一个用动态图形显示数据的Java库,一个数据可视化工具,它提供了各种简单易用的函数,大大方便了数据可视化的工作。
ECharts是一款由百度前端技术部开发的,同样基于Java的数据可视化图标库。(个人觉得这是目前百度最有价值的产品)它提供大量常用的数据可视化图表,底层基于ZRender(一个全新的轻量级canvas类库),创建了坐标系,图例,提示,工具箱等基础组件,并在此上构建出折线图(区域图)、柱状图(条状图)、散点图(气泡图)、饼图(环形图)、K线图、地图、力导向布局图以及和弦图,同时支持任意维度的堆积和多图表混合展现。
这两款都是非常优秀的可视化工具,但是目前还没有一款面向知识图谱的可视化工具,在选择知识图谱可视化的时候,需要思考以下三点问题:
-
依托的设备及环境是什么?
-
需要展现数据的什么特点?
-
数据量过大(小)时我该怎么做?
我们最终选用集成现有的可视化工具,实现知识图谱的可视化。以下是PlantData的图谱可视化基本组件,包括图谱展示、统计分析等。
这是PlantData平台在创投图谱中进行可视化应用的演示视频: