计算智能:目前机器的计算智能已经远远超过人类水平。
感知智能:感知智能也基本达到(或超过)了人类水平。语音和图像相关的智能被称为感知智能,感知智能只需要识别客体信号就行,比如目标检测只要检测到画面中有某个物体,做的其实就是信号匹配的工作。
认知智能:认知智能只有人类六岁儿童的水平。认知智能则需要会推理、规划、联想、创作。
在人工智能领域,大家公认的是自然语言处理(NLP)比计算机视觉(CV)更难,一个明显的证据就是目前成熟的 CV 应用(人脸识别、目标检测、语义分割、AI安防、自动驾驶等)非常多,而且这方面的创业公司也非常多,著名 AI 独角兽公司的有 CV 四小龙(旷视、商汤、依图、云从);而在 NLP 领域却鲜有独角兽公司出头,且也仅有机器翻译这一 NLP 应用较为成熟。
伴随着计算机算力的大幅提升、数据的爆炸式增长,深度学习的研究也迅速发展,感知智能的水平突飞猛进,一度达到里程碑的水平;然而强大的计算能力和巨量的数据并不能对认知智能的提升有多大帮助,无怪乎大家都大呼#自然语言处理太难了#[1]。
NLP 的难点一个在于语义理解,机器很难理解一句话的真正含义,语句中多一个字、少一个字、变换一个字的顺序、同一句话由不同的人说出的,所表达的意思都可能天差地别;
另一个难点在于知识的推理、联想等需要额外的外界知识作为基础。
说了这么多,和本文所要说的知识图谱又有什么关系呢?业界的基本共识是,知识图谱是感知智能通往认知智能的基石,因为它能解决语义理解问题,也能解决知识推理问题。由此可知,知识图谱是多么具有研究的必要!
知识图谱的发展最早可追溯到二十世纪六十年,如下图所示。它的诞生过程经历过语义网、描述逻辑和专家系统等阶段[2]。
知识图谱(Knowledge Graph)一概念最早是由谷歌公司于 2012 年提出的,他们的目的是想借助知识图谱技术来优化搜索引擎的搜索效果。
没有知识图谱时,搜索服务提供商只能提供信息的检索,也就是当你输入一句话到搜索引擎,它就会返回那些包含了你所输入语句中的关键词的网页链接,你如果想了解你所搜索问题的答案,那么你只能一个一个网页的点进去,然后快速浏览该网页去寻找你要的答案;
搜索引擎无法直接告诉你想要的结果,一是因为它可能无法理解你搜索语句的具体语义,二是搜索引擎里面存储的只有离散的信息,而没有结构化的知识。为了保证让你点击更少的网页来找到你想要的答案,谷歌开发了一个叫 pagerank 的算法来计算网页的重要性,在返回搜索结果的时候,按照计算的网页重要性进行排序给你展示,由于众所周知的原因,我这里用百度搜索来展示一下普通的检索结果是怎样的。
如上图所示,搜索引擎先将我所输入的查询语句进行了分词处理,然后在全网检索网页,看哪些网页里包含了我所查询语句中的关键词,然后按照网页权重得分给我展示了一些网页,如果我想知道所有刘德华主演的电影,那么我需要把所有网页都点进去看,然后自己一一进行统计记录,之后我才能知道刘德华主演的电影都有哪些。
当有了知识图谱的时候,检索结果是这样的:
如上图所示我根本不需要点进某些网页去自己统计记录,搜索引擎直接告诉了我答案,而且将这些电影分门别类按类型、地区、年代给我展示了刘德华在什么年份主演了什么类型的什么电影,以及主演了多少部电影,返回结果具有更精准、结构化的特点。
上述例子是信息检索,如果我们想搜索知识,那么情况会怎样呢?下面我们以搜索“姚明的女儿的国籍是哪里”为例。
显然也是对网页的检索、召回,虽然我们可以直接通过网页标题就能获知答案,但是还是不那么直接。接下来是知识图谱搜索出来的结果:
回答结果一目了然,除了直接告诉你想要的结果之外,它还告诉了你姚明女儿的姓名、出生日期等其他信息。知识图谱为什么能直接告诉你结果呢?因为它理解了你的查询请求,而且它具有结构化的语义知识库,这个知识库里正好有你需要的知识,另外它还具有推理能力。比如上例中,搜索引擎准确的理解了你想问的是“姚明女儿”这个人的“国籍”是哪里,所以它先找到了姚明女儿是“姚沁蕾”这个事实,然后找到姚沁蕾的“国籍”属性值是“美国”,于是它返回了搜索结果--美国,这就是一个完整的推理过程。
知识图谱除了应用于搜索引擎做语义检索以外,还有非常多的应用场景,如智能问答客服、金融风控、人物关系图谱、决策辅助、智能制造等。贝壳借助知识图谱应用于他们的贝壳找房系统中,以提升对用户的搜索意图的理解、提升向用户推荐相关房子的智能推荐能力以及搭建智能问答系统来辅助经纪人回答用户有关房子的问答[3]。阿里巴巴将知识图谱作为阿里小蜜机器人的知识库的一部分,阿里小蜜是一个基于大数据和人工智能技术的智能化、体系化客服系统,它支持向用户提供 KBQA 和 EBQA等智能问答服务[4]。美团将知识图谱技术应用于他们的 APP 中,他们使用基于知识图谱的问答(KBQA)来完成和用户之间的搜索交互任务,比如帮助用户找到合适的餐饮门店、商超、购买电影票以及预定酒店服务[5]。
知识图谱并不是突然由某一个人或机构发明的,它经历过早期本体时代、语义网时代的发展、积累,最后才发展衍生出知识图谱这一概念,所以研究知识图谱的流派也非常多,因此对它的定义也是多种多样。
但是最起码的共识定义是:知识图谱的本质是一个语义网络,它旨在描述客观世界的概念实体事件以及及其之间的关系,并且对它们进行语义建模;知识图谱是一种基于图的数据结构,由节点和边构成,每个节点表示一个“实体”,每条边为实体之间的“关系”。早期的语义网络受限于我们的处理方法以及技术水平,它更多是依赖于专家的经验规则去构建,在规模方面受限于特定领域的数据;而目前的的知识图谱所说的语义网络就不需要那么依赖于专家的经验去构建了,它使用成熟的 NLP 技术去自动挖掘“实体”以及“关系”用于构建语义网络。
如上图所描述的[6],在知识图谱中,各个节点(现实世界中的事件、数据、信息)不再是孤立的,它们是通过特定的关系(边)链接在一起,从而形成结构化的知识表示,这种图数据结构很容易被人们理解接受,并且也很容易被计算机识别和处理。
知识图谱的核心其实就是三元组,三元组是由实体(Entity)、属性(Attribute)和关系(Relation)组成的,形式为<实体,关系,实体>或<实体,属性,属性值>;而这样的三元组正好可以构建成图数据格式,如上图所示的示意图,可以拆分成三元组的形式如下:
<丽江,属于,云南>
<大理,属于,云南>
<洱海,属于,大理>
<小秦,住在,丽江>
<小明,住在,大理> <小明,朋友,小秦>
同理,上述三元组也可以组成一个图结构。在上述三元组中我们只看到了<实体,关系,实体>类型的三元组,其实在上文中的知识问答搜索例子中我们已经见识过<实体,属性,属性值>类型的三元组了,比如<姚沁蕾,国籍,美国>,其中姚沁蕾表示一个实体“人”,“国籍”就是实体“人”的一个属性,而“美国”正是该属性的“属性值”。
基于已有三元组可以推导出新的关系三元组,这对构建知识图谱非常重要,同时这也是知识图谱具有推理能力的基础。比如由两个三元组<翅膀 part-of 鸟>,<麻雀 kind-of 鸟>,可以推导出<翅膀 part-of 麻雀>这样一个事实。
开放领域(通用)知识图谱面向通用领域,面向的用户是全部的互联网用户,实际上是谷歌或者百度这样的搜索公司在构建,它的构建是以常识性的知识为主,包括结构化的百科知识,它更强调知识的广度,而对深度不做更多要求。
垂直领域(行业)知识图谱的定位是面向特定的领域或者行业,比如医疗知识图谱、工业知识图谱等,他的数据来源是特定的行业语料,它强调知识的深度,而不是广度。
然而通用知识图谱和行业知识图谱之间并不是相互独立的,他们是具有互补的关系,一方面前者会吸纳后者的知识来扩充它的知识面,增加知识广度;另一方面,构建行业知识图谱也可以从通用知识图谱里吸纳一些常识性的知识作为补充,以形成更完整的行业知识图谱。
看到这里,你可能觉得“二十一世纪就是知识图谱的世纪”啊!它太重要了,它是人工智能能够真正走向认知智能的基石,虽然有些是夸张的,但是显然各行各业都在谈知识图谱,各大小公司都要建知识图谱。那么如何构建属于自己的知识图谱呢?
本节简单介绍一下构建知识图谱的一般流程和所需知识栈,如下图(均来自网络)所示:
构建一个完整的知识图谱一般会经历如下步骤:
收集数据,确认拥有什么可使用的数据,去收集,然后对数据做最基本的处理;
知识定义,结合所拥有的数据以及知识图谱的用途,定义知识模式,定义实体类型和实体之间的关系;
获取知识,前面收集的数据仅仅是一些零散的信息,距离它们成为能用的知识还很远,因此需要使用命名实体识别、关系抽取、属性抽取等技术去获取知识;
知识融合,由于知识的来源可能多种多样,当获取了知识之后,我们有必要将知识做融合,比如我们获取了有关“成龙”、“Jack Chen” 等相关知识,众所周知 Jack Chen 就是成龙,成龙就是 Jack Chen,那么有必要将这两者进行实体对齐等操作;
知识存储,当有了知识后,我们需要将其存储,存储的目的是方便对知识的查询和推理应用,目前流行的是使用图数据库,比如 neo4j,来存储,当然你也可以不使用图数据库,完全看你的喜欢;
知识赋能应用,有了知识图谱,那么就可以利用其去支持一些应用了,一些常见的应用场景我们在上文也介绍了。
参考资料
[1]自然语言理解难在哪儿? - 知乎
[2]http://m.elecfans.com/article/739264.html
[3]回顾·知识图谱在贝壳找房的从0到1实践
[4]知识结构化在阿里小蜜中的应用
[5]基于知识图谱的问答在美团智能交互场景中的应用和演进
[6]知识图谱是什么? | 人人都是产品经理