知识图谱实战:构建方法与行业应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 知识抽取的方法

由于信息的结构和数据源比较复杂,且涉及的对象、属性和性质以及表达形式也各有不同,因此造成了知识载体类型的千差万别。针对不同的知识载体类型,我们要采用不同的抽取模式与技术方法。具体的知识抽取架构图如图2-4所示,该架构包含了对结构化数据、半结构化数据以及非结构化数据的抽取。

图2-4 知识抽取架构图

结构化数据的知识抽取包括从数据库中抽取和从链接数据中抽取。其中,从数据库中抽取知识使用D2R转换工具将关系型数据库映射到RDF[2](Resource Description Framework,资源描述框架),其难点在于复杂表数据的处理,包括嵌套表、多列、外键关联等;而从链接数据中抽取知识主要使用图映射方法进行数据对齐。

对于半结构化数据的知识抽取,我们通常使用包装器的方法(后面将有详细的介绍)。获取知识的过程也就是我们广义上说的信息抽取。

下面对3种不同类型数据的知识抽取方法进行详细讲解。

2.2.1 面向结构化数据

结构化数据是指类似于关系型数据库中表格形式的数据,数据之间往往存在着明确的关系名称和对应关系。对于一般的表格,我们可以使用如Python、Java等工具编写简单代码对表格数据进行知识抽取,处理成知识图谱具体场景所需要的格式;而对于复杂一点的表格,我们需要使用转换工具将关系型数据库映射到RDF。RDF本质是一个数据模型,提供了描述实体或资源的统一的标准。简单来说,RDF就是表示事物的一种方法和手段。RDF形式上表示为SPO三元组,有时候也称为一条语句,在知识图谱中也称其为一条知识。

我们以关系型数据库为例,表2-1总结了面向结构化数据抽取知识的方法,根据这些规则可将关系型数据库转化为一个知识库。

表2-1 结构化数据抽取知识方法总结

接下来,我们来讲解面向关系型数据库知识抽取的直接映射、R2RML映射方法。

1.直接映射

直接映射通过明确在关系模式中编码的语义,将关系数据转换为RDF。如下按照一些简单的规则创建URI(Uniform Resource Identifier,统一资源标识符)进行映射。

❑数据库的表作为本体中的RDF类。

❑表的列作为RDF属性。

❑表的行作为实例/资源。

❑表的单元格值为字面量。

❑如果单元格所在的列是外键,那么其值为IRI(Internationalized Resource Identifier,国际化资源标识符),或者说实体/资源。

由于URI规定只能使用英文字符,而Unicode字符集包括了当今世界上所有书写文字的字符,所以资源标识符可以使用Unicode字符。

2.R2RML映射

R2RML(RDB to RDF Mapping Language)映射是将逻辑表作为输入,然后依据三元组映射(Triple Map)规则将其转换成三元组的集合。

❑逻辑表:一个数据库表、一个数据库视图或SQL查询语句。

❑三元组映射:通过主语、谓语、宾语映射产生三元组。

以直接映射方法得到的RDF在结构上直接映射了关系型数据库的结构,RDF词语也直接映射了关系型数据库架构的元素,但这样的映射并不能改变RDF的结构或词语。而使用R2RML的话,映射文件的作者可以自由地定义关系型数据的视图,然后由视图来映射RDF。所以每一个R2RML映射都是基于实际项目需要而描述的,它连接了作为输入端的关系型数据库架构域以及作为输出端的RDF词语。

一般来说,R2RML的映射包括数据库中的表、视图(一个或多个)或SQL查询语句、一个或多个映射规则文件。R2RML还包括一个负责连接数据库以及执行映射与结果输出的处理器。R2RML也可以通过映射来完成对实体属性、外键、特殊数据类型等元素的处理。

相比其他数据,结构化数据的知识抽取方法和应用场景相对简单。下面就来了解半结构化数据以及非结构化数据的知识抽取内容。

2.2.2 面向半结构化数据

半结构化数据是指类似百科、商品列表、网页等本身存在一定结构,但需要进一步提取整理的数据。本节以半结构化文本数据为例讲解。

与其他类型数据相比,半结构化文本数据的知识抽取受到结构与语义的双重约束。首先,半结构化文本数据的现有结构不足以支撑抽取工具直接解析相关内容,它受文本载体形式的制约较大;其次是语义相关性与复杂性,大量语义信息存在相关性并隐含在文本中,内容表征复杂。

