Joint entity recognition and relation extraction as a multi-head selection problem
发表在Expert Systems with Applications上的一篇文章。
Background(要解决的问题)
- 人工构造的特征或者是NLP tools得到的特征存在误差传播;
- pipeline方法忽略了任务之间的相关性。
Contributions(创新点)
- 模型不依赖于人工构造的特征或者是NLP tools得到的特征,实现了在不同的领域(金融,生物等)和不同的语言(英语,德语等)的泛化;
- 能同时进行实体和关系的抽取;
- 定义实体关系联合抽取问题为multi-head selection problem,解决一个实体可能与多个实体都存在关系的问题;
Method
0. An Example of the Method(Overview)
如上图所示,该模型包含Embedding Layer,BiLSTM Layer,CRF Layer,Sigmoid Layer四个主要的层。下面对它们进行逐一地阐述:
1. Embedding Layer
通常情况下,embedding都是直接用pre-trained好的word embedding。但是在Embedding Laye还使用BiLSTM引入character级别的embedding。作者认为character级别的embedding可以学习到prefix和suffix之类的词法特征,从而提供更多的信息(例如bedroom和restroom共享了后缀“room”)。示例如下:
2. BiLSTM Layer
就是传统的双向LSTM。
3. CRF Layer for Named Entity Recognition
也是传统的技术,在BiLSTM后面接CRF来更好地进行NER,论文中实体识别部分的标注方式用的是BIO。
4. Sigmoid Layer for Relation Extraction
该层采用multi-head selection作为关系抽取的解答范式。输入是Embedding Layer中得到的word embedding
concatenate上对应的实体类型的label embedding
。
multi-head的意思是对于一个实体,它可能与句子中的多个实体之间存在关系。同时,考虑到一个实体包含多个token,作者规定使用每个实体的最后一个token来代表这个实体。最后一个token就称为head。
例如,上面的example图中,对于实体John Smith
,存在着两个关系——<John Smith, works for, Disease Control Center>
和<John Smith, lives in, Atlanta>
。
假定当前需要判断$token_i$和$token_j$之间是否存在关系$r_k$,则计算公式如下:
$$
s(z_j, z_i, r_k) = V^{(r_k)}f(U^{(r_k)}z_j + W^{(r_k)}z_i + b^{(r_k)})
$$
其中,$z_j$和$z_i$是token的embedding,式子中的$f(\cdot)$是element-wise级别的激活函数(例如relu,tanh),$V^{(r_k)},U^{(r_k)},W^{(r_k)},b^{(r_k)}$都是根据关系$r_k$的不同而不同的参数。
将$s(z_j, z_i, r_k)$输入到一个Sigmoid层进行归一化,得到预测概率:
$$
Pr(head=w_j, label=r_k|w_i)=\sigma(s(z_i, z_j, r_k))
$$
从而可以进一步定义损失函数为:
$$
L_{rel} = \sum_{i=0}^{n}\sum_{j=0}^{m}-log\ Pr(head=y_{i,j}, relation=r_{i,j}|w_i)
$$
因此,结合NER和Relation Extraction两个任务,模型的整体损失为$L_{ner}+L_{rel}$。
Experiments
正如作者在introduction中说的,其提出的模型能够独立于数据集的领域和语言,所以其在4个不同的数据集上进行了实验以此来证明模型的泛化性:
- ACE 04
- CoNLL 04
- DREC
- ADE
如下图所示,论文在多个数据集上都达到了SOTA的成绩:
后记
思考
其实这篇论文的思想说来也很简单:就是构建了一个$N \times N \times C$的分类矩阵。其中$N$表示的是一个句子中token的数量,$C$是pre-defined relation type的数量。此外,不同于以往对一个token pair$<token_i,token_j>$上的$C$个关系进行$softmax$操作,这里是对每个关系都进行单独的$Sigmoid$二元分类。由此可见,模型的训练量应该是非常大的而且还存在着很大的0-1标签稀疏的问题!
虽然这篇论文是用在关系抽取任务上的,但是它提出的多头机制(multi-head)也是可以用在NER之上的,例如下面是知乎文章上的一个用多头机制解决NER的示例:
如上图所示,Span[呼][枢]=1
代表呼吸中枢是一个部位实体;Span[呼][累]=2
,代表呼吸中枢是一个症状实体;
后续阅读
- 该团队还在EMNLP2018上发表了一篇相似的工作Adversarial training for multi-context joint entity and relation extraction,可以继续阅读;
- ACL20的《Named Entity Recognition as Dependency Parsing》采取Biaffine机制构造Span矩阵
- EMNLP20的《HIT: Nested Named Entity Recognition via Head-Tail Pair and Token Interactio》采取focal loss来解决0-1标签不平衡问题。