知识图谱与自然语言处理可以说是紧密结合,两者相辅相成。从一开始的Google搜索,到现在的机器人聊天、大数据风控、证券投资、智能医疗、推荐系统等应用,无一不与知识图谱息息相关。
依赖机器学习和深度学习算法训练的模型,更多是通过数据统计,从关联和概率的角度出发,试图描述世界背后的 “真理”,但是离真正的 “人工智能” 还很遥远,而“知识图谱”更像是能像人一样分析和推理的机器智能。
本文以通俗易懂的方式来讲解知识图谱相关的知识,并通过金融风控案例详细讲述如何从零开始搭建知识图谱,以及过程当中需要经历的步骤和每个阶段需要考虑的问题。
知识图谱(Knowledge Graph)是由 Google 公司在 2012 年提出来的一个新的名词,也叫语义网络。从学术的角度,可以给知识图谱这样的定义:“知识图谱本质上是语义网络的知识库”。但这有点抽象,换个角度来说,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图。
所以说知识图谱,本质上,是一种揭示实体之间关系的语义网络。
为了更好的理解知识图谱,首先我们要理解信息和知识的区别。
简单的说,就是如上图所示,信息是一个个独立的孤点,而知识就是在信息的基础上形成连接。总的来说,知识图谱就是由一条条知识组成,建立实体之间的联系,每条知识表示为一个SPO(Subject-Predicate-Object)三元组。
再从不同的视角去理解知识图谱的概念。
知识图谱技术已经成为AI领域重要的分支,虽然起步晚,但经过过去几年的快速发展,已经成为各行各业中比较核心的工具之一。只要数据之间有互联,而且有这方面的分析需求,知识图谱就可以成为有效工具。
而且现在很多数据是互相连接的,如果想分析这些链接的价值,知识图谱可以是一种有效的工具。随着万物互联时代的到来,链接中所包含的信息必然会发挥更大的价值,这也是为什么知识图谱在最近几年发展这么快的主要原因。
目前,学术界还没有给知识图谱一个统一的定义。在谷歌发布的文档中有明确的描述,知识图谱是一种用图模型来描述知识和建模世界万物之间关联关系的技术方法。
具体地说,知识图谱是一个比较通用的语义知识的形式化描述框架,它用节点表示语义符号,用边表示语义之间的关系。
在知识图谱里,我们通常用“实体”来表达图里的节点,用“关系”来表达图里的“边”。实体指的是现实世界中的事物,比如人、地名、概念、药物、公司等,关系则用来表达不同实体之间的某种联系,比如人“居住在”深圳、李明是王海的“老板”、张朵的“手机号码”是138X...。
现实世界中的很多场景非常适合用知识图谱来表达。 比如一个社交网络图谱里,我们既可以有“人”的实体,也可以包含“公司”实体。人和人之间的关系可以是“朋友”,也可以是“同事”关系。人和公司之间的关系可以是“现任职”或者“曾任职”的关系。 类似的,一个风控知识图谱可以包含“电话”、“公司”的实体,电话和电话之间的关系可以是“通话”关系。
接下来具体解释组成知识图谱的三要素,包括:实体、关系和属性。
在现实世界中,实体和关系也会拥有各自的属性,比如人可以有“姓名”和“年龄”。当一个知识图谱拥有属性时,我们可以用属性图(Property Graph)来表示。
上图是一个简单的属性图。
这种属性图的表达很贴近现实生活中的场景,也可以很好地描述业务中所包含的逻辑。除了属性图,知识图谱也可以用RDF来表示,它是由很多的三元组(Triples)来组成。RDF在设计上的主要特点是易于发布和分享数据,但不支持实体或关系拥有属性,如果非要加上属性,则在设计上需要做一些修改。目前来看,RDF主要还是用于学术的场景,在工业界我们更多的还是采用图数据库(比如用来存储属性图)的方式。
知识图谱应用的前提是已经构建好了知识图谱,也可以把它认为成一个知识库。这也是为什么它可以用来回答一些搜索相关问题的原因,比如在百度搜索引擎里输入“周杰伦妻子是谁”,我们直接可以得到答案“昆凌”。这是因为我们在系统层面上已经创建好了一个包含“周杰伦”和“昆凌”的实体以及他俩之间关系的知识库。所以,当我们执行搜索的时候,就可以通过关键词提取("周杰伦", "昆凌", "妻子")以及知识库上的匹配可以直接获得最终的答案。这种搜索方式跟传统的搜索引擎是不一样的。后者返回的是网页,而不是最终的答案,多了一层用户自己筛选并过滤信息的过程。
知识图谱的架构主要包括自身的逻辑结构以及体系架构。
知识图谱在逻辑结构上可分为模式层与数据层两个层次,数据层主要是由一系列的事实组成,而知识将以事实为单位进行存储。如果用(实体1,关系,实体2)、(实体、属性,属性值)这样的三元组来表达事实,可选择图数据库作为存储介质,例如开源的 Neo4j、Twitter 的 FlockDB、JanusGraph 等。模式层构建在数据层之上,主要是通过本体库来规范数据层的一系列事实表达。本体是结构化知识库的概念模板,通过本体库而形成的知识库不仅层次结构较强,并且冗余程度较小。
知识图谱的体系架构是指其构建模式的结构,如下图所示:
知识图谱的构建是后续应用的基础,而且构建的前提是需要把数据从不同的数据源中抽取出来。对于垂直领域的知识图谱来说,它们的数据源主要来自两种渠道:一种是业务本身的数据,这部分数据通常包含在公司内的数据库表并以结构化的方式存储;另一种是网络上公开抓取的数据,这些数据通常是以网页的形式存储的非结构化的数据。
前者一般只需要简单预处理即可以作为后续AI系统的输入,但后者一般需要借助于自然语言处理等技术来提取出结构化信息。比如在上面的搜索例子里,周杰伦和昆凌的关系就可以从非结构化数据中提炼出来,比如百度百科等数据源。
信息抽取的难点在于处理非结构化数据。在构建类似的图谱过程当中,主要涉及以下几个方面的自然语言处理技术:
大规模知识库的构建与应用需要多种自然语言处理技术的支持。通过知识抽取技术,可以从一些公开的半结构化、非结构化的数据中提取出实体、关系、属性等知识要素。通过知识融合,可消除实体、关系、属性等指称项与事实对象之间的歧义,形成高质量的知识库。知识推理则是在已有的知识库基础上进一步挖掘隐含的知识,从而丰富、扩展知识库。分布式的知识表示形成的综合向量对知识库的构建、推理、融合以及应用均具有重要的意义。
知识抽取:
知识抽取主要是面向开放的链接数据,通过自动化的技术抽取出可用的知识单元,知识单元主要包括实体(概念的外延)、关系以及属性3个知识要素,并以此为基础,形成一系列高质量的事实表达,为上层模式层的构建奠定基础。知识抽取有三个主要工作:
知识表示:
近年来,以深度学习为代表的表示学习技术取得了重要的进展,可以将实体的语义信息表示为稠密低维实值向量,进而在低维空间中高效计算实体、关系及其之间的复杂语义关联,对知识库的构建、推理、融合以及应用均具有重要的意义。
知识融合:
由于知识图谱中的知识来源广泛,存在知识质量良莠不齐、来自不同数据源的知识重复、知识间的关联不够明确等问题,所以必须要进行知识的融合。知识融合是高层次的知识组织,使来自不同知识源的知识在同一框架规范下进行异构数据整合、消歧、加工、推理验证、更新等步骤,达到数据、信息、方法、经验以及人的思想的融合,形成高质量的知识库。
其中,知识更新是一个重要的部分。人类的认知能力、知识储备以及业务需求都会随时间而不断递增。因此,知识图谱的内容也需要与时俱进,不论是通用知识图谱,还是行业知识图谱,它们都需要不断地迭代更新,扩展现有的知识,增加新的知识。
首先,我们还是要定一个具体的问题,这样整个设计才有一个明确的目的性。在本章,我们主要以金融风控为案例来讲述知识图谱的构建过程。
一个完整的知识图谱的构建包含以下几个步骤:
下面我们就按照这个流程来讲一下每个步骤所需要做的事情以及需要思考的问题。
金融归根揭底要解决的是风控的问题,包括个人贷款、风险定价、保险、证券投资。在P2P网贷环境下,最核心的问题是风控,也就是怎么去评估一个借款人的风险。在线上的环境下,欺诈风险尤其为严重,并且很多这种风险隐藏在复杂的关系网络之中,而知识图谱正好是为这类问题所设计的。
在这个过程中核心其实是图谱的设计,因为一旦图谱设计好,它就成为我们后续的“大脑”,设计好与不好直接影响对未来的应用。这就类似于,我们搭建数据库表一样,一旦设计不合理就会产生大量的问题。设计好一个知识图谱很大程度上取决于对业务的理解以及对未来业务的展望。
目前需要解决的问题是如何通过技术手段去判定一个人申请人的欺诈风险
如何判断一个人欺诈风险,传统方法可以根据个人特征:年龄、单位、工资,但是仅仅关注一个点,而现在通过知识图谱,可以根据关系特征:周围朋友、电话号码等等,比如,朋友是否有失信记录或者不同人用相同手机号码登记,这就把我们查询的范围从一个点扩大到一个面。
什么时候需要知识图谱?在进入下一个话题的讨论之前,要明确的一点是,对于自身的业务问题到底需不需要知识图谱系统的支持。因为在很多的实际场景,即使对关系的分析有一定的需求,实际上也可以利用传统数据库来完成分析的。所以为了避免使用知识图谱而选择知识图谱,以下给出了几点总结。
下一步就是要确定数据源以及做必要的数据预处理。针对于数据源,我们需要考虑以下几点:
在这里需要说明的一点是,并不是所有跟反欺诈相关的数据都必须要进入知识图谱,对于这部分的一些决策原则在接下来的部分会有比较详细的介绍。
对于反欺诈,有几个数据源是我们很容易想得到的,包括用户的基本信息、行为数据、运营商数据、电商数据、黑名单、网络上的公开信息等等。假设我们已经有了一个数据源的列表清单,则下一步就要看哪些数据需要进一步的处理,比如对于非结构化数据我们或多或少都需要用到跟自然语言处理相关的技术。 用户填写的基本信息基本上会存储在业务表里,除了个别字段需要进一步处理,很多字段则直接可以用于建模或者添加到知识图谱系统里。对于行为数据来说,我们则需要通过一些简单的处理,并从中提取有效的信息比如“用户在某个页面停留时长”等等。 对于网络上公开的网页数据,则需要一些信息抽取相关的技术。
举个例子,对于用户的基本信息,我们很可能需要如下的操作。一方面,用户信息比如姓名、年龄、学历等字段可以直接从结构化数据库中提取并使用。但另一方面,对于填写的公司名来说,我们有可能需要做进一步的处理。比如部分用户填写“北京贪心科技有限公司”,另外一部分用户填写“北京望京贪心科技有限公司”,其实指向的都是同一家公司。所以,这时候我们需要做公司名的对齐,用到的技术细节可以参考前面讲到的实体对齐技术。
知识图谱的设计是一门艺术,不仅要对业务有很深的理解,也需要对未来业务可能的变化有一定预估,从而设计出最贴近现状并且性能高效的系统。
在知识图谱设计的问题上,我们肯定会面临以下几个常见的问题:
基于这些常见的问题,我们从以往的设计经验中抽象出了一系列的设计原则。这些设计原则就类似于传统数据库设计中的范式,来引导相关人员设计出更合理的知识图谱系统,同时保证系统的高效性。
以上是从以往经验中总结出来的,并不一定完全准确,但至少能反应我们在设计知识图谱时避免的坑。下面,就围绕每一个点给大家展开说明。
业务原则:一切从业务逻辑出发,也就是说通过观察知识图谱设计也很容易推测其背后业务逻辑。而且设计时也要想好未来业务的变化。
分析原则:知识图谱中任何实体都是为了关系分析而服务,如果实体对分析网络结构没有帮助,则可以设计成属性甚至不要放在知识图谱中。
冗余原则:知识图谱设计中,避免把超级节点放入到知识图谱中,这会导致系统性能急剧下降,并且避免存放任何信息。
效率原则:知识图谱尽量轻便,只存储关键信息,剩下的可以存储在传统数据库中。
利用以上的原则,我们就可以对金融反欺诈领域设计图谱了。最终,一个精简的图谱如下图所示。当然,实际应用中的图谱要比这个复杂得多!
知识图谱主要有两种存储方式:一种是基于RDF的存储;另一种是基于图数据库的存储。它们之间的区别如下图所示。RDF一个重要的设计原则是数据的易发布以及共享,图数据库则把重点放在了高效的图查询和搜索上。其次,RDF以三元组的方式来存储数据而且不包含属性信息,但图数据库一般以属性图为基本的表示形式,所以实体和关系可以包含属性,这就意味着更容易表达现实的业务场景。
根据最新的统计,图数据库仍然是增长最快的存储系统。相反,关系型数据库的增长基本保持在一个稳定的水平。同时,也列出了常用的图数据库系统以及他们最新使用情况的排名。 其中Neo4j系统目前仍是使用率最高的图数据库,它拥有活跃的社区,而且系统本身的查询效率高,但唯一的不足就是不支持准分布式。相反,OrientDB 和 JanusGraph(原Titan)支持分布式,但这些系统相对较新,社区不如Neo4j活跃,这也就意味着使用过程当中不可避免地会遇到一些刺手的问题。如果选择使用RDF的存储系统,Jena或许一个比较不错的选择。
构建好知识图谱之后,接下来就要使用它来解决具体的问题。对于金融风控知识图谱来说,首要任务就是挖掘关系网络中隐藏的欺诈风险。从算法的角度来讲,有两种不同的场景:一种是基于规则的;另一种是基于概率的。前者依赖于专家的经验,后者依赖于数据驱动。
鉴于目前AI技术的现状,基于规则的方法论还是在垂直领域的应用中占据主导地位,但随着数据量的增加以及方法论的提升,基于概率的模型也将会逐步带来更大的价值。
首先,我们来看几个基于规则的应用,分别是不一致性验证、基于规则的特征提取、基于模式的判断。
不一致性验证:
为了判断关系网络中存在的风险,一种简单的方法就是做不一致性验证,也就是通过一些规则去找出潜在的矛盾点。这些规则是以人为的方式提前定义好的,所以在设计规则这个事情上需要一些业务的知识。比如在下面的这个图中,李明和李飞两个人都注明了同样的公司电话,但实际上从数据库中判断这俩人其实在不同的公司上班,这就是一个矛盾点。 类似的规则其实可以有很多,不在这里一一列出。
基于规则提取特征:
我们也可以基于规则从知识图谱中提取一些特征,而且这些特征一般基于深度的搜索比如2度,3度甚至更高维度。比如我们可以问一个这样的问题:“借款人与这两者什么关系?”从图中我们很容易观察到借款人是李飞的父亲,而李明是李飞的朋友。等这些特征被提取之后,一般可以作为风险模型的输入。在此还是想说明一点,如果特征并不涉及深度的关系,其实传统的关系型数据库则足以满足需求。
基于模式的判断:
这种方法比较适用于找出团体欺诈,它的核心在于通过一些模式来找到有可能存在风险的团体或者子图(sub-graph),然后对这部分子图做进一步的分析。 这种模式有很多种,包括:多点共享信息、三角关系、强连通图、团、弱连通图等等。在这里举几个简单的例子。 比如在下图中,三个实体共享了很多其他的信息,我们可以看做是一个团体,有欺诈嫌疑,并对其做进一步的分析。
再比如,我们也可以从知识图谱中找出强连通图,并把它标记出来,然后做进一步风险分析。强连通图意味着每一个节点都可以通过某种路径达到其他的点,也就说明这些节点之间有很强的关系。
除了基于规则的方法,也可以使用概率统计的方法,比如社区挖掘、标签传播、聚类等。
社区挖掘算法的目的在于从图中找出一些社区。对于社区,可以有多种定义,但直观上可以理解为社区内节点之间关系的密度要明显大于社区之间的关系密度。下面的图表示社区发现之后的结果,图中总共标记了三个不同的社区。一旦我们得到这些社区之后,就可以做进一步的风险分析。
由于社区挖掘是基于概率的方法论,好处在于不需要人为地去定义规则,特别是对于一个庞大的关系网络来说,定义规则这事情本身是一件很复杂的事情。
标签传播算法的核心思想在于节点之间信息的传递。这就类似于,跟优秀的人在一起自己也会逐渐地变优秀是一个道理。因为通过这种关系会不断地吸取高质量的信息,最后使得自己也会不知不觉中变得更加优秀。具体细节不在这里做更多解释。
相比规则的方法论,基于概率的方法的缺点在于:需要足够多的数据。如果数据量很少,而且整个图谱比较稀疏,基于规则的方法可以成为我们的首选。尤其是对于金融领域来说,数据标签会比较少,这也是为什么基于规则的方法论还是更普遍地应用在金融领域中的主要原因。
以上所有的分析都是基于静态的关系图谱。所谓的静态关系图谱,意味着我们不考虑图谱结构本身随时间的变化,只是聚焦在当前知识图谱结构上。然而,我们也知道图谱的结构是随时间变化的,而且这些变化本身也可以跟风险有所关联。
在下面的图中,我们给出了一个知识图谱T时刻和T+1时刻的结构,我们很容易看出在这两个时刻中间,图谱结构(或者部分结构)发生了很明显的变化,这其实暗示着潜在的风险。
知识图谱是一个充满挑战而且非常有趣的领域。只要有正确的实际应用场景,对于知识图谱所能发挥的价值是值得期待的。在不久的将来,知识图谱技术会普及到各个领域当中。
而且知识图谱是一个比较新的工具,它的主要作用还是在于分析关系,尤其是深度的关系。所以在业务上,首先要确保它的必要性,其实很多问题可以用非知识图谱的方式来解决。
知识图谱领域一个最重要的作用是知识的推理。 而且知识的推理是走向强人工智能的必经之路。
最后,需要强调的是,知识图谱工程本身还是以业务为重心,以数据为中心。
相关资料已上传,关注文末链接即可获取全部内容。
本文是从零开始学NLP系列文章第十六篇,希望小伙伴们多多支持,互相交流。
参考:
贪心学院nlp
终于有人把知识图谱讲明白了
nlp-知识图谱简介
什么是知识图谱?
最详细的知识图谱的技术与应用