半结构化数据的知识抽取主要通过包装器进行,包装器学习半结构化数据的抽取规则,以将数据从HTML网页中抽取出来,进而将它们转换为结构化的数据。

注意:在实践中,我们对网页信息(半结构化文本数据)的抽取处理可以采用XPath(XML Path Language, XML路径语言)定位DOM(Document Object Model,文档对象模型)中的节点,并基于节点生成XPath集合空间,进一步归纳成可泛化的规则。XPath是一种基于XML的树状结构,它提供了在数据结构树中找寻节点的能力,即确定XML文档中某部分内容位置的能力。

我们使用包装器进行知识抽取的步骤主要包括网页清洗、网页标注、包装器空间生成、包装器评估,具体如下。

1)网页清洗:网页清洗主要解决网页代码不规范的问题,比如网页中的标签没有闭合,个别标签使用不规范等,网页结构代码不严谨就会造成在抽取过程中的噪声,而使用一些工具对网页进行规范化处理,可以在后期的抽取过程中减少噪声的影响。

2)网页标注:网页标注就是在网页上标注所需要抽取的数据,具体方式可以是在需要抽取的数据位置上打上特殊的标签,表示这个数据是需要抽取的。

3)包装器空间生成:为标注的数据生成XPath集合空间,并对生成的集合进行归纳,形成若干个子集。归纳的规则要能匹配子集中XPath的多个标注数据项,具有一定的泛化能力。

4)包装器评估:对包装器进行评估需要采用一定的标准,主要有准确率和召回率。准确率是指用筛选出来的包装器对原先训练的网页进行标注,统计与人工标注项相同的数量,除以当前标注项的总数量;召回率则是用筛选出来的包装器对原先训练的网页进行标注,统计与人工标注项相同的数量,除以人工标注项的总数量。准确率越高、召回率越高,则评分越高。

得到包装器的抽取规则后就可以从网页中抽取数据,并将数据转换成结构化数据。

接下来,我们设计一个简单的例子辅助理解。

假设我们在网页上同时标注了n1、n2两个标签信息,它们的XPath分别如下。

❑n1的XPath:/html[1]/body[1]/table[1]/tbody[1]/tr[2]/td[1]。

❑n2的XPath:/html[1]/body[1]/table[1]/tbody[1]/tr[3]/td[1]。

我们根据n1、n2生成XPath集合空间,并对生成的集合进行归纳,将tr[2]、tr[3]归纳成tr[r‘[0-9]*’],然后泛化后得到XPath的两个可能结果:

A:/html[1]/body[1]/table[1]/tbody[1]/tr[r‘[0-9]*’]/td[1];

B://*/td。

完成包装器空间生成之后,我们按准确率和召回率进行包装器的评估。

1)准确率:若包装器A的准确率高于包装器B的准确率,则A优于B。

2)召回率:若包装器A的召回率和包装器B的召回率一样,则A等于B。

综合比较后,选择包装器A。

值得一提的是,有监督的包装器维护开销会很大,比如网站改变了模板,之前生成的包装器就需要进行相应的修改才能使用。因此,我们针对半结构化数据具有大量重复性结构的特点,可以对数据进行少量的标注,让机器学习出一定的规则,进而在整个站点下使用这些规则对同类型或者符合某种关系的数据进行抽取,从而节省资源。除了使用有监督的包装器抽取规则之外,我们还可以通过挖掘网站中的模板来实现自动抽取。通常,网站中的数据会使用很少的模板来编码,我们可以通过挖掘多个数据记录中的重复模式来找出这些模板,进而通过这些模板实现网站数据的自动抽取。

对待抽取信息的网页,我们需要进行数据预处理(数据清洗)。预处理后的自动抽取环节可分为包装器训练和包装器应用两个步骤。

1)包装器训练:预处理后的网页需要进行聚类处理,通过聚类算法将特征相近的网页归为一组,训练生成相应的包装器,使得每组相似的网页获得一个包装器。

2)包装器应用:将待抽取网页与生成包装器的网页进行比较,根据分类使用该类别下的包装器对相应的网页进行信息抽取,以获取网页中的目标数据,并将得到的数据保存在数据库中。

下面介绍知识抽取研究中最多的非结构化数据的抽取。

2.2.3 面向非结构化数据

非结构化数据是指社交网络、网页、新闻、论文,甚至一些多模态数据。本节以文本数据抽取为例,从实体抽取、实体链接、关系抽取以及事件抽取几个方面来讲解面向非结构化数据的知识抽取。其中,知识抽取的任务中提到的属性抽取与关系抽取概念相近,使用的方法也十分类似,不再赘述。

