文章目录
1 实体关系抽取方法思路
实体关系抽取是从文本中的句子里抽取出一对实体并给出实体间关系的任务。该任务的输入是一句话,输出是一个spo三元组(subject-predicate-object)。
对于实体关系抽取任务,最容易想到的方法就是先抽取句子中的实体,然后在对实体对进行关系分类,从而找出spo三元组,这种思想被称作管道模型(Pipeline)。管道模型把实体关系抽取分成了两个子任务,实体识别和关系分类,两个子任务按照顺序依次执行,它们之间没有交互。在管道模型之后,可以同时进行实体识别和关系分类的联合模型被提了出来,之后的实验证明联合模型由于实现了两个子任务之间的信息交互,大大提升了实体关系抽取的效果,目前针对实体关系抽取任务的研究大多采用联合模型。而联合模型又可以细分为基于参数共享的联合模型和基于联合解码的联合模型。
另外,解码方式对实体关系抽取性能的影响也很大,主要的解码方式有三种:基于序列标注、基于指针网络和基于片段分类的方法。
实体关系抽取任务根据抽取思路的不同可以按下图所示方式分类:
2 参数共享方法与联合解码方法
下图是参数共享方法和联合解码方法的对比。使用参数共享的联合模型和管道模型的结构是非常相似的,它们抽取spo三元组的过程都是分成多步完成的,主要的不同在于基于参数共享的联合模型的loss是各个子过程的loss之和,在求梯度和反向更新参数时会更新整个模型所有子过程的参数,而管道模型各子过程之间则没有联系。使用联合解码的联合模型则更符合“联合”的思想,主体,客体和关系类型是在同一个步骤中进行识别然后得出的。
2.1 使用参数共享的经典模型:
End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures
这篇论文是实体关系抽取领域内的一篇非常重要的论文,几乎所有和实体关系抽取有关的综述都会提到这篇论文,它是联合模型的开山之作,被之后许多论文借鉴。
本文提出了一种联合实体关系识别,基于参数共享的关系抽取模型,模型中有两个双向的LSTM-RNN,一个基于word sequence,主要用于实体检测;一个基于Tree Structures ,主要用于关系抽取;后者堆在前者上,前者的输出和隐含层作为后者输入的一部分。下图为整个模型的结构图:
该文章提出的模型就是一种典型的基于参数共享的联合模型,两个双向LSTM-RNN结构分别用于检测实体和分类关系,它们是单独训练的,但是loss是加在一起同时进行反向传播和更新的。
2.2 使用联合解码的经典模型:
Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme
该论文的主要工作是设计了一种特别的标签类型,将实体识别和关系分类转化为序列标注问题;然后提出了一个端到端模型,通过编码层对句子进行编码,将隐藏层向量输入解码层然后直接得到spo三元组,没有将抽取过程分为实体识别和关系分类两个子过程。
该论文提出的标记方法如下图所示,在该方法中,共包含 3 种标注信息:
(1) 实体中词的位置信息 { B,I,E,S,O } 分别表示{实体开始,实体内部,实体结束,单个实体,无关词};
(2) 实体关系类型信息,需根据关系类型进行标记,分为多个类别,如 { CF,CP,… } ;
(3) 实体角色信息 { 1,2 } 分别表示 { 实体 1,实体 2 }
该论文提出的端到端的神经网络模型如下图所示,对输入的句子,首先,编码层使用Bi-LSTM来进行编码;之后,解码层再使用 LSTMd( 作者提出的一种基于LSTM的改进型 ) 进行解码;最终,输出模型标注好的实体—关系三元组。
该论文提出的模型有一个明显的不足就是不能识别重叠的实体关系,下图表格展示了实体关系三元组的重叠类型,实体关系三元组根据重叠方式的不同可以分为三类:没有重叠的Normal类型,关系重叠的EPO类型,实体重叠的SEO类型。本文的模型由于标签设计的原因,只能识别Normal类型的实体关系三元组。
2.3 参数共享方法和联合解码方法的优缺点对比:
参数共享 | 联合解码 | |
---|---|---|
优点 | 1.实体识别和关系分类过程不是同步的,所以后面步骤的训练可以使用前面步骤的结果作为特征,2.灵活性更高,能够更好的处理重叠实体关系重叠问题。 | 没有明确的将抽取过程分为多个步骤,真正实现了实体识别和关系分类的信息共享。 |
缺点 | 实体识别和关系分类仍然是两个独立的过程,没有真正的“联合”。 | 目前要实现联合解码一般需要设计复杂的标签或者解码过程,而且联合解码的方式对重叠的关系三元组的识别效果不是很好。 |
3 实体关系抽取解码方式总结
常见的实体关系抽取的解码层的解码方式有三种,分别是基于序列标注,基于指针网络和片段分类。
3.1 序列标注
基于序列标注的解码方式通常会使用CRF作为解码器,使用结合BIO或者BIOES标签的联合标签,每个token标记一个tag标签。解码层的任务就是确定每个token的tag,CRF能够进行标签约束,解码效果比直接使用Softmax更好。
序列标注方法在命名实体识别任务中非常常用,但是在实体关系抽取任务中,序列标注有非常多的不足,很重要的一点是一个token只能有一个标签,而关系抽取任务情况复杂,存在实体重叠、关系重叠等诸多特殊情况,经常需要设计比较复杂的联合标签才能完成对实体关系三元组的抽取,然而标签越复杂,抽取效果就越差。因此最新的论文基本都不再采用这种方法。
上文提到的论文Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme中提出的模型使用的就是序列标注方法,该模型就无法解决实体重叠问题。
下图中的句子使用了序列标注方法,采用BIO和实体类型联合标签,该方法只能确定“北京”这一个实体,而无法将另一个实体“北京德易东方转化医学研究中心”也一起表示出来。
3.2 指针网络
序列标注方法只有一个标签序列,表达能力较弱,不能解决实体重叠问题,因此有人提出使用MRC机器阅读理解中大量使用的指针网络来对关系抽取中的输入句子进行标注,使用多个标签序列(多层label网络)来表示一个句子。如下图所示,该指针网络采用了两个标签序列,一个表示实体的起始位置,另一个表示实体的结束位置。在解码时使用Sigmoid代替Softmax,预测每个token对应的标签是0还是1。由于指针网络的表达能力较强,可以很好地解决实体-关系重叠等问题,所以在目前的实体关系抽取方法中被大量使用。虽然指针网络是一个比较好的方案,但是在指针网络的使用过程中很可能会遇到标签不平衡问题,需要进行一些调参工作。
3.3 片段分类
片段分类方法和上述两方法有较大的差异,片段分类方法找出所有可能的片段组合,然后针对每一个片段组合求其是否是实体的概率。如下图所示,针对一个句子,片段排序方法从开始位置起依次选取一个token,两个token……,组成实体可能的片段,然后求该片段是否是实体的概率。
在确定所有的实体之后,对所有实体两两配对,然后求每一对实体对之间存在关系的概率。例如,如果有N个实体,M种关系,那么存在N × N个实体对(实体对是有序的),需要求N × N × M个概率,来判断每个实体对之间的关系。
如果文本过长,片段分类会产生大量的负样本,在实际中需要限制span长度并合理削减负样本。
3.4 不同解码方式的优缺点对比:
序列标注 | 指针网络 | 片段分类 | |
---|---|---|---|
优点 | 使用简单,准确率高 | 能够在解决实体重叠问题的同时保证较高的准确率 | 可以直接得到实体,不需要从标签到实体的转换过程 |
缺点 | 无法解决实体重叠问题 | 1.容易遇到标签不平衡问题。2.在使用解码层得到指针网络的多个标签序列之后还需要专门的程序根据指针网络确定实体 | 文本过长时会大大增加计算量 |
4 实体关系抽取任务主要模型总结
4.1 SOTA模型(2020.6)
实体关系抽取任务SOTA排行榜上目前最佳的模型,这几个模型分别在不同的数据集上达到了SOTA效果:
模型 | ETL-span | HBT | SpERT | DYGIE |
---|---|---|---|---|
模型结构 | 基于共享参数的联合模型 | 基于共享参数的联合模型 | 基于参数共享的联合模型 | 基于参数共享的联合模型 |
解码方式 | 指针网络 | 指针网络 | 片段分类 | 片段分类 |
达到SOTA效果的数据集 | NYT-single | NYT,WebNLG | CoNLL04 | ACE04,ACE05 |
论文 | Joint Extraction of Entities and Relations Based ona Novel Decomposition Strategy | A Novel Hierarchical Binary Tagging Framework forJoint Extraction of Entities and Relations | Span-based Joint Entity and Relation Extraction withTransformer Pre-training | A General Framework for Information Extractionusing Dynamic Span Graphs |
ETL-span
该模型的抽取方案借鉴了 seq2seq 的概率图思路。在 seq2seq 解码器的解码过程是层次递归进行的的,其实际上是在建模
P ( y 1 , y 2 , . . . , y n ∣ x ) = P ( y 1 ∣ x ) P ( y 2 ∣ x , y 1 ) . . . P ( y n ∣ x , y 1 , y 2 , … , y n − 1 ) P(y_1,y_2,...,y_n|x)=P(y_1|x)P(y_2|x,y_1)...P(y_n|x,y_1,y_2,…,y_n-_1) P(y1,y2,...,yn∣x)=P(y1∣x)P(y2∣x,y1)...P(yn∣x,y