原文:A Novel Global Feature-Oriented Relational Triple Extraction Model based on Table Filling
代码:GRTE code
标签:
- EMNLP2021
- Relational triple extraction
- Joint extraction
- Table filling based
文献学习
内容学习
遵循发现问题-解决问题
的思路,来学习这篇文章。
1 本文所针对的问题 or 本文发现的问题
现有的基于填表的联合抽取方法
的局限处是,大多数只关注使用局部特征
,主要基于从单个token对或一些有限token对的填充历史中提取的局部特征来填充关系表,而忽略了关系和token对的全局关联
,这增加了在三元组提取过程中忽略一些重要信息的可能性。
2 基于填表的联合抽取方法
这类方法通常为每个关系维持一个表,这个表中的每个项是用来指示一个token对是否属于对应的关系。因此,这类方法的关键是,准确地填充关系表,然后基于填充的表抽取三元组。
这种方法将关系三元组抽取问题转换为给每个关系抽取实体对,具体地,每个关系都维持一个表,该表实际上代表的是所有可能的token对,每一项代表一个token对,而一个token对对于实体对而言,可能是其中的一个实体,也可能是subject和object的两个部分,也可能是一个subject的两个部分,还可能是一个object的两个部分。
因此,这种方法的关键是1) 设计学习哪种token对,即设计标签,2) 且设计对应的解码方式,以实现通过token对信息得到实体对。
与之对应的,实现时的关键是3) 设计如何获取token对(的标签)表示。
3 局部特征问题(发现的问题)
1) 问题考虑角度:
从以上本文发现的问题中可以得出,本文针对基于填表的关系抽取方法,主要考虑的改进角度是:如何能够得到每个token对对应的更好的标签表示。
2) 已有的方法是如何得到标签表示的?
想要改进每个token对对应的标签表示,先要明确已有的方法是如何得到token对对应的标签表示的。只有先清楚现在的方法是什么,才能基于此,提出所谓更好的方法。(基于现实)
根据本文所引用的相关工作,可以定位其参考对象:TPLinker
TPLinker中得出每个token对对应的标签表示的方法是将两个token对应的token表示进行拼接,喂进FFN中,再进行tanh激活。
3) 为什么已有的方法的标签表示方法被认为只考虑了局部特征?
以TPLinker为代表的已有的方法的标签表示方法,预测每个关系对应的每个token对的标签时,只使用了这个token对对应的token的信息,而其他的信息并没有对这个token对的标签表示有任何贡献,这就是所谓的只考虑了局部特征。
4) 为什么只考虑局部特征是一个局限点(问题)?
只要能够推断出,对于某个token对的标签表示,如果加入其他信息比没加入该信息更能确定该token对的标签,就能得出只考虑局部特征是一个局限点。
如果只是空想,是很难知道如何去加入信息,加入哪些信息,如何推断。最好的方法是,把各种例子拿上来观察。
比如TPLinker的图中的一个例子:
在图中的例子中,关系是born in,对应两个三元组,我们可以很容易的从两个三元组中,推出一个新的具有关系的实体对,即New York City-New York,这说明对于这个新的实体对中对应的token对,如果加入了已知的两个三元组信息,更能确定其标签。
类似地,GRTE文中也给出了例子说明加入所谓的全局关联信息有助于得到更好的token对的标签表示。
因此,只考虑局部特征是一个局限点。
4 关系和token对的全局关联(解决方法)
1) 本文针对发现的问题,所提出的解决问题的思想
提出一种充分利用上述两种全局关联的,面向全局特征的三元组提取模型。
根据发现问题的过程,可以自然地的提出一个改进思想,就是在表示token对的标签表示时,考虑到其他信息,这里的其他信息就是本文在发现问题的过程中得出的两类信息,一类是所谓的关系全局关联信息,一类是所谓的token对全局关联信息。
本文不仅仅从一个三元组内部的组成考虑精确地抽取一个三元组,而且考虑了不同三元组之间的关联性是否有助于精确地抽取各个三元组。
针对不同三元组之间的关联性,本文主要从相同关系的不同实体对三元组和不同关系相同实体的三元组的角度考虑,得出相同关系的不同实体对三元组,它们的实体对类型相同,从这一点上有助于互相推导;另外,相同关系的不同三元组有助于得到与之不同关系的相同实体的三元组,主要也是考虑不同关系的实体对类型。
以本文给出的例子来理解:
(Edward Thomas, live_in, New York),(John, live_in, USA),这两个三元组互相都有助于推导。另外,上面两个三元组有助于三元组(New York, located_in, USA)的推导。
2) 为什么本文提出的方法达到了利用全局关联信息的目的?
本文的全局关联信息挖掘模块,首先是将已有的每个关系对应的表特征进行拼接,再分别进行最大池化和FFN操作,得出subject关联表特征和object关联表特征。subject关联表特征和object关联表特征是包含了全局关系和全局token对的侧重于subject和object的表特征。
这里已经包含了两种全局信息,但为什么还要进行后续操作呢?
可能本文认为,全局信息中的每一种对每个token的特征侧重点是不同的,因此做了多头自注意和多头注意力,以得到更好的侧重于subject和object的表特征。
本文认为分别对subject关联表特征和object关联表特征进行多头自注意,能够生成更好的包含了全局关系关联信息的subject关联表特征和object关联表特征。
再将上一步得到的subject关联表特征和object关联表特征与原句对应的token表示序列进行注意力,以使得包含了全局关系关联的特征包含H中对应的token全局关联信息,从而生成具有全局关联信息的subejct特征和object特征。
3) 本文提出的对应于解决方法的实现思路
本文将要生成更好的token对表示,转换为生成包含全局关联信息的subject特征和object特征:
- 首先根据已有的所有关系的表特征,生成包含全局关系和全局token对信息的subject表特征和object表特征;
- 再将subject表特征和object表特征进行多头自注意,以生成更好的包含全局关系信息的subject表特征和object表特征;
- 再将上一步得出的包含全局关系信息的subject表特征和object表特征与原句token表示序列进行自注意,以生成更好包含全局token对的subject特征和object特征。
5 本文针对发现的问题,所提出的解决问题的思想
提出一种充分利用上述两种全局关联的,面向全局特征的三元组提取模型。
6 基于解决思想,提出的实现方案
- 首先为每个关系生成一个表特征;
- 然后从生成的表特征中挖掘两种全局关联;
- 再将挖掘的两种全局关联集成到每个关系的表特征中;
- 这个“生成-挖掘-集成”过程执行多次,以便逐步细化每个关系的表特征;
- 最后,根据每个关系的精炼出的表特征填充其对应的表,并根据其填充的表提取链接到该关系的所有三元组。
7 GRTE的具体实现
模型总体架构图:
1)填表策略:
- a.给定一个句子,将为每个关系维护一个表,GRTE模型的核心是给表中的每个项分配一个合适的标签,每个项对应于一个token对。这里定义了一个标签集合L = {"N/A", "MMH", "MMT", "MSH", "MST", "SMH", "SMT", "SS"}。
对于三个字符的标签,其中第一个字符代表的是subject是多token实体(M)还是单token实体(S),第二个字符代表的是object是多token实体(M)还是单token实体(S),第三个字符代表的是subject和object都是头token(H)还是都是尾token(T)。
- 对于SS标签,表示的是这个token对就是一个实体对。
- 对于N/A标签,表示的是这个token对不属于以上任何一类。
- b.该填表策略的优势
每个标签不仅含有subject和object的位置信息,还包含subject或object是否为多token实体的信息。因此,以这种策略进行填表时,需要填的项的数量会比较少。
2)具体实现细节: - a.Encoder模块:(简单地说,所谓subject特征和object特征就是为每个token生成的表示。注意参数)
输入为句子,首先通过编码,得到token表示序列H;再将token表示序列分别喂进两个FFN来生成初始的subject特征和object特征(token表示序列),具体公式如下: - b.表特征生成模块:(所谓的表特征就是每个关系对应的表中每个项的标签表示,即每个token对的标签表示,注意参数Wr,说明每个关系每次迭代都对应相同的前馈网络)
假设当前为第t次迭代,则将第t次迭代对应的subject特征和object特征作为输入,来生成这次每个关系对应的表特征。具体地,通过将subject特征中的第i个token表示和object特征中的第j个token表示进行矩阵相乘操作,再将乘积结果进行RELU激活,再将激活结果喂进FFN,从而得到一个表特征中的(i, j)token对对应的标签表示。具体公式如下: c.全局特征挖掘模块:
该模块的作用是挖掘出两类全局关联特征,基于该全局特征生成新的subject特征和object特征,再将新的subject特征和object特征送回表特征生成模块以迭代出新的表特征。具体地:- 第一步是结合当前表特征:
首先将当前所有关系对应的表特征进行拼接得到一个统一的表特征TF,该表特征中既包含了token对的信息也包含了关系信息;然后对该表特征采用最大池化操作和FFN模型,以分别生成subject关联表特征和object关联表特征。具体公式如下: - 第二步是生成全局关联特征:
首先将生成的subject关联的表特征和生成的object关联表特征分别进行多头自注意,以分别生成subject全局关系关联特征和object全局关系关联特征。
再将subject全局关系关联特征和object全局关系关联特征分别与句子的token表示序列进行多头注意力,以分别生成包含两种全局关联特征的subject特征和object特征。
最后将具有两种全局关联特征的subject特征和object特征进行RELU激活,以得到subject全局关联特征和object全局关联特征。具体公式如下: - 第三步调整生成的subject全局关联特征和object全局关联特征:
考虑到模型深度太深会导致梯度消失问题,采用残差网络来分别生成最终的subject全局关联特征和object全局关联特征。具体公式如下:
- 第一步是结合当前表特征:
d.三元组生成模块
以表特征生成模块的最后一次迭代生成的表特征作为输入,首先得到每个关系对应的表中的每个项的预测标签。具体公式如下:
再根据解码算法来生成三元组。解码算法可以总结为:
对每个关系的表进行如下操作:- 首先根据表中的标签,分别得到头token对、尾token对和实体对的三个token对集合;
- 然后对每个token对进行如下操作:
如果该token对属于头token对,则从尾token对中找到离其最近的可以匹配的尾token对,再结合其所在关系,从而生成一个前向搜索对应的三元组。
如果该token对属于尾token对,则从头token对中找到离其最近的可以匹配的头token对,再结合其所在关系,从而生成一个后向搜索对应的三元组。
如果该token对属于实体对,结合其所在关系,从而生成一个三元组。
将所得到到所有前向搜索对应的三元组、后向搜索对应的三元组和三元组合并,生成所有三元组。
具体算法如下:
3)损失函数
其损失函数就是每个关系对应的表的每个项的标签的损失的总和,具体如下:
8 GRTE实验
1)总体性能实验,说明GRTE总体性能就是SOTA
2)消融实验,说明GRET每个模块的设计都很好,尤其是突出全局关联特征部分
3)迭代次数超参数实验,分析出最好的超参数次数,并分析这种次数的优势
4)不同句子类型的复杂场景实验,说明GRTE在复杂场景的性能也很好
5)计算效率实验,说明GRTE的计算效率并不是缺点
写作学习
摘要
1) 本文的主题:基于填表的关系三元组抽取方法
- 描述方式:从
重要性
引出本文的主题
。 - 话术:
topic are attracting growing research interest due to their promising performance and their abilities on...
2) 本文解决的主题中的具体问题:现有方法只利用了局部特征
- 描述方式:先给出结论,即泛泛的局限的表达+原因,即导致该局限的具体问题,即本文的改进点。
- 话术:
However, this kind of methods are + limitation + reason(specific problem)
。
3) 本文的解决方法或者说本文的工作:GRTE模型
描述方式:模型结合改进思想
- 模型即本文解决方法的具体实现
- 改进思想即能够解决上述问题的具体改进点
4) 方法的具体描述:
- 描述方式:实现本文关注的主题的具体步骤,具体步骤中包含着本文提出的改进。
5) 方法的效果:
- 描述方式:数据集+效果(+代码)
- 话术:
We evaluate the proposed model on xxx datasets. Experimental results show our model is effective and it achieves state-of-the-art results on all of these datasets. The source code of our work is available at: xxx
引言
主题介绍
- 研究主题是什么
- 为什么值得研究(重要性)
研究背景:明确自己的研究定位,从而据此来描述研究背景,描述研究背景就是告诉读者为什么要研究这一点
本文的研究定位为:联合式关系三元组抽取问题中的基于填表的关系三元组抽取方法,针对现有这种方法中的局部特征问题进行改进- 联合式关系三元组抽取方法介绍,优势介绍,表明为什么值得研究。
- 基于填表的关系三元组方法介绍,优势介绍,表明为什么值得研究。
研究问题:衔接研究背景,说明本文研究的问题
- 现有的基于填表的关系三元组方法的局限处,表明本文的改进点。
- 要有理有据的说明为什么是一个问题或者说为什么有改进的空间。
解决方法
- 表明本文研究出的解决方法
- 介绍本文研究出的解决方法处理研究主题的具体步骤
实现效果
- 格式:数据集+实验结果说明
- 格式:数据集+实验结果说明
相关工作
主题:RTE
具体问题:基于填表的RTE方法的改进
解决方案:不涉及参考别的工作
因此,得出本文的定位:
- 不是针对RTE方法发展下来的出现的问题。
- 也不是针对RTE方法提出一种全新的策略或者说框架。
- 是针对RTE方法中的一个小主题:基于填表的方法进行的改进方法。
因此,本文显然适合按主题
来组织相关工作。
由于本文提出的解决方案不涉及其他工作,因此,相关工作
部分本质上都是主题
相关工作,其中包含着研究的具体问题
即基于填表的方法
的相关工作。具体地:
- 针对
主题
,RTE
的典型方法就是流水线方法
和联合学习方法
,由于本文属于联合学习方法
,因此采用问题-解决问题
的组织方式组织这两方面的相关工作,也表明本文研究的具体问题属于联合学习方法
范畴内。 针对
具体研究问题
,本文直接按主题
对联合学习方法
进行分类,以组织这方面的相关工作。- 针对每个
主题
的描述,主要格式为:相关工作引入+主题方法介绍。 - 针对
主题方法介绍
,有两种方式:1)简单概述;2)根据每个相关工作描述每个相关工作的方法。
- 针对每个
方法
针对基于填表的关系三元组抽取
这个研究主题,对应基于填表的关系三元组抽取任务
,针对该任务设计的具体解决方案,包含以下几个主要部分:
- 设计模型具体要学习的目标token对,即表项,这对应着设计token对即表项所具有的标签。简单地说,就是设计标签。
- 设计的标签时就有一套对应的解码算法,也就是根据具有这些标签的表项如何得出实体对,进而得出关系三元组。简单地说,就是设计解码算法。
- 有了标签和对应的解码算法,下一步就是要设计如何填表。这就对应具体的模型设计,而该模型能够体现出本文的改进点,即相比于其他模型的优势。简单地说,就是设计模型。
以上三个主要部分结合在一起,基于改进点的解决基于填表的关系三元组抽取任务
的解决方法就呈现出来了。
本文在Methodology
部分的写作主要分为两大部分:
- 填表策略:对应呈现设计的标签。
- 模型细节:对应呈现设计的模型和设计的解码算法。
具体地,每部分的写作:
1) 填表策略
首先,通过对以下几个问题的回答来引出本文的填表策略
即设计的标签:
填表策略
指的是什么?为什么要填表策略
?- 是对解决基于填表的关系三元组抽取问题的模型的一个关键;
- 就是指赋给每个关系对应的表项的标签。
然后,具体描述本文设计的标签:
- 每个标签针对的是一个token对,一个标签被赋予了标签代表什么含义?
- 每个标签是什么含义?
最后,举例说明。
2) 模型细节
首先,通过对以下几个问题的回答引出具体的模型细节
:
- 模型架构图;
- 介绍模型中每个主要部分;
- 概况模型中每个主要部分之间的联系,即如何相互作用得到目标。
然后,对每个主要部分进行详细描述: Encoder模块:
- 所使用的Encoder模型;
- 该部分的输入及对输入具体如何处理,得到什么输出结果,具体处理公式。
类似于一种数据流程展示,所用的数据,数据如何得到处理,数据如何流动的,最后得出的结果数据是什么。
TFG模块:
- 对该模块要用到的数据符号进行说明。
- 同Encoder模块。
GFM模块:
该模块又细分步骤,只要细分一般用到总分
结构,即先说明该模块总体作用,然后引出具体子步骤,对每个子步骤的写作内容为:- 该子步骤的作用;
- 同Encoder模块。
TG模块;
- 同TFG模块。
- 举例说明。
总的来说,对每个步骤的描述,实质上就是描述,处理的输入是什么,数据如何处理,如何传递,最后得到的输出数据是什么。另外,涉及公式的,每个数据符号要说明清楚;涉及模型的,用的模型要说明清楚;涉及能够具体举例的,举例说明清楚。
3) 损失函数
公式。
- 公式中每个符号要么前文已经说明清楚,没说清楚的都要说清楚。
代码学习
数据集
数据格式说明:
- 使用的数据集的数据格式为:
[sentence_sample1, sentence_sample2, ..., sentence_samplen]
, - 其中每个
sentence_sample
的格式为:{"text": sentence(String), "triple_list":[triple1, triple2, ...]}
, - 其中
triple_list
中的每个triple
的格式为:[subject(String), relation(String), object(String)]
总的来说,数据集为句子样本列表
,其中每个元素为一个句子样本
。
每个句子样本
的格式为字典
,其中包含两组key-value
,分别为以句子字符串
为值的text
和以三元组列表
为值的triple_list
。triple_list
中每个表示三元组的元素为列表
,其中包含三个字符串
,分别为subject
,relation
和object
对应的字符串
。