1.实体抽取

实体抽取是抽取文本中的信息元素得到实体指称,具体的标签定义可根据抽取任务的不同而进行调整。一般来说,文本中的信息元素包含了时间、地点、组织或机构名称、人名、字符值等标签。如图2-5所示,我们给出了一个可供实体抽取的例句。通过抽取文中的实体,我们可以得到时间(2020年5月16日)、地点(德国)、组织(多特、沙尔克)等实体指称。

图2-5 实体抽取例句

单纯的实体抽取可作为一个序列标注问题,因此可以使用机器学习中的HMM(Hidden Markov Model,隐马尔可夫模型)、CRF(Conditional Random Field,条件随机场)、LSTM(Long Short-Term Memory,长短期记忆)等诸多算法解决。其中,HMM用来描述一个含有隐含未知参数的马尔可夫过程,是一种进行有效信息处理的数学手段;CRF是一种判别式概率模型,常用于标注或分析序列资料,如自然语言文字或生物序列;LSTM是为解决RNN的长期依赖问题而专门设计出来的一种时间循环神经网络。由于LSTM可以运用过去的特征,而CRF可以利用句子的标注信息,因此一般会将LSTM与CRF结合起来使用。

利用机器学习方法进行实体抽取的基本流程如下。

❑输入可供训练、具有代表性的文本数据。

❑找出文本中的指称词语(即Token),标记命名实体标签。

❑分析文本和类别,并设计合适的特征提取方法。

❑训练一个句子分类器来预测数据的标签。

❑对测试集文本使用分类器,自动为指称词语做标记。

❑输出标记结果,即测试集文本的命名实体。

接下来,我们以CRF算法抽取文本“中华人民共和国教育部是中华人民共和国国务院主管教育事业和语言文字工作的国务院组成部门。位于北京市西城区西单大木仓胡同37号。”中的实体为例,介绍实体抽取的基本思路,具体流程如图2-6所示。

图2-6 CRF实体抽取流程图

基于CRF的实体抽取基本思路如下。

1)将待抽取的文本数据进行数据预处理及分词处理,随后进行转换标记处理,将文本数据中分词语料的标记符号转换成用于实体识别的标记。

2)根据上下文,对不同的命名实体识别采用不同的特征模板,对简单的时间、地点以及组织名进行命名实体识别(如国务院、教育部等)。

3)识别文本中存在的复合地名、复合组织机构名(如北京市西城区西单大木仓胡同37号、中华人民共和国教育部等)。

4)我们可以利用现有的CRF程序包得到模型训练参数,再使用训练好的模型对测试集进行实验得到模型的F1值[3]

2.实体链接

实体链接是根据给定的实体知识库与标注好的指称项语料,将指称项与知识库进行匹配,从知识库中选出一组候选实体对象,然后通过相似度计算将指称项链接到正确的实体对象。实体链接主要解决实体名的歧义性和多样性问题,涉及了实体消歧、共指消解等技术,如图2-7所示。

图2-7 实体链接流程图

实体链接流程包括输入、实体指称识别、候选实体生成、候选实体消歧、输出等步骤。

一般来说,在经过实体抽取得到实体指称之后,需要为文本中给定的实体名称生成可能链接的候选实体集合,即候选实体生成。候选实体生成的方法有基于名称字典的构建方法、基于上下文的扩充法、基于搜索引擎的构建方法等。其中基于名称字典的构建方法在实体链接中的应用十分广泛,主要做法是利用维基百科提供的各类信息,构建实体名称与所有可能链接的实体的映射关系字典D,然后利用D中的信息生成候选实体集合。

D={<mi,ei>|i=1, 2, ··· ,|D|}

其中,从非结构化文本数据中得到的实体指称集合M={mi|i=1, 2,…,|D|},包含了大量实体名称变种,如缩略语、昵称、别名等,与实体指称集合M对应的候选实体集合用E=(e1,e2,…,en)表示。实体指称mi对应的映射值ei={eij|j=1, 2,…,|ei|},即mi可能链接的候选实体集合。此时实体链接的任务是将给定的指称mi链接到候选实体集合ei中的某个无歧义实体eij,此过程即候选实体消歧候选实体消歧主要是进行实体消歧、属性消歧、上下文消歧,通过基于图的方法、基于概率主题模型、基于主题模型、基于词向量分类和基于深度学习等方法实现。

