知识图谱入门:实体关系识别与标准化对齐开源工具、常用方法、关键问题总结
这是知识图谱图谱入门系列的第五篇,也是最后一篇。
在前面的文章中,我们分别对本体设计、文本处理、实体识别、图谱存储与应用等前、中、后三个流程进行了论述。
现在,本文围绕着其中的一个重要模块实体关系识别与实体标准化展开论述正式完结知识图谱系列。
一、实体关系识别技术
实体关系识别,即针对给定的两个实体,利用上下文语境来判定两个实体之间的语义关联类型,实质上是一个分类问题。
先前的关系抽取是基于给定的实体对来寻找关系,然而,在实际应用中,实体的位置往往是未知的,而且实体之间可能存在多种关系。忽略重叠关系的抽取会丢失很多相关的三元组,导致知识图谱不完整。
1、关系识别任务中的常见问题
1)关系重叠问题, 一对多。如“张学友演唱过《吻别》《在你身边》”中,存在2种关系:「张学友-歌手-吻别」和「张学友-歌手-在你身边」
2)关系重新问题, 一对实体存在多种关系。如“周杰伦作曲并演唱《七里香》”中,存在2种关系:「周杰伦-歌手-七里香」和「周杰伦-作曲-七里香」
3)复杂关系问题, 由实体重叠导致。如《叶圣陶散文选集》中,叶圣陶-作品-叶圣陶散文选集;
4):复杂关系问题, 关系交叉导致。如“张学友、周杰伦分别演唱过《吻别》《七里香》”,「张学友-歌手-吻别」和「周杰伦-歌手-七里香」
2、基于暴力贪婪匹配法的实体关系识别
当看到<乔布斯,CEO,苹果公司>这个三元组时,可以发现CEO这个关系具有明显的指示意义,通常一个句子中在描述这个三元组时,都会选用与CEO语义十分接近的表述,而这种表述可以分成显式和隐式两种类型。
在显式中明确使用CEO、联合创始人等词,在隐式中使用十分隐晦的方式,如“乔布斯在苹果公司的萌芽时期加入进来”这句话,没有任何明显的标记。
基于显式规则的实体关系识别,利用实体关系的常见表述特点而展开,实体关系词是基于显式规则实体关系识别的重要依据。
其中,实体关系词或者叫触发词可以通过人工设计整理或者借助同义词外部资源、基于预训练向量模型相似度计算的方式进行扩展,形成实体关系触发词集合,例如“担任”这一关系,可以用就职、上任、任职、供职、兼任、受聘于等词。
通常情况下,在触发词足够多的情况下,就可以召回足够多的关系表述候选。
暴力贪婪匹配法是最常用的实体关系识别方式,其核心思想为:若一个句子中同时包含实体对以及关系触发词,并且满足某种出现位置规则,那么这个句子就满足了所需的关系类型。具体实施步骤为:
步骤1.针对给定的文本,先进行分词、分句等文本与处理,形成若干个句子集合;
步骤2.利用构建的实体关系触发词表,对句子进行过滤,将出现触发词的句子作为关系候选句;
步骤3.对关系候选句进行识别,并将同时包括头实体和尾实体的句子进行保留,形成关系句集合;
步骤4.利用关系触发词、实体对之间的位置索引关系进行组合,形成实体关系对。
暴力贪婪匹配法的方式十分简单、粗暴、快速,其在实现过程中常使用AC自动机(pyahorcorasick) 进行加速处理,关系触发词越丰富、位置判定规则越准确,得到的性能就越高,但这种方式并为考虑实体之间的语义关联,尤其是在一个句子中同时出现多种关系和同个实体时。
3、基于规则模式匹配法的实体关系识别
规则模式匹配法是比暴力贪婪匹配法准确性更高的方法,该方法通过构造满足实体关系描述的规则模式集合,将满足该模式的实体对进行分离,形成三元组,该方法使用规则模式来实现关系识别,规则模式的准确性和覆盖度是该识别方法的核心。
1)关系模式的构建流程
关系模式的构建是规则模式匹配法的核心所在,从句子中提取<乔布斯,CEO,苹果公司>这样的三元组则可以设计大量的提取模板,这个模板的设计过程是在观察大量语料文本后进行抽象建模的结果,具体步骤包括:
步骤1.实体实例的获取
例如:将该三元组<乔布斯,CEO,苹果公司>作为搜索关键词,放入搜索引擎中时,可以得到大量关于该三元组在文本中的真实表述:
步骤2.关系实例的抽象
关系实例的抽象,完成针对实例的模式抽象,以生成具有一般意义的关系规则模式,规则抽象包括人工整理和机器挖掘两种方式,其中符号化(或者叫概念化),将句子中的实体用符号进行代替,使得其更具备通用性是其中的关键步骤。
例如,经过实体类型抽象后,变为:
步骤3.关系实例规则的生成
为了进一步提升模式的适用性,可以将不确定的其他成分用其他字符代替,再次抽象为:
通常来说,可以根据松紧程度,即对规则模板的控制,模式进行严格限制,得到的结果会比后两条要少,但其精度更高。模式设计的越松,能够召回的结果越多,但噪声越多,人工可以通过观察规则,定义出一些质量较高的关系模式,但其构建成本较高。
因此,可以使用机器自动抽象和挖掘的方式进行快速积累。关系模式的扩展,即对有限的规则模板进行严格的自动泛化,即“模板规则自动生成”或者“模板规则的自学习”,以提升其覆盖度。
在实现方式上包括基于外部词汇库的模式扩展以及基于Boostrapping的模式扩展两种方法。
2)基于基于外部词汇库的关系模式扩展
基于外部词汇库的扩展是机器进行模式扩充的一个基本方法,其思想为通过对模板词中的触发词或指示词进行扩展,例如。
针对种子模式“[person]是[company]的CEO”,
先将“是”作为扩展词,通过获取其同义词,将模式扩展为:
“[person]是[company]的CEO”、“ [person]为[company]的CEO”、“ [person]乃[company]的CEO”等模式;
在基础上,对CEO这个触发词集合再进行扩展,则可进一步得到
“[person]是[company]的首席执行官”、“[person]乃[company]的首席执行官”等模式;
若模式中存在多个可以扩展的词,则可以得到累乘数量级的模式结果。
进一步的,将CEO这一词用职位词典进行代替,形成[person]是[company]的[job]的实体关系模式;
此外,为了提升模式通用性,还可以对文本进行处理,将指示词的规范和映射成为一个词,即“作为”、“为”、“乃”等词都转化为“是”这一统一表示。
基于外部词汇库的方式在很大程度上受限于词汇库的规模和多样性,并且基于外部词汇库的模式扩展并没有改变规则模式的根本形式。
3)基于Boostrapping的关系模式扩展
因此,让机器以种子三元组集合和非结构化文本为基本输入,通过执行上述模式抽象化的步骤,对大量出现的文本进行统计分析,并选择出现频次较高的模式作为优质关系模式是可以迅速想到的一种方式。
基于Boostrapping的模式扩展通过迭代学习的方式来拓展模式的类型,采用“基于种子三元组回标句子->生成模式->抽取三元组”作为一个动作进行迭代的思想进行关系实例抽取。
该算法的步骤为:
步骤1.给定种子三元组和种子模板集合;
步骤2.在非结构化文本中进行匹配,并对同时包含三元组形式的句子进行符号化抽象形成模式,并加入到种子模板当中;
步骤3.通过该模板可以挖掘到其他三元组,并加入到三元组集合当中;
重复步骤1-3,并设定迭代条件,直至生成出更多的模式。
例如:
给定种子三元组集合:<乔布斯,CEO,苹果公司>;
经过模式抽象得到的模式:[person]是[company]的CEO;
运用[person]是[company]的CEO的模式,在文本中抽取到:
<马斯克,CEO,特斯拉>实例;
运用<马斯克,CEO,特斯拉>三元组,在文本中进行文本匹配,得到[特斯拉][CEO][马斯克]曾公开表示“特斯拉不需要任何公关”。
对该句子进行抽象,变为:[company][CEO][person]***,对抽象的句子模式进行判定,将满足特定条件的模式加入到模式集合当中。
基于Boostrapping的方法都是以上一次输出的数据作为下次迭代的数据,误差会不断放大,即常说的“语义漂移”现象,如果提取Pattern或者Tuple的过程中出现了差错,意思就是说提取了很糟糕的规则,那就会把错误的东西一直做迭代下去,一错再错,因此对每次迭代的输入准确性要求很高。
后期基于Boostrapping的后期提取算法上,优化的关键点大多都集中在对抽象模式以及抽象模式实例结果的进入准则上,例如:
snowball实体关系抽取系统引入自我反省机制,分别对模式集合中的模式以及抽取的三元组实例进行置信度计算,并将小于阀值的模式和实例丢弃,在一定程度上缓解了这一现象。
4、基于串行pipeline的实体关系抽取
鉴于基于规则实体关系抽取方法中存在的准确率不高、泛化能力差等问题,基于已标注训练语料,进行有监督学习方法的实体关系抽取方法被提出,基于学习的实体关系抽取,主要有串行和联合两种关系抽取方法。
1)串行方式的实体关系抽取路线
基于串行(Pipelined Method)也叫流水线的方式,将实体关系抽取分成实体识别以及实体关系抽取两个部分,先识别其中的实体对,然后将实体对进行组合,进行实体关系分类。
当前,已经有许多经典的实体关系抽取模型,例如:
1·基于 CNN 的关系抽取
该方法使用 CNN 抽取每个句子中最重要的特征,得到句子的特征向量表示,并用于最终的分类。
首先通过预训练或者随机初始化的 embedding 将句子中的词转化为词向量,同时使用句子中的实体词及其上下文相对位置表征实体词的位置向量;
随后通过 CNN 网络抽取句子级别的特征,并使用池化方式得到压缩后的特征向量表示。最后将特征向量输入一个全连接的神经网络层对句子所表述的关系进行分类。
2·基于 Capsule 的关系抽取
该方法首先通过预训练的 embedding 将句子中的词转化为词向量;
随后使用 BiLSTM 网络得到粗粒度的句子特征表示,再将所得结果输入到胶囊网络,首先构建出 primary capsule,经由动态路由的方法得到与分类结果相匹配的输出胶囊。胶囊的模长代表分类结果的概率大小。
3.基于Piecewise CNN(PCNN)的远程监督关系抽取
该方法在关系抽取任务中引入远程监督学习的方法,尤其是针对远程监督中的标记噪声问题,使用分段的 CNN(, PCNN)抽取句子特征向量表示的同时,考虑到同一个 Bag 中句子表达关系的不同重要性,引入了句子级别的Attention 机制。
4.基于GCN的关系抽取
GCN的方法利用句子的依赖解析树构成图卷积中的邻接矩阵,以句子中的每个单词为节点做图卷积操作,以此抽取句子信息,再经过池化层和全连接层再做关系分类。
5.基于 BERT 语言预训练模型的关系抽取
使用 BERT 语言预训练模型方式,将句子输入到 BERT 后,得到的结果输入到全连接层,进行关系抽取。
3)基于串行的实体关系路线总结
基于串行的实体关系识别方法将实体识别和实体关系识别进行分离,十分灵活。
一方面在数据集上可以使用独立的训练数据,不需要同时标注实体和实体关系。
另一方面两个模型可以进行组合,分别选用不同的网络来训练两模型,模型搭建上互不干扰,实现路线也清晰、容易。但也存在明确的缺点,例如:
1.典型的错误传播问题。 实体识别模块的错误会影响到下一阶段的关系分类性能,这时候串行模型的通用问题;
2.典型的组合冗余问题。 暴力组合影响效率,由于对识别出来的实体进行两两配对,然后再进行关系分类,那些没有关系的实体对就会带来多余信息。
3.任务依赖缺失问题。 流水线的方法没法利用两个子任务之间的关系,例如要抽取存在国家总统这个关系,可以知道前一个实体必然属于地点类型,后一个实体属于人物类型。
首要问题是怎么降低计算复杂度,关系分类时不再对句子重复编码,而是one-pas。
鉴于基于串行方法的实体关系抽取存在的根本问题,将两个任务合二为一的做法被提出,其思想在于输入一个句子,通过实体识别和关系抽取联合模型,直接得到三元组信息,解决的问题是如何加强实体模型和关系模型之间的交互,如实体模型和关系模型的输出之间存在的约束信息。
其在实现方式上主要有两种,一种是参数共享,一种是融合实体类型和关系类型的标签策略。
5、基于参数共享的联合关系抽取
基于参数共享的联合抽取方法是目前使用较多的一种,所谓参数共享,即共享输入特征或者内部隐层状态,达到两个子模型的联合。
因此,从处理流程上来看,依旧包括实体识别和实体关系分类两个任务,即先进行命名实体识别,并将实体识别的信息进行匹配分类,两个子任务都采用各自独立的解码算法,只是两个任务之间通过参数共享有了交互,但交互的强度受限于共享机制的设置。
1)基于序列标注的参数共享联合关系抽取
在模型的设计上,基于共享参数的联合抽取,实体抽取loss会与关系抽取loss相加作为整个模型的loss。
论文《Joint Entity and Relation Extraction Based on A Hybrid Neural Network》是这类方法的典型工作。
该工作采用了LSTM+CNN的模型进行处理,先利用LSTM进行实体识别,再利用CNN网络进行关系分类,同时训练两个任务,使得底层共用的词向量能够通过共享参数更新来实现两个任务之间的依赖。
2)基于多轮对话MRC的联合关系抽取
基于多伦对话MRC的联合关系抽取采用基于人工设计的QA模板,先提取实体,再抽取关系的方式,对每种实体和每种关系都用问答模板进行刻画,从而这些实体和关系可以通过回答这些模板化的问题来进行抽取,采取BIES标注实体,MRC+CRF进行解码。
《Entity-Relation Extraction as Multi-Turn Question Answering》是这类方法的代表工作。
6、基于联合解码的实体关系抽取
基于联合解码的方法力图将原来涉及到序列标注任务和分类任务的关系抽取完全变成了一个序列标注问题,并通过一个端对端的神经网络模型直接得到关系实体三元组。
《Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme》是其中的一个代表性工作。
该工作使用三个部分来进行标签的定义,即实体部位 (BIES标签来表示实体的开始、内部、结尾和单个实体标注)、所属关系类型(如根据预先定义的关系类型)、头实体或尾实体的角色信息(如1表示头实体,2表示尾实体),对于不属于实体三元组的,都采用”O”标签,这样一来,当实体关系类型数量为1时,标签数为412+1=9个,当实体关系类型数量为3时,标签数目为432+1=17个。
这种方式存在两个缺点,一个是当实体关系类型很多时,则需要预测的标签将十分庞大,计算量很复杂。另外,不能解决关系重叠问题,比如一个实体存在于多种关系中的情况。
二、领域实体标准化与对齐关键技术
在知识图谱构建中,经常会面临对不同来源的知识进行融合的场景。
例如做商品的价格指数监测,需要从淘宝、京东、拼多多、苏宁等不同的电商平台上获取商品的各类信息,包括商品的价格、商品的属性等信息,不同的平台在商品的名称、属性、单位等方面都各异,常常需要进行标准转换,这种场景在商品领域很常见。
电商平台上有很多的商家,各个商家对于同一个商品货物的描述也不同,里面需要进行整理和对齐的工作量很大。
知识标准化与规范化是解决以上问题的重要技术手段,涉及实体标准化、属性标准化以及属性值标准化几个方面,从实施上包括标准实体和规范值的制定与映射两个基本步骤。
1、知识标准的制定
标准规范值是进行知识标准化的前提条件。
可以通过预先制定规范得到,如规定日期的长度为“年-月-日”的八位形式、身高的单位为厘米,速度的单位为千米/小时。
对于无法从形式上进行预先定义的,可以使用流行度、接受度等度量指标,选择得分最好的作为标准实体。
将非标准映射到标准,可以通过人工制定映射条件规则,使用人工或者程序执行,而针对无法准确制定出条件规则时,则需要使用实体对齐的方法完成。
为实体生成uid,因为我们的uid对实体来说是唯一关联的,而uid一旦生成后并且被实体链接投入使用的话,后期基本不能更改,例如,可以通过md5方法对某些固有特征进行编码。
2、知识的“非标转标”
“非标转标”或者叫数据归一问题,是实现非标准到标准转换的重要手段段,常会转换成一个实体对齐的任务,本质上是一个分类任务,即给定非标准和标准对,判断两个是否为一个,在实现方式上,实体对齐经常会转换成为一个实体相似度计算的问题。
1)实体文本预处理
文本预处理是进行实体对齐的首要步骤,在进行实体抽取时,通常会有多种不规范的表达,因此,可以通过数据正规化的方式将实体映射到一个标准的形式化空间上去。例如,移除空格、制表符、书名号、“”、-等符号,用正式名字替换昵称和缩写,去除实体中的一些不必要的虚词等。
2)实体相似度计算
要判断百度百科的姚明和维基百科上的姚明是否是同一个实体,那么infobox中的属性值就是很重要的判断依据。
例如:出生日期是否相等,出生地点是否相等,身高或体重是否接近,民族和国籍等,这些属性就是我们判断是否同一个实体的特征,然后通过简单的规则就能知道两个百科页面是否指向同一个实体。
有一些实体,是infobox很少的,而这些实体是大量的长尾存在,对这些实体做融合时,可以通过对这些实体的正文介绍信息做相似度计算,然后根据经验设计阈值进行判断。
在非结构化条件下计算两个实体的相似度方法包括基于实体字符串或者实体字符串+上下文的编辑距离、集合相似度(Jaccard系数、Dice系数)、向量相似度等经典方法,也包括经典的分类模型。
在已经完成抽取形成知识元组的情况下,则可以利用实体之间的属性相似度、实体相似度进行融合判定。
例如,假设图谱中有两个实体的记录e1和e2,e1和e2在第i个属性上的值是e1i,e2i,可以综合单个属性相似度得到属性相似度向量,并以此得到实体的相似度。
随着后期研究的深入,陆续出来了其他的实体对齐方法,例如借助翻译手段来完成实体对齐(中科院和中国科学院的英文翻译都一样)、借助序列到序列的生成方法、基于实体表示的方法等。
3、实体指代消解
指代消解主要有两个步骤。
第一步是指代识别(mention detection),即找出句子中所有的指代,这一步相对简单。
第二步才是进行真正的指代消解(coreference resolution),这一步比较难。
指代消解发展至今,经历了四种不同的方法,分别是Rule-based、Mention pair、Mention Ranking。
1)Rule-based方法
1976年,Hobbs提出了基于规则的朴素算法,被后人称为Hobbs算法。该方法有9个步骤,包含了很多规则,非常繁琐。
Hobbs算法虽然是基于规则的,但在当时取得了不错的效果,现在也常常作为该领域的baseline模型。但是因为该方法是基于规则的,有很多指代消解没法解决。
2)Mention pair方法
该方法把指代消解问题转化为一个二分类问题。从左到右遍历句子,每找到一个指代,就把它和前面找到的每个指代作为一个pair,问分类器这个pair是否指代同一个实体,如果是的话,就把它们连起来。
二分类的损失就是交叉熵。很简单的一个模型。
3)Mention Ranking方法
每个指代同时和前面所有指代打分,用softmax归一化,找出概率最大的先行词,添加一条连边。注意需要添加一个NA节点,因为有的指代可能第一次出现,前面没有先行词,或者这个指代根本就不是一个真正的指代。
4、知识标准化的常见问题
在工业生产环节中,通常对知识对齐方法的选择比较理性。需要解决实体对齐的判定和实体对齐的计算量两大问题。
一方面,实体对齐的判定,可以转换为典型的相似度匹配和分类去处理,通常需要根据当前的业务状况以及数据情况来进行处理,一个是否已有大规模标注语料或可以标注大规模语料的条件,二是生产时间的要求,如果生产时间很紧且无法快速获取标注语料,那么词典、规则、正则表达式的方法是需要考虑的。
不过,目前对于实体较短以及可用外部信息较少的实体而言,实体对齐的效果依旧还不够理想。
另一方面,实体对齐往往会发生大量的对比操作,十分耗时,尤其是大规模的知识图谱数据库中,针对一个非标准实体,往往需要与图谱中的大量候选标准实体进行比较,计算量随着图谱数据规模的增加而迅速扩大,在上亿个节点的网络对齐时,无论是从计算复杂度还是对齐效果上,都会有新的问题产生。
针对这种情况,往往会使用分治的方法或者借助ElasticSearch数据库进行召回初筛,以降低比较次数。
三、开源实体关系抽取工具与总结
实体体关系抽取是一个比较复杂的任务,也是整个知识图谱构建中错误出现概率较大的环节。
为了回避这一错误,实体标准化和融合这部分就成了保证知识图谱准确性的最后一个守护神。
当前,实体关系抽取可以用的通用框架不多,而且很多都需要我们根据实际的业务需求自己去定义。
代表性的,有DeepKE、OpenNRE、DeepDive,这些组件对一些经典的模型进行了封装,可以灌入自己的数据然后进行模型调用抽取。
1、DeepKE
浙江大学开发的该开源组件,以统一的接口实现了目前主流的关系抽取模型。包括卷积神经网络、循环神经网络、注意力机制网络、图卷积神经网络、胶囊神经网络以及使用语言预训练模型等在内的深度学习算法。
地址:https://github.com/zjunlp/deepke
2、OpenNRE
OpenNRE是清华大学自然语言处理实验室推出的一款开源的神经网络关系抽取工具包,包括了多款常用的关系抽取模型,例如句子级别关系抽取、远监督关系抽取和少次学习关系抽取模型。
地址:https://github.com/thunlp/OpenNRE.git
DeepDive是由斯坦福大学InfoLab实验室开发的一个开源知识抽取系统,它通过弱监督学习,从非结构化的文本中抽取结构化的关系数据 。
DeepDive原本只能支持英文的关系抽取,通过修其中自然语言处理的model包,可以支持中文。
地址:https://www.openkg.cn/dataset/cn-deepdive
最后,关于知识图谱其他的文章,包括标注工具等,可以参考其他文章,希望大家在这个系列的文章中能够找到有所收获。
总之,一定要实践,talk is simple,show we your code。
参考文献
1、https://blog.csdn.net/TgqDT3gGaMdkHasLZv/article/details/101572478
2、https://www.jiqizhixin.com/articles/2019-10-30-2
3、ttps://blog.csdn.net/ngl567/article/details/109285132
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
就职于360人工智能研究院、曾就职于中国科学院软件研究所。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。