2.2 开放网络知识库构建
开放网络知识库的构建,通常包括3个部分,即知识库的构建、多源知识的融合以及知识库的更新。由于基于本体的知识描述要素主要包括概念、实例、属性和关系,本节将针对这4个要素展开论述,即如何从开放网页等数据源中识别、抽取这4个要素。这里,概念也称为类,是指对象的类型或事物的种类。实例也称为个体,是指基础的或底层的对象。属性是指概念或实例具有的属性、特征、特性、特点和参数。关系是指概念和实例之间彼此关联的可能具有的方式。
2.2.1 知识库构建
开放网络知识库的构建,就是要构建几个基本的构成要素,包括抽取概念、实例、属性和关系。从构建方式上分,可以分为手工构建和自动构建。手工构建是依靠专家知识编写一定的规则,从不同的来源收集相关的知识信息,构建知识的体系结构[22]。比较典型的例子是知网(Hownet)[23]、同义词词林[24]、概念层次网络(HNC)[25]和中文概念词典(CCD)[26]、OpenCyc[27]等。自动构建是基于知识工程、机器学习、人工智能等理论自动地从互联网上采集并抽取概念、实例、属性和关系[28,29]。比较著名的例子是Probase、Yago等。手工构建知识库,需要构建者对知识的领域有一定的了解,才能编写出合适的规则,开发过程中也需要投入大量的人力物力。相反地,自动构建的方法依靠系统自动的学习经过标注的语料来获取规则,如属性抽取规则、关系抽取规则等,一定程度上可以减少人工构建的工作量。随着网络大数据时代的到来,面对大规模网页信息中蕴含的知识,自动构建知识库的方法越来越受到广大学者和工程开发人员的重视和青睐。本节主要介绍通过自动的方式从大规模的开放网络数据构建的图形化知识库。如上文所述,自动构建的方法需要系统学习标注语料获取规则,根据系统是否具备在学习过程中扩展规则的能力,自动构建知识库的方法主要分为有监督的构建方法和半监督的构建方法两种。
有监督的构建方法是指系统通过学习训练数据,即标注网页,获取抽取规则,然后根据这些规则,提取同一类型的网页中的概念、实例、属性和关系[30]。比较著名的方法有kernel methods[31,32]。这类方法的缺点是规则缺乏普适性,由于规则是针对特定网页的,当训练网页发生变化时,需要重新进行训练来获取规则。
半监督的构建方法是系统预先定义一些规则作为种子(seed),然后通过机器学习算法,从标注语料中抽取相应的概念、实例、属性和关系。进一步地,系统根据抽取的结果,发现新的规则,再用来指导抽取相应的概念、实例、属性和关系,从而使抽取过程能够迭代地进行。这种方法又称为步步为营(bootstrapping)的方法,也是目前主流的方法。该方法的最早版本是由Brin[33]提出来的,但该版本在种子规则选择、种子规则质量评估、大规模标注网页预处理等方面具有一定的缺陷,后续出现很多对它的改进,比较著名的有华盛顿大学Etzioni领导的研究组开发的KnowItAll方法[7,8]和TextRunner方法[9]等。图2-1显示了KnowItAll的主要组件和工作流程。Bootstrapping组件用于构造抽取规则(extraction rules)和鉴别性的短语(discriminator phrases),Extractor组件构造一个由规则中关键词触发的查询传给搜索引擎,应用抽取规则抽取特定信息。Assessor组件利用搜索引擎计算抽取结果的正确性,将正确的结果插入知识库当中。注意,KnowItAll使用的Bootstrapping技术是完全自动化的,它不需要事先标注的训练语料,从而避免了对大规模语料的预处理中遇到的标注错误和预处理不当等问题,使得抽取规则更为准确。但是,KnowItAll执行起来效率较低,这是因为需要大量的搜索查询,而且由于KnowItAll的输入是规则,系统1次只能处理1条规则,运行多条规则需要串行。为了解决KnowItAll的效率问题,TextRunner[9]引入了3个组件,输入为语料样本的自监督学习器(self-supervised learner),可并行抽取的单通道抽取组件(single-pass extractor)和通过模型评估结果的冗余评估器(redundancy-based assessor)。
如前文所述,bootstrapping的方法具有识别新的规则或上下文的优势,这些新的规则和上下文又可以转而用于识别新的概念、实例、属性和关系等结果,从而极大地提高了召回率。但是,如果这些抽取结果具有歧义,就很容易产生错误,从而导致语义漂移(semantic drift)现象[34,35]。为了克服这个缺陷,很多学者从不同角度对bootstrapping算法给出改进。如卡内基梅隆大学的研究人员开发出一个新的知识抽取系统NELL(Never-Ending Language Learning)[15],微软亚洲研究院王海勋博士团队开发的概率化知识库Probase 等[20]。下面首先介绍NELL,其系统架构如图2-2所示[15]。
图2-2 NELL系统框架[15]
NELL系统包括知识库、知识整合器(knowledge integrator)和子系统组件3个部分。系统首先将外部数据资源输入到子系统组件中。经过子系统组件中4个组件:Coupled Pattern Learner(CPL)、Coupled SEAL(CSEAL)、Coupled Morphological Classifier(CMC)和Rule Learner(RL)的处理,输出候选事实(candidate facts)。知识整合器对候选事实进行过滤,生成置信度较高的结果(beliefs)。最后将候选事实和结果作为输入,输入到子系统组件中,实现系统的迭代运转。其中,CSEAL组件提供了一种半监督的学习算法用于信息抽取,称为coupled semi-supervised learning for information extraction[36],提供了用以过滤低质量的规则鉴别器,可以有效解决bootstrapping算法产生的语义漂移现象。事实上,对于语义漂移现象,单纯依靠不断构建高质量的规则还是不够的,这只是停留在句法角度(syntactic),这样高质量的规则可能是很少的[11]。所以需要从语义角度定义迭代抽取的方法,即直接建立在知识基础上的bootstrapping算法,应用知识去理解文本并获取更多的知识。相比于KnowItAll、TextRunner和NELL这些基于句法的bootstrapping方法,基于语义的bootstrapping能够量化地反映出抽取对象间的语义关联,因而能够更好地从大规模网络数据中构建语义级的知识库,也因此而成为近年研究的热点问题。
微软推出的Probase是一种基于语义抽取构建的知识库[11,37]。Probase提出的通过迭代方式进行信息抽取的特点是:每轮迭代都会聚集一些置信度高的正确的知识,用以指导下一轮迭代的信息抽取。Probase获取知识并不依赖于很多的句法规则,而是在每轮迭代中固定一些规则(具体为Hearst patterns)。以抽取概念间的isA关系为例。Probase主要通过SyntacticExtraction、SuperConcept Detection和Sub-Concept Detection这3个模块迭代地对候选句子中的概念进行isA关系的抽取。其中,SyntacticExtraction用以从一句话中发现候选super-concept和候选sub-concept。如果候选super-concept多于一个,则运行模块SuperConcept Detection用以减少super-concept的个数。然后,用Sub-Concept Detection模块过滤掉一些不太可能的sub-concept。这里,Super-Concept Detection模块和Sub-Concept Detection模块运用了概率化的手段用以排除不正确的概念。以Super-Concept Detection为例。记X={x1,x2,…,xm}为候选super-concepts集合,Y={y1,y2,…,yn}为候选sub-concepts集合。如果|X|>1,为了过滤集合X中的元素xk,需要计算似然函数P(xk|Y)。不失一般性,假定super-concept中x1和x2具有最大的似然函数,且满足P(x1|Y)≥P(x2|Y)。这两个似然函数的比值r(x1,x2)计算如下:
其中,第3个等号成立时,假设给定super-concept,且各个sub-concept是相互独立的。当r(x1,x2)大于某一事先给定的阈值时,选择super-concept为x1;否则,选择super-concept 为x2。这样就可以实现集合X中元素的过滤功能。Sub-Concept Detection的过程和上述过程类似。Probase从多达16亿的网页数据中,抽取出核心概念270万,概念间的关系2000多万,基本实现了从大规模开放网络中自动构建知识库的需求。
开放网络知识库的构建仍然面临很多问题。上述几个知识库的构建过程仍然无法解决大规模自动化抽取所面临的知识的多样化精准抽取问题、知识来源的多样化选取问题、知识的深度语义关联理解问题等。首先,在知识的多样化精准抽取方面,以概念间关系为例,上述知识库自动化抽取的概念间关系类型多以isA关系为主,缺乏对概念间其他关系的处理。其次,在知识来源的多样化选取方面,上述知识库的构建尚未将网络大数据组成之一的自媒体数据作为一个重要的知识来源。自媒体数据本身的变化快,富含短文本信息等特点,给知识库的构建带来了诸多难题。最后,在知识的深度语义关联的理解方面,在构建知识库的过程中,如何将网络大数据背后蕴含的丰富语义关联更好地体现在知识库构建过程中,尽可能地保留这些语义信息并体现在概念之间的关系以及实例间的关系中,目前的工作还没有深入涉及。上述问题的解决思路之一是充分利用自然语言处理领域的积累,如句法分析方法、篇章分析方法等方法,以及语言的可计算性理论等基础工作,理解网络大数据背后蕴含的语言规律,更好地指导开放网络知识库的构建。
2.2.2 多源知识的融合
多源知识的融合是为了解决知识的复用问题。如上文所述,构建一个知识库的代价是非常大的,为了避免从头开始,需要考虑知识的复用和共享,这就需要对多个来源的知识进行融合,即需要对概念、实例、属性和关系的冲突,重复冗余,以及不一致现象进行数据的清理工作,包括对概念、实例进行映射、消歧,对关系进行合并等。在本文中,主要讨论概念间关系,或分类体系的融合方法。按融合方式分,可以分为手动融合和自动融合。对于规模较小的知识库,手动融合是可行的,但却是一件非常费时、容易出错的融合方式。相比于手动融合方式,建立在机器学习、人工智能和本体工程等算法基础上的融合方式具有更好的可扩展性,相关工作包括Yago[16,17,18]、Probase[38]等。
Yago知识库将维基百科、WordNet和GeoNames等数据源的知识整合在知识库中。其中,将维基百科的分类体系和WordNet的分类体系进行融合是Yago的重要的工作之一。维基百科的分类是一个有向无环图生成的层次结构[16],这种结构由于仅能反映主题信息,所以容易出错。例如,将足球运动员界定为足球。所以,Yago仅保留了维基百科分类层次中的叶子分类节点,然后利用WordNet提供的基于同义词的分类体系构建其他分类节点。为了解决其中出现的词语歧义问题,Yago使用基于共现和WordNet词频统计等手段构建了完整的分类体系。由于Yago是基于维基百科、WordNet等结构化的、质量较好的知识源构建的,其概念空间在几十万的规模[18]。从大规模半结构化和无结构化的网页中提取的海量的分类体系的融合面临更多的噪声、冗余和信息缺失现象,微软公司的Probase给出了一种概率化的融合技术。
Probase提出了一种基于概率化的实体消解(entity resolution)的知识整合技术[38],将现有结构化数据,如Freebase、IMDB、Amazon等整合到Probase当中。Probase将数据融合问题视为对已知分类体系进行匹配和映射的问题,这首先需要解决实体消解问题,即判定两个实体是否是同一个实体。具体来讲,它将外部数据源的数据分为positive evidence和negative evidence,然后将实体消解问题转化为寻找图的最优multi-way cut问题。该实体消解方法可以解决实体属性信息不足的问题。除此之外,为了解决大规模的实体消解的时间代价过高的问题,Lee等人[38]引入了两种机制CnD原则和BoF原则来保证该实体消解技术具有很好的可扩展性。
对多源知识的融合,除了分类体系的融合外,还包括对实体和概念的消解问题、实体和概念的消歧问题等。在面对海量知识库时,建立若干个针对不同领域、不同需求的有效的知识融合算法,快速进行多元知识的融合,是亟须进一步解决的问题之一。
2.2.3 知识库的更新
大数据时代数据的不断发展与变化带给知识库构建的一个巨大的挑战是知识库的更新问题。知识库的更新,分为两个层面:一是新的知识的加入;二是已有知识的更改。目前,专门针对开放网络知识库的更新的论述工作较少,很多叙述都是从数据库的更新这一角度展开的,如对数据库数据的增加、删除和修改工作的描述。虽然对开放网络知识库的更新和数据库的更新有很多相似之处,但其本身对更新的实时性要求较高。目前这方面的工作,从更新方式来讲分为两类:一是基于知识库构建人员的更新;二是基于知识库存储的时空信息的更新。前者准确性较高,但是对人力的消耗较大。后者多由知识库自身更新,人工干预得较少,但是存在准确率不高的问题。下面分别介绍这两方面的工作,即知识库Yago2[16,39]和NELL[40,41]的更新工作。
NELL系统实现自我更新是通过自我更正(self-correct)来实现的。截至2010年10月,NELL系统已经从互联网上抽取到440000个事实,准确率是87%[40]。NELL系统并不是百分之百正确的,有时它也会导出一些错误的结论,比如错误的关系等。对于这些错误,NELL系统的做法是定期(几周)由团队维护人员对系统的错误进行修正[40]。
Yago2是Yago[18]的扩展。相比于Yago,它存储的实体和事实都系统地构建了时间戳。对于实体,它记录了实体的存在时间。例如,通过人的出生年月和逝世年月计算出人的存在时间,通过组织机构等的创建时间和解体时间计算出组织机构的存在时间等。对于事实,记录发生的时间点或时间范围。例如,记录现任美国总统奥巴马的上任时间和任期范围等。Yago2还结合数据源GeoNames对每个实体和事实赋予空间维度。例如,人的出生地、组织所在地等。同时,Yago2还构建了一种时空知识表示模型SPOTL,方便对知识库中的时空信息进行查询。有了这些时间戳和查询语言,知识库的更新可以通过系统定期地对实体和事实的时间戳进行更新来完成。
总体上讲,对知识库的更新仍然没有很有效的方法。尤其是在面对用户对知识的实时性更新需求方面,远远达不到用户的要求。在更新数据的自动化感知方面,缺乏有效的办法以自动识别知识的变化以及动态响应这些变化的更新机制。