为了方便理解,我们对2.1节中提到的输入文本数据“北京时间2020年4月15日深夜,苹果发布了最新款iPhone X,3299元起售的iPhone X正式上架。”做进一步处理,图2-8给出了该文本数据实体链接的实例。经过属性消歧、上下文消歧,当我们最终可以根据实体链接流程将文本数据中的“苹果”链接到苹果公司时,实体链接的任务即顺利完成。

图2-8 实体链接实例

3.关系抽取

关系抽取是指从非结构化文本中抽取出两个或多个实体之间的语义关系,构成知识图谱的边。这在知识抽取中是非常关键的一步,也是知识抽取研究领域的重点任务之一。关系抽取也很好理解,例如,从“姜山为妻子李娜的日常训练提供了很多帮助”可以得出{夫妻(姜山,李娜)}这个关系。

目前根据关系抽取方法的不同,可以将其具体分为基于模板的方法、基于监督学习的方法、基于弱监督学习的方法,我们将在下面给出这些方法的详细内容。

(1)基于模板的方法

基于模板的方法主要通过基于触发词、基于依存句法分析等实现。

基于触发词:首先确定触发词,然后根据触发词进行规律的匹配及抽取,然后进行映射。如图2-9所示,其中的触发词为丈夫、妻子等。根据这些触发词找出夫妻关系,同时通过命名实体识别出关系的参与方。

图2-9 触发词匹配

基于依存句法分析:以动词为起点,构建规则,对节点上的词性和边上的依存关系进行限定。一般情况下,语句符合形容词+名词或动宾短语等情况,因此这相当于以动词为中心结构总结的规律。其执行流程如下。

❑对句子进行分词、词性标注、命名实体识别、依存分析等处理。

❑根据句子依存语法树结构来匹配规则,每匹配一条规则就生成一个三元组,也可以匹配多条规则生成多个三元组。

❑对三元组实体和触发词进一步处理,以抽取出关系。

同样,我们给出一个例子来说明基于依存句法分析是如何进行的:“李娜登顶法网,赛场彰显霸气。”对该句子进行词性标注、依存分析等前置处理后,可获得该句的依存句法结构,如图2-10所示。其中,“登顶”为该句的核心词,在句子中的成分为“谓语”,其父节点为依存树的根节点;“李娜”“法网赛场”“彰显”均与“登顶”相关联,表示在句子中与核心词的依存关系分别为“主语”“宾语”“连谓”,此时可应用依存树的主谓结构匹配规则,获取(李娜,登顶,法网赛场)三元组;最后,由于“彰显”与核心词存在“连谓”关系,并且与“李娜”“霸气”相关联,因此还可应用规则获取(李娜,彰显,霸气)三元组,但因“霸气”作为形容词,其自身不能作为命名实体,因此该三元组不具备实际意义。

图2-10 基于依存句法分析的示例

综上,该例句最终的关系抽取结果为:(李娜,登顶,法网赛场)→夺冠(李娜,法网赛场)。

以上就是基于模板方法的具体内容,它具有在小规模数据集上容易实现、构建简单、人工规则准确率高、可以为特定领域定制等优点。缺点是,特定领域的模板需要专家构建;需要为每条关系定义规律,规律很难考虑周全且费时费力;难以维护、可移植性差、低召回率。

(2)基于监督学习的方法

基于监督学习的关系抽取方法将关系抽取转化为分类问题。在给定实体对的情况下,使用机器学习的方法根据句子上下文对实体关系进行预测。它的执行流程如下。

1)预先定义好关系的类别。

2)人工标注一些数据,并设计特征表示。

3)选择一个分类方法,最后进行评估。

传统的基于监督学习的关系抽取是一种依赖特征工程的方法。首先,对每个任务可以使用特定的特征。基于实体的特征,包括实体前后的词、实体类型、实体之间的距离等;基于短语的特征,比如NP、VP、PP(句法学中的缩写,例如NP=noun phrase)等。在实际操作中,为了提高效率,通常会训练两个分类器:第一个分类器是yes/no的二分类,判断命名实体间是否有关系,如果有关系,再送到第二个分类器,为实体分配关系类别。这样做的好处是通过排除大多数的实体对来加快分类器的训练过程,可以采用的分类器是MaxEnt、朴素贝叶斯、SVM等。

基于深度学习的关系抽取能够自动学习有效特征,常用的特征包括位置嵌入(Position Embedding)、词嵌入(Word Embedding)、知识嵌入(Knowledge Embedding)等,常用的深度学习方法包括串联模型(Pipeline)和联合模型(Joint Model)等。

