1 前言

今天分享2020ACL会议一篇关于实体关系抽取的paper,论文的题目为:A Novel Cascade Binary Tagging Framework for Relational Triple Extraction。论文主要目的解决实体关系中关系重叠的问题,创新之处是抛开之前先实体识别,然后关系分类的方法,而采用概率建模方式,一步步级联的方式抽取三元组,这样避免了先前方法存在的问题(两两匹对的方式进行关系预测造成大量噪声和计算复杂性),而是直接建模预测,提高任务识别的简洁性和准确性。其中在实体识别上采用了二分类的标注方式也是论文的一个亮点。论文下载地址https://www.aclweb.org/anthology/2020.acl-main.136.pdf,源码开源地址为:https://github.com/weizhepei/CasRel

2 About Relational Triple Extraction

所谓的实体关系抽取(RE)就是判断一段文本中实体之间存在何种关系,关系一般是事先定义好的。如下图:

抽取三元组 python 实体三元组抽取_抽取三元组 python

文本中存在三个实体[“九玄珠”、“众横中文网”、“龙马”],其中“九玄珠”与“众横中文网”存在“连载网站”的关系,“九玄珠”与“龙马”存在“作者”的关系,[“连载网站”,“作者”]为关系集合。这样任务在学术上可以表示为:Input:sentenceOutput:(s,r,o)其中 (s, r, o)是三元组形式,s是subject(主实体),o是object(客实体),r是relation(两个实体之间的关系),(s, r, o)可以理解的“s的r是o”。一般情况,r是预定好的,组成一个关系集合。该任务的意义是:抽取关系三元组是构建知识图谱的一个核心环节。

3 Problems in RE Task

根据上面介绍,可能有人觉得RE Task没有多复杂,难度系数较低。而现实情况中,RE task存在的问题远远不是上面定义所能概括的,其复杂性有以下几个方面:
   (1) 可能出现“一个s、多个(r, o)”的形式,比如“《战狼》的主演包括吴京和余男”,那么要抽出“(战狼, 主演, 吴京)”、“(战狼, 主演, 余男)”;
   (2) 可能有“多个s、一个(r, o)”甚至是“多个s、多个(r, o)”的样本,比如“《战狼》、《战狼2》的主演都是吴京”,那么要抽出“(战狼, 主演, 吴京)”、“(战狼2, 主演, 吴京)”;
   (3) 同一对(s, o)也可能对应多个r,比如“《战狼》的主演和导演都是吴京”,那么要抽出“(战狼, 主演, 吴京)”、“(战狼, 导演, 吴京)”;
   (4) 极端情况下,s、o之间是可能重叠的,比如“《鲁迅自传》由江苏文艺出版社出版”,严格上来讲,除了要抽出“(鲁迅自传, 出版社, 江苏文艺出版社)”外,还应该抽取出“(鲁迅自传, 作者, 鲁迅)”。
上面4条是RE 任务在真实数据场景常遇到的问题。其实,还有真正的一个难点是:存在关系的两实体之间的距离很远,可能在两个句子中,甚至在不同的段落。这类问题应该是目前都没有得到有效的解决,而上述是有一个潜在的假设:识别的实体都在一个句子范围内。
该paper解决的任务问题同样是在这个假设内,只是具体解决上述(1),(2),(3)描述的问题。

3 Task Target

针对上述存在的问题,作者发现目前很少paper研究RE任务中关系重叠的问题(few existing works excel in solving the overlapping triple problem where multiple relational triples in the same sentence share the same entities)

抽取三元组 python 实体三元组抽取_三元函数的几何图形一般是_02

如上图,论文中RE 问题分成三类,Normal、EPO、SEO,EPO对应上面的(3),SEO对应(1),(2)。根据定义的问题,论文就提出了:一种新颖的级联二分类标注框架进行实体三元组抽取(A Novel Cascade Binary Tagging Framework for Relational Triple Extraction)。接下来,介绍论文的model。

4 Main idea

作者把三元组(s,r,o)抽取任务可以转成一个概率图问题:
对输入的文本x:
P((s,r,o)|x)=P(s|x)*P((r,o)|x,s)简单来说:
第一步:利用输入文本,识别实体s
第二步:利用输入文本和识别出的s, 识别与s有r关系的实体o
下图为论文按上述概率思想展开的详细计算公式,其中包括负样本的计算。

抽取三元组 python 实体三元组抽取_三元组_03

5 Model

抽取三元组 python 实体三元组抽取_三元函数的几何图形一般是_04

model

上述为论文模型整体框架图,从图上看方法比较简洁,具体步骤如下:   (1) 利用BERT预训练模型,将文本进行编码,得到文本向量

;   (2) 采用二分标注方式,识别subject实体s的start和end,进而识别文本中所有的s;   (3) 将识别s向量和之前文本向量进行融合,生成新的句子向量

;   (4) 利用融合的向量预测带关系的object实体o,同样是采用二分类标注方式;

在该识别框架上,对比之前分类思想,该模型的优势:避免两两匹对的方式进行关系预测,降低计算复杂性,并能直接去学习目标,此外也减少了一定量的负样本计算,但在识别实体s这个步骤同样存在负样本的问题。

5 Loss Function

抽取三元组 python 实体三元组抽取_三元组_05

此图为论文定义的损失函数计算公式,包括三部分:一为识别s产生的损失,二为识别带关系o产生识别,三为识别没带关系o产生的损失;在源码表示为,就是实体s的start与end损失+实体o的start与end损失,如下图显示。

抽取三元组 python 实体三元组抽取_二分类_06

6 Experiment

抽取三元组 python 实体三元组抽取_计算复杂性_07

抽取三元组 python 实体三元组抽取_二分类_08

在实验上,论文用了两个数据集,并按事先定义的关系类型进行了分类,实验对比结果显示,在两个数据集上都有10%以上的提升,这个结果看了我有点不敢相信...,甚至一度怀疑——这个方法有这么大优势吗?后来想明白了一点:很可能paper中对比的方法都没有用BERT,而本篇却是在BERT基础上跑出来的。下图展示为在RE任务上三个分类的实验情况,结果也是非常好的。

抽取三元组 python 实体三元组抽取_二分类_09

7 一些细节及思考:

   (1) 论文在训练阶段,实体s预测后进行句子向量融合的时候,是采用随机抽样的方式,只抽取一个s参入后续的(r,o)预测任务;如果全部参与预测,会不会好些?
   (2)采用start,end这样二分类的方式进行实体识别,将实体中间部分的词与其他不是实体的词都等同于other,这样是不是弱化了实体的信息?

8 结语

整体上,我内心是很认可本篇paper提出的方法,尽管这个框架在2019年由苏**在一次做RE比赛任务后分享出来的,这次作者在此基础上进行了修改,比之前的更为简洁。该框架还有很多地方值得研究和完善的地方,希望能引出大家更多的兴趣和思考...