1. 前言
知识图谱(knowledge graph),是下一代搜索引擎、问答系统等智能应用的基础设施,目前出现的产品有:百度“知心”、搜狗“知立方”等。本篇将介绍知识图谱基础知识,及其在自然语言处理方面(主要是问答系统)的应用。
2. 知识图谱概念
知识图谱,是一种基于有向图(directed graph)的数据结构,由节点(points)及有向边(directed edges)组成,图中的每个节点称为实体(Entity),边代表实体间的逻辑关系(Relation)。
举一个例子,这是一个简单地描述旅游景点的知识图谱:
现在来解释为什么“知识图谱是下一代搜索引擎、问答系统等智能应用的基础设施”,如果把智能系统看成一个大脑,那么知识图谱就是大脑中的一个知识库,它使得机器能够从“关系”的角度去分析、思考问题。以上图为例,从知识图谱中可以获取“泰山的海拔高度为1545米”、“衡山和恒山发音相同”等简单知识。
3. 知识图谱的表示
知识图谱可以使用三元组(entity-1,relation,entity-2)来表示,每一条记录描述一个事实,例如:(五岳,五岳之一,泰山)表示“泰山是五岳之一”这样一个事实。需要注意的是,如果relation 是确定的,那么entity-1 与entity-2 的位置不能够颠倒的,因为一个三元组描述一条有向边(事实);实体不一定得是现实生活中的一个具体事物,也可以是事物的一个属性值,此时关系就是该属性。
我们用三元组来存储知识图谱,这时还需要考虑一个问题,那就是实体识别(Entity Recognition)与实体消歧(Entity Disambiguation)。例如,实体“苹果”有可能是指水果苹果,也可能是指iphone。这时,我们对知识图谱需要做一些处理,修改一下搜索策略。
在建立知识图谱过程中,若发现歧义,则再增添对应上级节点,在筛选“苹果”一词时使用上级节点来消歧。这里再次强调知识图谱仅是基础设施 。后面会通过几个例子说明知识图谱的应用价值;再介绍知识推理(Knowledge Reasoning)技术,即怎样通过与用户互动教会智能系统完善知识图谱。
4. 知识图谱的应用
传统搜索引擎只是简单地根据用户输入的关键词去筛选目标网页,然后给出一堆网页链接。知识图谱的应用,除了给出相应的网页链接外,还会尝试提供一些更加智能化的答案。例如,用户在必应搜索输入“taj mahal”将得到如下结果:
这里提供泰姬陵的近义词、旅游信息、地理位置、古代世界七大奇迹等,从而更好地发掘用户意图, 而不像传统搜索引擎那样死板,需要用户自己一条一条去筛选信息, 这样知识图谱技术就具有很大的商业价值了。
又例如,我直接在百度搜索输入“乒乓球”, 得到以下结果(其实我只是想搜索一下“张继科”,但是一时间忘了他的名字):
同时,知识图谱的应用能够使得搜索引擎获得一定的推理能力。举一个例子,在百度搜索输入“梁启超的儿子的妻子”,传统搜索引擎只是简单地匹配网页,很难真正地理解用户意图,更别说回答这个问题了。然而知识图谱却可以令问题变得简单起来,我们先从知识库中获取梁启超的儿子是梁思成,然后再获取梁思成的妻子是林微因。
这样就能增强搜索引擎与用户间的互动,逐步变成一个智能问答系统。
5. 知识推理技术
这里再次强调知识图谱仅是基础设施,因为它真的很简单,也没有什么高大上的技术,我们仅仅只是想将知识用这样一个形式存起来,以便由简单的知识学习出更高深的知识。举一个例子,知识图谱中仅存有如下信息:
那么智能问答系统是无法回答类如“康熙与乾隆之间是什么关系?”知识推理类的问题的,这时可以用过简单地加入人工规则:“父亲+父亲→祖父”来更新知识图谱,或者直接从用户互动中学习规则,当然用户互动时就需要上统计知识了,不能说有网友回答“国籍相同关系”那么所有的祖父与孙子都是“国籍相同关系”。
接下来我们来看一个更复杂的例子,在百度搜索引擎中输入“孕妇可以吃荔枝吗?”得到如下结果:
这时智能问答系统可以返回“59%的网友认为能吃,28%的网友认为不能吃,13%的网友认为不能吃”。若用户继续问“不能吃的理由是什么?”,那就返回“不能吃”的网友回答。下面通过这个例子来思考统计机器学习技术在知识推理中的应用。
我们分析一下,这些“网友回答”有些来自“宝宝树”,有些来自“有问必答网”,有些来自“育儿网”,我们可以利用爬虫去爬这些网站的问题及其回答,然后对问题做聚类,先构建如下知识图谱:
具体问题与回答之间的逻辑关系边一开始留空,我们再对语义边上分类技术,把空余的边填补完整,当然也可能误分类,例如百度例子中的第一个回答,“慎吃”被归为“能吃”。最后再对这些边做统计,就可以回答类似问题,利用语料库做知识推理,学习知识库里没有的知识,完善知识图谱。