参考:http://www.datagrand.com/blog/knowledge-map.htmlhtml
1、什么是知识图谱?算法
知识图谱是由 Google 公司在 2012 年提出来的一个新的概念。从学术的角度,咱们能够对知识图谱给一个这样的定义:“知识图谱本质上是语义网络(Semantic Network)的知识库”。但这有点抽象,因此换个角度,从实际应用的角度出发其实能够简单地把知识图谱理解成多关系图(Multi-relational Graph)。数据库
二. 知识图谱的表示网络
知识图谱应用的前提是已经构建好了知识图谱,也能够把它认为是一个知识库。这也是为何它能够用来回答一些搜索相关问题的缘由,好比在 Google 搜索引擎里输入“Who is the wife of Bill Gates?”,咱们直接能够获得答案 -“Melinda Gates”。这是由于咱们在系统层面上已经建立好了一个包含“Bill Gates”和“Melinda Gates”的实体以及他俩之间关系的知识库。因此,当咱们执行搜索的时候,就能够经过关键词提取(”Bill Gates”, “Melinda Gates”, “wife”)以及知识库上的匹配能够直接得到最终的答案。这种搜索方式跟传统的搜索引擎是不同的,一个传统的搜索引擎它返回的是网页、而不是最终的答案,因此就多了一层用户本身筛选并过滤信息的过程。app
3、知识抽取数据库设计
知识图谱的构建是后续应用的基础,并且构建的前提是须要把数据从不一样的数据源中抽取出来。对于垂直领域的知识图谱来讲,它们的数据源主要来自两种渠道:一种是业务自己的数据,这部分数据一般包含在公司内的数据库表并以结构化的方式存储;另外一种是网络上公开、抓取的数据,这些数据一般是以网页的形式存在因此是非结构化的数据。分布式
前者通常只须要简单预处理便可以做为后续 AI 系统的输入,但后者通常须要借助于天然语言处理等技术来提取出结构化信息。好比在上面的搜索例子里,Bill Gates 和 Malinda Gate 的关系就能够从非结构化数据中提炼出来,好比维基百科等数据源。工具
信息抽取的难点在于处理非结构化数据。在下面的图中,咱们给出了一个实例。左边是一段非结构化的英文文本,右边是从这些文本中抽取出来的实体和关系。在构建相似的图谱过程中,主要涉及如下几个方面的天然语言处理技术:性能
a. 实体命名识别(Name Entity Recognition)学习
b. 关系抽取(Relation Extraction)
c. 实体统一(Entity Resolution)
d. 指代消解(Coreference Resolution)(c,d难度更大)
4、知识图谱的存储
知识图谱主要有两种存储方式:一种是基于 RDF 的存储;另外一种是基于图数据库的存储。它们之间的区别以下图所示。RDF 一个重要的设计原则是数据的易发布以及共享,图数据库则把重点放在了高效的图查询和搜索上。其次,RDF 以三元组的方式来存储数据并且不包含属性信息,但图数据库通常以属性图为基本的表示形式,因此实体和关系能够包含属性,这就意味着更容易表达现实的业务场景。根据最新的统计(2018 年上半年),图数据库仍然是增加最快的存储系统。相反,关系型数据库的增加基本保持在一个稳定的水平。同时,咱们也列出了经常使用的图数据库系统以及他们最新使用状况的排名。 其中 Neo4j 系统目前还是使用率最高的图数据库,它拥有活跃的社区,并且系统自己的查询效率高,但惟一的不足就是不支持准分布式。相反,OrientDB 和 JanusGraph(原 Titan)支持分布式,但这些系统相对较新,社区不如 Neo4j 活跃,这也就意味着使用过程中不可避免地会遇到一些刺手的问题。若是选择使用 RDF 的存储系统,Jena 或许一个比较不错的选择。
5、 金融知识图谱的搭建
接下来咱们看一个实际的具体案例,讲解怎么一步步搭建可落地的金融风控领域的知识图谱系统。 首先须要说明的一点是,有可能很多人认为搭建一个知识图谱系统的重点在于算法和开发。但事实并非想象中的那样,其实最重要的核心在于对业务的理解以及对知识图谱自己的设计,这就相似于对于一个业务系统,数据库表的设计尤为关键,并且这种设计绝对离不开对业务的深刻理解以及对将来业务场景变化的预估。 固然,在这里咱们先不讨论数据的重要性。一个完整的知识图谱的构建包含如下几个步骤:
1. 定义具体的业务问题
2. 数据的收集 & 预处理 实体对齐
3. 知识图谱的设计
4. 把数据存入知识图谱
5. 上层应用的开发,以及系统的评估。
6.1 定义具体的业务问题
在 P2P 网贷环境下,最核心的问题是风控,也就是怎么去评估一个借款人的风险。在线上的环境下,欺诈风险尤为为严重,并且不少这种风险隐藏在复杂的关系网络之中,并且知识图谱正好是为这类问题所设计的,因此咱们“有可能”期待它能在欺诈,这个问题上带来一些价值。在进入下一个话题的讨论以前,要明确的一点是,对于自身的业务问题到底需不须要知识图谱系统的支持。由于在不少的实际场景,即便对关系的分析有必定的需求,实际上也能够利用传统数据库来完成分析的。因此为了不使用知识图谱而选择知识图谱,以及更好的技术选型,如下给出了几点总结,供参考。
6.2 数据收集 & 预处理
下一步就是要肯定数据源以及作必要的数据预处理。针对于数据源,咱们须要考虑如下几点:1. 咱们已经有哪些数据? 2. 虽然如今没有,但有可能拿到哪些数据? 3. 其中哪部分数据能够用来下降风险? 4. 哪部分数据能够用来构建知识图谱?在这里须要说明的一点是,并非全部跟反欺诈相关的数据都必需要进入知识图谱,对于这部分的一些决策原则在接下来的部分会有比较详细的介绍。
对于反欺诈,有几个数据源是咱们很容易想获得的,包括用户的基本信息、行为数据、运营商数据、网络上的公开信息等等。假设咱们已经有了一个数据源的列表清单,则下一步就要看哪些数据须要进一步的处理,好比对于非结构化数据咱们或多或少都须要用到跟天然语言处理相关的技术。 用户填写的基本信息基本上会存储在业务表里,除了个别字段须要进一步处理,不少字段则直接能够用于建模或者添加到知识图谱系统里。对于行为数据来讲,咱们则须要经过一些简单的处理,并从中提取有效的信息好比“用户在某个页面停留时长”等等。 对于网络上公开的网页数据,则须要一些信息抽取相关的技术。
举个例子,对于用户的基本信息,咱们极可能须要以下的操做。一方面,用户信息好比姓名、年龄、学历等字段能够直接从结构化数据库中提取并使用。但另外一方面,对于填写的公司名来讲,咱们有可能须要作进一步的处理。好比部分用户填写“北京贪心科技有限公司”,另一部分用户填写“北京望京贪心科技有限公司”,其实指向的都是同一家公司。因此,这时候咱们须要作公司名的对齐,用到的技术细节能够参考前面讲到的实体对齐技术。
6.3 知识图谱的设计
图谱的设计是一门艺术,不只要对业务有很深的理解、也须要对将来业务可能的变化有必定预估,从而设计出最贴近现状而且性能高效的系统。在知识图谱设计的问题上,咱们确定会面临如下几个常见的问题:1. 须要哪些实体、关系和属性? 2. 哪些属性能够作为实体,哪些实体能够做为属性? 3. 哪些信息不须要放在知识图谱中?
基于这些常见的问题,咱们从以往的设计经验中抽象出了一系列的设计原则。这些设计原则就相似于传统数据库设计中的范式,来引导相关人员设计出更合理的知识图谱系统,同时保证系统的高效性。接下来,咱们举几个简单的例子来讲明其中的一些原则。 首先是,业务原则(Business Principle),它的含义是 “一切要从业务逻辑出发,而且经过观察知识图谱的设计也很容易推测其背后业务的逻辑,并且设计时也要想好将来业务可能的变化”。
举个例子,能够观察一下下面这个图谱,并试问本身背后的业务逻辑是什么。经过一番观察,其实也很难看出到底业务流程是什么样的。作个简单的解释,这里的实体 -“申请”意思就是 application,若是对这个领域有所了解,其实就是进件实体。在下面的图中,申请和电话实体之间的“has_phone”,“parent phone”是什么意思呢?
接下来再看一下下面的图,跟以前的区别在于咱们把申请人从原有的属性中抽取出来并设置成了一个单独的实体。在这种状况下,整个业务逻辑就变得很清晰,咱们很容易看出张三申请了两个贷款,并且张三拥有两个手机号,在申请其中一个贷款的时候他填写了父母的电话号。总而言之,一个好的设计很容易让人看到业务自己的逻辑。接下来再看一个原则叫作效率原则(Efficiency Principle)。 效率原则让知识图谱尽可能轻量化、并决定哪些数据放在知识图谱,哪些数据不须要放在知识图谱。在这里举一个简单的类比,在经典的计算机存储系统中,咱们常常会谈论到内存和硬盘,内存做为高效的访问载体,做为全部程序运行的关键。这种存储上的层次结构设计源于数据的局部性 -“locality”,也就是说常常被访问到的数据集中在某一个区块上,因此这部分数据能够放到内存中来提高访问的效率。 相似的逻辑也能够应用到知识图谱的设计上:咱们把经常使用的信息存放在知识图谱中,把那些访问频率不高,对关系分析可有可无的信息放在传统的关系型数据库当中。 效率原则的核心在于把知识图谱设计成小而轻的存储载体。
好比在下面的知识图谱中,咱们彻底能够把一些信息好比“年龄”,“家乡”放到传统的关系型数据库当中,由于这些数据对于:a. 分析关系来讲没有太多做用 b. 访问频率低,放在知识图谱上反而影响效率。
另外,从分析原则(Analytics Principle)的角度,咱们不须要把跟关系分析无关的实体放在图谱当中;从冗余原则(Redundancy Principle)的角度,有些重复性信息、高频信息能够放到传统数据库当中。
6.4 把数据存入知识图谱
存储上咱们要面临存储系统的选择,但因为咱们设计的知识图谱带有属性,图数据库能够做为首选。但至于选择哪一个图数据库也要看业务量以及对效率的要求。若是数据量特别庞大,则 Neo4j 极可能知足不了业务的需求,这时候不得不去选择支持准分布式的系统好比 OrientDB, JanusGraph 等,或者经过效率、冗余原则把信息存放在传统数据库中,从而减小知识图谱所承载的信息量。 一般来说,对于 10 亿节点如下规模的图谱来讲 Neo4j 已经足够了。
6.5 上层应用的开发
等咱们构建好知识图谱以后,接下来就要使用它来解决具体的问题。对于风控知识图谱来讲,首要任务就是挖掘关系网络中隐藏的欺诈风险。从算法的角度来说,有两种不一样的场景:一种是基于规则的;另外一种是基于几率的。鉴于目前 AI 技术的现状,基于规则的方法论仍是在垂直领域的应用中占据主导地位,但随着数据量的增长以及方法论的提高,基于几率的模型也将会逐步带来更大的价值。
6.5.1 基于规则的方法论
首先,咱们来看几个基于规则的应用,分别是不一致性验证、基于规则的特征提取、基于模式的判断。
不一致性验证
为了判断关系网络中存在的风险,一种简单的方法就是作不一致性验证,也就是经过一些规则去找出潜在的矛盾点。这些规则是以人为的方式提早定义好的,因此在设计规则这个事情上须要一些业务的知识。好比在下面的这个图中,李明和李飞两我的都注明了一样的公司电话,但实际上从数据库中判断这俩人其实在不一样的公司上班,这就是一个矛盾点。 相似的规则其实能够有不少,不在这里一一列出。
基于规则提取特征
咱们也能够基于规则从知识图谱中提取一些特征,并且这些特征通常基于深度的搜索好比 2 度,3 度甚至更高维度。好比咱们能够问一个这样的问题:“申请人二度关系里有多少个实体触碰了黑名单?”,从图中咱们很容观察到二度关系中有两个实体触碰了黑名单(黑名单由红色来标记)。等这些特征被提取以后,通常能够做为风险模型的输入。在此仍是想说明一点,若是特征并不涉及深度的关系,其实传统的关系型数据库则足以知足需求。
基于模式的判断
这种方法比较适用于找出团体欺诈,它的核心在于经过一些模式来找到有可能存在风险的团体或者子图(sub-graph),而后对这部分子图作进一步的分析。 这种模式有不少种,在这里举几个简单的例子。 好比在下图中,三个实体共享了不少其余的信息,咱们能够看作是一个团体,并对其作进一步的分析。
再好比,咱们也能够从知识图谱中找出强连通图,并把它标记出来,而后作进一步风险分析。强连通图意味着每个节点均可以经过某种路径达到其余的点,也就说明这些节点之间有很强的关系。
6.5.2 基于几率的方法
除了基于规则的方法,也可使用几率统计的方法。 好比社区挖掘、标签传播、聚类等技术都属于这个范畴。 对于这类技术,在本文里不作详细的讲解,感兴趣的读者能够参考相关文献。
社区挖掘算法的目的在于从图中找出一些社区。对于社区,咱们能够有多种定义,但直观上能够理解为社区内节点之间关系的密度要明显大于社区之间的关系密度。下面的图表示社区发现以后的结果,图中总共标记了三个不一样的社区。一旦咱们获得这些社区以后,就能够作进一步的风险分析。
因为社区挖掘是基于几率的方法论,好处在于不须要人为地去定义规则,特别是对于一个庞大的关系网络来讲,定义规则这事情自己是一件很复杂的事情。
标签传播算法的核心思想在于节点之间信息的传递。这就相似于,跟优秀的人在一块儿本身也会逐渐地变优秀是一个道理。由于经过这种关系会不断地吸收高质量的信息,最后使得本身也会不知不觉中变得更加优秀。具体细节不在这里作更多解释。
相比规则的方法论,基于几率的方法的缺点在于:须要足够多的数据。若是数据量不多,并且整个图谱比较稀疏(Sparse),基于规则的方法能够成为咱们的首选。尤为是对于金融领域来讲,数据标签会比较少,这也是为何基于规则的方法论仍是更广泛地应用在金融领域中的主要缘由。
6.5.3 基于动态网络的分析
以上全部的分析都是基于静态的关系图谱。所谓的静态关系图谱,意味着咱们不考虑图谱结构自己随时间的变化,只是聚焦在当前知识图谱结构上。然而,咱们也知道图谱的结构是随时间变化的,并且这些变化自己也能够跟风险有所关联。
在下面的图中,咱们给出了一个知识图谱 T 时刻和 T+1 时刻的结构,咱们很容易看出在这两个时刻中间,图谱结构(或者部分结构)发生了很明显的变化,这其实暗示着潜在的风险。那怎么去判断这些结构上的变化呢? 感兴趣的读者能够查阅跟“dynamic network mining”相关的文献。
7、 知识图谱在其余行业中的应用
除了金融领域,知识图谱的应用能够涉及到不少其余的行业,包括医疗、教育、证券投资、推荐等等。其实,只要有关系存在,则有知识图谱可发挥价值的地方。 在这里简单举几个垂直行业中的应用。
好比对于教育行业,咱们常常谈论个性化教育、因材施教的理念。其核心在于理解学生当前的知识体系,并且这种知识体系依赖于咱们所获取到的数据好比交互数据、评测数据、互动数据等等。为了分析学习路径以及知识结构,咱们则须要针对于一个领域的概念知识图谱,简单来说就是概念拓扑结构。在下面的图中,咱们给出了一个很是简单的概念图谱:好比为了学习逻辑回归则须要先理解线性回归;为了学习 CNN,得对神经网络有所理解等等。全部对学生的评测、互动分析都离不开概念图谱这个底层的数据。
在证券领域,咱们常常会关心好比“一个事件发生了,对哪些公司产生什么样的影响?” 好比有一个负面消息是关于公司 1 的高管,并且咱们知道公司 1 和公司 2 有种很密切的合做关系,公司 2 有个主营产品是由公司 3 提供的原料基础上作出来的。
其实有了这样的一个知识图谱,咱们很容易回答哪些公司有可能会被此次的负面事件所影响。固然,仅仅是“有可能”,具体会不会有强相关性必须由数据来验证。因此在这里,知识图谱的好处就是把咱们所须要关注的范围很快给咱们圈定。接下来的问题会更复杂一些,好比既然咱们知道公司 3 有可能被此次事件所影响,那具体影响程度有多大? 对于这个问题,光靠知识图谱是很难回答的,必需要有一个影响模型、以及须要一些历史数据才能在知识图谱中作进一步推理以及计算。
8、实践上的几点建议
首先,知识图谱是一个比较新的工具,它的主要做用仍是在于分析关系,尤为是深度的关系。因此在业务上,首先要确保它的必要性,其实不少问题能够用非知识图谱的方式来解决。
知识图谱领域一个最重要的话题是知识的推理。 并且知识的推理是走向强人工智能的必经之路。但很遗憾的,目前不少语义网络的角度讨论的推理技术(好比基于深度学习,几率统计)很难在实际的垂直应用中落地。其实目前最有效的方式仍是基于一些规则的方法论,除非咱们有很是庞大的数据集。
最后,仍是要强调一点,知识图谱工程自己仍是业务为重心,以数据为中心。不要低估业务和数据的重要性。
9、结语
知识图谱是一个既充满挑战并且很是有趣的领域。只要有正确的应用场景,对于知识图谱所能发挥的价值仍是能够期待的。我相信在将来不到 2-3 年时间里,知识图谱技术会普及到各个领域当中。