早期的信息抽取将实体抽取和关系抽取看作串联的任务,即先识别实体,再对实体间关系进行分类,实体识别过程和关系分类过程之间没有交互,这种模型被称作pipeline流水线模型。流水线模型在建模上相对更简单,但这样把实体识别和关系分类当作两个独立的任务明显会存在一系列的问题:
1.两个任务的解决过程中没有考虑到两个子任务之间的相关性,从而导致关系抽取任务的结果严重依赖于实体抽取的结果,导致误差累积的问题
2.对于一对多的问题,也就是关系重叠问题,串联模型无法提供较好的解决方案
因此,近年来有许多工作都考虑将实体识别与关系抽取任务进行联合建模,在识别实体的同时也将关系抽取出来,直接得到关系三元组,这种模型又被称作联合模型。
联合模型根据具体的方法不同还可以细分为使用共享参数的联合模型和使用序列标注的联合模型。本文将介绍几篇比较重要、值得关注的使用序列标注方法进行关系抽取的论文。
在关系抽取问题中,句子中的关系事实往往是复杂的。不同的关系三连词在一个句子中可能有重叠,这就是实体重叠问题,目前解决关系抽取中实体重叠问题的最好方法就是序列标注方法。在论文 Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism 中,作者将句子按照三重重叠程度分为三种类型,分别是Normal, EntityPairOverlap (EPO)和SingleEntityOverlap (SEO)。
如上图所示,如果一个句子的三元组都没有重叠的实体,那么它就属于普通类。如果它的一些三元组有重叠的实体对,那么这个句子属于EntityPairOverlap类。如果一个句子的某些三元组有重叠的实体而这些三元组没有重叠的实体对,那么这个句子就属于单列重叠类。
之后许多论文也沿用了这种重叠类型的分类方法,Normal 类是最容易解决的,而EntityPairOverlap和SingleEntityOverlap类型目前也有许多论文提出了比较好的解决方法。
论文指出了目前的实体关系抽取任务存在的一些问题:
论文提出的模型结构:
模型包括五个层,分别是:embedding layer,BiLSTM layer,CRF layer,Label embedding,sigmoid scoring layer
Embedding layer:Embedding layer 主要用于生成词表征,包括字符级别的向量和词级别的向量两个部分,构造方式如下所示,引入字符级别的向量是因为字符级别的向量可以融入一些形态学特征,如大小写等
BiLSTM encoding layer:利用 多层的 BiLSTM 来对句子进行编码,每一个时刻的输出为两个方向的向量的拼接:
CRF layer:在 BiLSTM 之后接 CRF 来辅助实体识别已经是常规操作了,实体识别部分的标注方式是 BIO,此外在实体位置标注之后还接有实体类别标注
Label Embedding:构造一个 Label Embedding 层,用来获取标签相应的向量表征,也是可训练的,用 gi 表示第 i 个token的预测标签向量
sigmoid scoring layer:将关系抽取看作一个 multi-head selection problem,multi-head 的含义是假设每个实体与其他所有实体都存在关系,对于给定的 token向量 wi 和 wj,其关系为 rk 的分数为:
然后将分数值映射为概率值:
关系抽取过程的损失函数定义为:
整个模型的损失函数定义为 Lner+Lrel
在预测阶段,可以通过认为输出的预测概率超过某一个阈值就认为这个关系是有效的。注意,该模型对两个词之间过个关系的预测并不是采用的 softmax 函数,而是对每个关系采用了 sigmoid 函数,区别在于 softmax 是将所有类别看作是互斥关系,将所有分数归一化为和为 1 的形式,而 sigmoid 与 softmax 的区别在于,其独立的将每个类别的判断看作是独立二分类的问题,即各个类别不存在互斥关系,这样跟有利于判断出两个实体之间存在的多种关系的情况。
这篇文章的关键创新点在于其将关系抽取任务当作一个 multi-head selection problem 的问题,从而使得每个实体能够与其他所有实体判断关系,此外,不再将关系抽取任务当作一个每个关系互斥的多分类任务,而是看作每个关系独立的多个二分类任务,从而能够判断每一对实体是否可能有多个关系存在。因此,该模型可以将类型为 Normal,EntityPairOverlap (EPO) 和 SingleEntityOverlap (SEO) 的关系三元组全部抽取出来。
本文是19年百度关系抽取竞赛的一位参赛者对自己在比赛中使用的方法的总结。在 https://kexue.fm/archives/6671 可以看到作者对自己方法的详细介绍,下面内容取自作者的文章
作者在仔细研究了百度数据集后发现数据主要有以下几个特点:
根据语料的特点,作者设计了一个基于概率图思想的抽取方案,然后从效率出发,利用 CNN+Attention 的架构完成了这个模型。作者设计的抽取方案借鉴了 seq2seq 的概率图思路。在 seq2seq 解码器的解码过程是层次递归进行的的,其实际上是在建模:
而对于信息抽取任务,三元组的抽取过程也能够转化为上述层次递归的方式进行抽取,对于三元组 (s, o, p),其抽取过程可以建模为:
即首先预测 s,然后根据 s 来预测该 s 所对应的 o 及 p。由于抽取 s 以及抽取 s 所对应的 o 及 p 的过程均是非唯一性的,因此,作者采用了 MRC 中常用的指针网络的抽取方法,即仅抽取答案的开始和结束位置,且把预测开始和结束位置的任务转化为了预测每一个位置是否为开始位置或结束位置(将softmx换成sigmoid)。模型的整体结构如下图所示
模型的整体结构包括以下几层:
编码层:得到字表征
s 抽取:通过 Self-Attention 和 CNN 的结构来对 s 的开始和结束位置进行抽取
o、p 联合抽取:对于预测到的 s将其对应位置的编码结果通过一个 BiLSTM进行编码,然后拼接到 Self-Attention 的输出中,再通过 CNN 预测每一个 p 对应的 o 的开始和结束位置
作者设计了一种 Hierarchical Binary Tagging 的框架来解决这个问题,这个框架将三元组的抽取任务建模为三个级别的问题,从而能够更好解决三元组重叠的问题。其核心观点就是不再将关系抽取的过程看作实体对的离散标签,而是将其看作两个实体的映射关系,即f(s,o)−>r,整个三元组的过程为:
BERT Encoder层: 通过 BERT 得到每个词的词表征
Subject Tagger层: 该部分用于识别所有可能的 subject 对象。其通过对每一个位置的编码结果用两个分类器进行分类,来判断其是否是实体的开始或结束位置,即
其中,xi 为第 i 个词通过 BERT 的编码输出,W,b 为全连接层分类器的参数,激活函数为 sigmoid。对于句子中存在多个 subject 的情况,开始指针与结束指针通过就近匹配原则进行配对
Relation-specific Object Taggers: 针对每一个 subject,都需要对其进行之后的 object 进行预测,与 Subject Tagger 基本一致,主要区别在于:每一个关系类别独享一组 object 分类器,这一部分的输入除了输入序列的 BERT 编码结果,还额外加入了 subject 的特征,subject 特征为 subject 的每个字符的 BERT 表征的平均池化,主要表达式如下