1. 引言
最早接触知识图谱是在一篇分析人工智能的文章,文章提出一个很有意思的观点:“在感知层面,人工智能进步很大,在更高级的认知层面,我们现在了解的仍然很少。” 我对这句话的粗浅理解是,人工智能在学习数据的内在表示(无监督学习),或者对数据的输出结果判别方面表现出了强大的能力,甚至在计算机视觉、语音识别、机器翻译等方面接近或超过人类的表现水平,但这些都还停留在对数据内容的归纳和感知层面,对于需要复杂背景知识和前后上下文的认知和推理层面了解仍然不够,例如我有一堆数据,我想让机器自己学习和推理出正确的知识,以及知识和知识的联系。当然知识图谱也知识在认知计算领域走出了一步,远未达到人们对认知的期望。
具体到知识图谱,简单理解就是一个知识库,我们能利用这个知识库,给定你要查询的内容,然后到知识库中去进行关联分析和推理,试图让机器了解你的意图,反馈和你查询相关内容的更多关联信息。举一个简单例子,我们用所有的菜谱构建知识图谱,然后问“夏天西红柿怎么做汤”,知识图谱会查询“夏天”、“‘西红柿”和“汤”在所有菜谱中的直接和间接关系,进而推荐给你几个最匹配的菜谱。就我的总结,知识图谱有两大类主要应用:a) 搜索和问答类型的场景;b)自然语言理解类的场景。典型的应用场景如下:
那知识图谱是怎么表示的呢?大多数知识图谱用RDF(Resource Description Framework)表示,RDF表征了实体和实体的关系,这种关系有两种:一种是属性关系,即一个实体是另一个实体的属性;另一种是外部关系,表明两个实体之间存在外部关联。。RDF形式上表示为SPO(Subject Predicate Object)三元组,所以实体通过关系链接成无向的网络。例如:
2. 知识图谱的架构体系
可以用知名的知识图谱平台PlantData为例,介绍知识图谱的架构体系:
从图中我们可以看出知识图谱的体系分成4个过程:数据采集、知识抽取、知识链接和融合、知识的应用。
首先说数据采集,构建知识图谱是以大量的数据为基础的,需要进行大规模的数据采集,采集的数据来源一般是:网络上的公开数据、学术领域的已整理的开放数据、商业领域的共享和合作数据,这些数据可能是结构化的、半结构化的或者非结构化的,数据采集器要适应不同类型的数据。
知识抽取是对数据进行粗加工,将数据提取成实体-关系三元组,根据数据所在的问题领域,抽取方法分成开放支持抽取和专有领域知识抽取。
知识链接和融合,由于表征知识的实体-关系三元组抽取自不同来源的数据,可能不同的实体可以进一步融合成新的实体,实现在抽象层面的融合;根据融合之后的新实体,三元组集合可以进一步学习和推理,将表达相同或相似含义的不同关系合并成相同关系,检测相同实体对之间的关系冲突等。
知识图谱构建完成之后,形成了一个无向图网络,可以运用一些图论方法进行网络关联分析,将其用于文档、检索以及智能决策等领域。例如,阿里的知识图谱以商品、标准产品、 标准品牌、 标准条码、标准分类为核心, 利用实体识别、实体链指和语义分析技术,整合关联了例如舆情、百科、国家行业标准等9大类一级本体,包含了百亿级别的三元组,形成了巨大的知识网,然后将商品知识图谱广泛地应用于搜索、前端导购、平台治理、智能问答、品牌商运营等核心、创新业务。
3. 知识图谱的构建
知识图谱的构建有两大类方法:如果知识领域比较贴近开放领域,可以先从网络上找一个开放知识图谱,然后以此为基础进行扩充;如果知识领域只某个专有行业的,例如信息安全领域,则开发知识图谱图谱中可直接使用的知识表示相对较少,需要花更多的精力构建专业的知识图谱,一个典型的工具是Deepdive允许通过机器学习和人工参与的方式不断迭代提升知识图谱。
不管构建哪一类的知识图谱,都要经历:数据收集、信息抽取、链接和融合数据、数据可视化以及分析等过程。目前中国的知识图谱从业者们建立了一个非常好的开放知识图谱共享网站:OpenKG.CN,网址是:http://www.openkg.cn/,网站的主要内容如下:
其中,“数据”栏目里给出了开源知识图谱或者用于构建知识图谱的专业数据集。“工具”栏目里给出了几十种用于自然语言处理、知识抽取、知识存储、知识表示、知识链接、知识推理、知识查询、对话系统等用于构建知识图谱和应用知识图谱的工具。“成员”里列出了参与的科研机构和知识图谱从业企业单位。
我们可以利用OpenKG.CN里提供的数据集和工具帮助我们构建知识图谱。数据集可以帮助我们建立一个知识图谱的初始版本,即从里面获得初始的知识表示:SPO三元组,然后根据我们收集的真实业务数据再进行知识抽取和知识推理。构建知识图谱的前提是收集数据,收集的数据越全面,则可供提取的知识表示越丰富,知识图谱的用处越大。
3.1 数据收集
收集数据的方法包括:
a) 收集通用的百科知识,包括百度百科、维基百科等;
b)收集自然语言处理或者类似OpenKG.CN这类网站提供的公开数据集,例如自然语言处理的语料库、同义词近义词库,OpenKG.CN提供的疾病、菜谱、人物、商品、音乐、企业年报、突发事件、脑科学、中文地理、中医药等领域的数据集;
c) 业务领域的数据,从业者所在的企业或者机构所能获取的问题领域的数据。
以上数据的规模较大,需要一个大数据平台来支撑数据的收集、存储和查询,例如利用Hadoop系统或者单独的非关系数据库(Redis、Mongodb、Hbase和postgresql等数据库)进行存储。
3.2 知识抽取(生成SPO三元组)
收集数据之后需要对数据进行处理,这里面最有价值的首先是文本数据,因此要用到自然语言处理,基本的过程是:语言分词、词性标注、命名实体识别、句法分析,更高级写的应用还包括语义依存分析。对于构建知识库而言,自然语言处理的目的是获取命名实体,再根据命名实体和句法分析抽取知识三元组SPO。自然语言处理有两个强大的工具NLTK和Standford NLP,由于Standford NLP提供了开放信息抽取OpenIE功能用于提取三元组SPO,所以使用Standford NLP更贴合知识图谱构建任务,比较麻烦的一点是Standford NLP需要的计算资源和内存较大(推荐内存4GB),启动时间较长,分析效率低于NLTK,不过支持文件列表的输入方式,实现一次多文件输入得到多个文件的输出结果,总体效率还好。当然研究者也开发和共享了更多的知识抽取工具,例如OpenKG.CN里除了Standford NLP还提供了Reverb: 开放三元组抽取、SOFIE: 抽取链接本体及本体间关系、OLLIE:开放三元组知识抽取等工具。
3.2.1 DeepDive