1)串联模型:识别实体和关系分类是完全分离的两个过程(即串联方式),不会相互影响,关系的识别依赖实体识别的效果。

2)联合模型:在一个模型中通过共享参数来表示实体及关系,对句子同时做实体识别和关系抽取,得到一个有关系的实体三元组。

用串联模型训练的好处是各模型相互独立,设计上较为容易,但误差会逐层传递累积,步骤太多有可能导致模型后续不可用。而一般情况下,联合模型方法的效果优于串联模型,但是所需的参数空间会增大。

(3)基于弱监督学习的方法

基于监督学习的方法效果虽然好,但是需要获取有标注的数据集,这一点在实际操作中有一定的难度。当标注数据集不大或者数据量又特别大的情况下,就可以借助弱监督学习的方法。基于弱监督学习的方法又分为远程监督学习和Bootstrapping方法两种。

远程监督学习方法是将知识图谱与非结构化文本对齐之后,自动构建大量训练数据,从而减少模型对人工标注数据的依赖,增强模型跨领域适应能力。该方法认为若两个实体在知识图谱中存在某种关系,则包含这两个实体的非结构化句子均能表示出这种关系。例如,在某知识图谱中存在“夺冠(李娜,法网赛场)”,那么就认为出现李娜和法网的句子就是表述夺冠关系。因此可构建训练正例:李娜在法网夺冠。

一般来说,远程监督学习抽取知识的流程如下。

❑从知识库中抽取存在关系的实体对;

❑从非结构化文本中抽取含有实体对的句子作为训练样例;

❑训练监督学习模型。

虽然远程监督可以利用丰富的知识库信息减少一定的人工标注,但它的假设会引入大量的噪声,存在语义漂移现象。语义漂移是指在迭代过程中会产生一些与种子不相关的实例,然后这些不相关实例再次进入迭代,频繁产生其他不相关实例。例如,“李娜法网遭‘黑马’舍夫多娃逆转”这句话表达的就不是法网夺冠的意思。同时,由于是在知识库中抽取存在的实体关系对,因此很难发现新的关系。

Bootstrapping是通过在文本中匹配实体对和表达关系短语模式,寻找和发现新的潜在关系三元组,其执行流程为:

1)从文档中抽取出包含种子实体的文本。

2)将抽取出的规律(Pattern)匹配文档集。

3)将基于规律抽取出的新文档作为种子库,迭代多轮,直至规律模型拟合。

这种方法构建成本低,适合大规模的构建,同时可以发现新的(隐含的)关系。但是这种方法存在对初始给定的种子集敏感、语义漂移现象、结果的准确率较低等问题。

4.事件抽取

事件抽取就是把含有事件信息的非结构化文本以结构化的形式呈现出来。事件信息包括事件发生的时间、地点、原因、参与者等。事件抽取是一个比较综合的任务,一个标准的事件抽取任务可以进一步分解为触发词识别、事件类型分类、论元识别和角色分类等子任务。每个事件都会有一个事件类型及相应的触发词,并且配有不同角色的论元。事件类型和论元角色是在约定的有限集合中选择,而触发词和论元一般情况下都是输入句子的片段。

我们以2022年北京冬奥会的一段新闻为例进行分析:“2月5日,由范可新、曲春雨、张雨婷、任子威、武大靖组成的中国队以2分37秒348的成绩获得冠军,并在2022年北京冬奥会上获得了中国队的首枚金牌。”图2-11所示为事件抽取任务分解图。

图2-11 事件抽取任务分解图

在事件抽取实践中,我们通常使用机器学习或深度学习来实现对事件的抽取。

基于机器学习的方法可以将事件抽取任务转化为实体抽取任务和多标签分类任务。

1)由于转化为实体抽取任务的方法的事件类型和对应的论元角色是在有限集合(Schema)中预定义好的,因此可以将(事件类型、论元角色)双元组整体作为概念,继而抽取对应的论元实体。

2)转化为多标签分类的方法先将事件类型抽取、转化为一个多标签分类任务,使用模型得到每个文本包含的事件类型,然后进行论元抽取,包括任务问题构建、模型构建以及范围(Span)预测。

基于深度学习的方法能够自动提取句子特征,使用词向量作为输入。词向量蕴含丰富的语言特征,并且能够自动提取句子特征,避免了人工设计特征的烦琐工作,且大大降低了对外部NLP工具的依赖。