论文:Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism

译文:

Abstract

句子中的关系事实往往是复杂的。不同的关系三元组在一个句子中可能有重叠。根据三元组重叠程度,我们将句子分为三种类型:普通、实体对重叠和单实体重叠。现有的方法主要集中在普通类上,不能准确提取关系三元组。在本文中,我们提出了一种基于复制机制的序列到序列学习的端到端模型,该模型可以从任意类的句子中联合提取关系事实。在解码过程中,我们采用了两种不同的解码策略:使用一个统一的解码器或使用多个独立的解码器。我们在两个公共数据集中测试我们的模型,我们的模型明显优于基线方法

1 Introduction

近年来,为了构建大型结构知识库,人们对从自然语言文本中提取关系事实进行了大量的研究。关系事实通常表示为由两个实体(一个实体对)和它们之间的语义关系组成的三元组,例如< Chicago, country, UnitedStates >。

到目前为止,大多数的方法主要集中在关系提取或分类的任务,识别两个预先分配的实体之间的语义关系。虽然已经取得了很大的进展,他们都假设实体是预先识别的,忽略了实体的提取。早期的著作采用流水线方式,首先进行实体识别,然后预测提取实体之间的关系。然而,管道框架忽略了实体识别和关系预测的相关性。最近的工作试图联合提取实体和关系。Yu and Lam (2010);Li and Ji (2014);Miwa和Sasaki(2014)设计了几个复杂的特性来构建这两个子任务之间的桥梁。与其他自然语言处理(NLP)任务类似,它们需要复杂的特征工程,并且严重依赖于已有的NLP工具进行特征提取。

近年来,随着深度学习在许多NLP任务上的成功,它也被应用于关系事实的提取。曾等(2014);Xu等(2015a,b)采用CNN或RNN进行关系分类。Miwa和Bansal (2016);Gupta等(2016);Zhang等(2017)将关系提取任务视为端到端(end2end)表格填充问题。郑等人(2017)提出了一种新的标注模式,采用基于递归神经网络(RNN)的序列标注模型,共同提取实体和关系。

然而,句子中的关系事实往往是复杂的。不同的关系三元组在一个句子中可能有重叠。这种现象使得上述方法,无论是基于深度学习的模型还是基于传统特征工程的联合模型,都无法准确提取出关系三元组。一般情况下,根据我们的观察,我们将句子按照三元组重叠程度分为三种类型,分别是Normal, entityairoverlap (EPO)和SingleEntityOverlap (SEO)。如图1所示,如果一个句子的三元组中没有重叠的实体,则该句子属于普通类。如果一个句子的三元组有重叠的实体对,这个句子属于EntityPairOverlap类。如通过一个句子有重叠的实体但是没有重叠的实体对,那么这个句子属于SingleEntityOverlap 。在我们的知识中,以往的研究方法多集中于普通类型,很少考虑其他类型。即使是基于神经网络的联合模型,它也只给一个单词分配一个标签,这意味着一个单词最多只能参与一个三元组。因此,三元组重叠的问题实际上没有得到解决。

为了解决上述挑战,我们的目标是设计一个模型,该模型可以从Normal、entityairoverlap和SingleEntityOverlap类的句子中提取三元组,包括实体和关系。为了解决三元组重叠的问题,必须允许一个实体自由地参与多个三元组。与以往的神经方法不同,我们提出了一种基于复制机制的序列到序列(Seq2Seq)学习的end2end模型,该模型可以从任意类的句子中联合提取相关事实。该模型的主要组成部分包括编码器和解码器两部分。编码器将自然语言语句(源语句)转换为固定长度的语义向量。然后,解码器读取这个向量并直接生成三个一组。要生成三元组,首先解码器生成关系。其次,采用复制机制,解码器从源语句中复制第一个实体(head实体)。最后,解码器从源语句复制第二个实体(尾部实体)。这样就可以提取多个三元组(具体来说,我们在解码过程中采用了两种不同的策略:使用一个统一的解码器(一个解码器)生成所有的三元组,或者使用多个分离的解码器(多解码器),每个解码器生成一个三元组)。在我们的模型中,当一个实体需要参与不同的三元组时,它可以被复制多次。因此,我们的模型可以处理三元组重叠问题,并同时处理entityairoverlap和SingleEntityOverlap。此外,由于在单个end2end神经网络中提取实体和关系,我们的模型可以联合提取实体和关系。

我们工作的主要贡献如下:

提出了一种基于序列到序列学习的神经模型,利用复制机制从句子中提取关系事实,实现了实体和关系的联合提取。

我们的模型可以通过复制机制来考虑关系三元组重叠问题。在我们的知识中,关系三元组重叠问题从来没有被解决过。

我们对两个公共数据集进行了实验。实验结果表明,改进后的系统性能优于现有系统,分别提高了39.8%和31.1%。

2 Related Work

Hendrickx等人(2010)通过给出带有注释实体的句子;曾等(2014);Xu等(2015a,b)将句子中的关系识别问题视为一个多类分类问题。曾等(2014)最早将CNN引入关系分类。Xu等人(2015a)和Xu等人(2015b)通过CNN或RNN从最短依赖路径学习关系表示。尽管这些模型取得了成功,但是它们忽略了从句子中提取实体,不能真正提取关系事实。

通过给出一个没有任何标注实体的句子,研究人员提出了几种提取实体和关系的方法。基于管道的方法,如Zelenko et al.(2003)和Chan and Roth(2011),忽略了实体提取和关系预测的相关性。为了解决这一问题,提出了几种联合模型。早期工作(Yu and Lam, 2010;Li and Ji, 2014;Miwa和Sasaki(2014)需要复杂的特征工程过程,特征提取严重依赖于NLP工具。近期的模型,如Miwa和Bansal (2016);Gupta等(2016);张等(2017);郑等(2017),基于神经网络联合提取实体和关系。这些模型基于标签框架,该框架将关系标签分配给一个或一对单词。尽管这些模型取得了成功,但是没有一个模型能够完全处理第一部分中提到的三元组重叠问题。原因在于他们的假设,即一个单词(或一对单词)只能被分配一个关系标签。

该工作基于具有复制机制的序列到序列学习,已被用于一些NLP任务。Dong和Lapata(2016)提出了一种基于注意力增强的编解码器模型的方法,该模型对输入话语进行编码并生成其逻辑形式。顾等(2016);He等(2017)将复制机制应用于句子生成。它们将一个段从源序列复制到目标序列。

3 Our Model

在本节中,我们介绍了一个基于复制机制的Seq2Seq学习的可微神经模型,该模型能够以end2end方式提取多个关系事实。

我们的神经模型首先将一个变长句子编码成一个固定长度的向量表示,然后将这个向量解码成相应的关系事实(三元组)。在解码时,我们可以用一个统一的解码器来解码所有的三元组,也可以用一个独立的解码器来解码所有的三元组。我们将它们分别表示为一个解码器模型和多个解码器模型。

3.1 OneDecoder Model

一个解码器模型的总体结构如图2所示

3.1.1 Encoder

编码一个句子s = [w_1, ..., w_n],其中w_t表示第t个单词,n为源句长度,首先将其转化为矩阵X = [x_1,...,x_n],其中x_t为第t个单词的嵌入。
正则RNN编码器按顺序读取矩阵X,在时间步t(1\leq t\leq n)上产生输出o^E_t和隐藏状态h^E_t:

                                                                        o^E_t,h^E_t=f(x_t,h^E_{t-1})                                                                        (1)

其中f(·)表示编码器函数。

接下来,我们的编码器使用双向RNN对输入的句子进行编码。正向和反向RNN分别获得输出序列\{\overrightarrow{o^E_1}, ..., \overrightarrow{o^E_n}\}\{ \overleftarrow{o^E_n}, ...,\overleftarrow{o^E_1} \}。然后我们连接\overrightarrow{o^E_t}\overleftarrow{o^E_{n-t+1}}来表示第t个单词。我们用O^E=[o^E_1,...,o^E_n],其中o^E_t=[\overrightarrow{o^E_t};\overleftarrow{o^E_{n-t+1}}],表示连接结果。同样,将前向和后向RNN隐状态串联起来表示句子,即s=[\overrightarrow{h^E_n};\overleftarrow{h^E_n}]

3.1.2 Decoder

解码器用于直接生成三元组。首先,解码器为三元组生成一个关系。其次,解码器从源语句中复制一个实体作为三元组的第一个实体。最后,解码器从源语句复制第二个实体。重复这个过程,解码器可以生成多个三元组。当所有有效的三元组生成后,解码器将生成NA三元组,这意味着“停止”,类似于神经语句生成中的“eos”符号。注意,NA三元组由NA-关系和NA-实体对组成。

如图3 (a)所示,在时间步长t(1≤t)中,我们计算解码器输出o^D_t和隐藏状态h^D_t如下:

                                                                           o^D_t,h^D_t = g(u_t,h^D_{t-1})                                                              (2)

其中g(·)为解码器函数,h^D_{t-1}为时间步t−1的隐藏状态。我们用源语句s的表示初始化h^D_0u_t为时间步t中的解码器输入,计算为:

                                                                             u_t = [v_t;c_t]\cdot W^u                                                                   (3)

其中c_t为注意向量,v_t为在时间步t - 1对应的复制实体的嵌入或预测关系。W^u是一个权矩阵。

注意向量。注意向量c_t计算如下:

                                                                            c_t = \sum_{i=1}^n \alpha_i \times o_i^E                                                                   (4)

                                                                            \alpha = softmax(\beta )                                                                  (5)

                                                                        \beta_i=selu([h^D_{t-1};o_i^E] \cdot w^c)                                                         (6)

o^E_i是编码器在时间t的输出,\alpha =[\alpha_1 ,..., \alpha_n ]\beta = [\beta_1 ,..., \beta_n ]是向量,w^c是一个权重向量。selu(·)为激活函数。

在得到解码器在t时的输出的o^D_t时,如果t%3 = 1(即t = 1, 4, 7,…),我们使用o^D_t来预测一个关系,这意味着我们正在解码一个新的三元组。否则,如果t%3 = 2(即t = 2,5,8,…),则使用o^D_t从源语句中复制第一个实体,如果t%3 = 0(即t = 3,6,9,…),则复制第二个实体。
预测关系。假设总共有m个有效关系。我们使用全连接层来计算置信向量q^r = [q^r_1,...,q^r_m]的所有有效关系:

                                                                      q^r= selu(o^D_t \cdot W^r + b^r)                                                          (7)

其中W^r为权重矩阵,b^r为偏置。当预测关系时,当模型试图生成NA-triplet时,预测na -关系是可能的。考虑到这一点,我们计算na -关系式的置信值为:

                                                                 q^{NA}= selu(o^D_t \cdot W^{NA} + b^{NA})                                                     (8)

其中W^{NA}为权重矩阵,b^{NA}为偏置。然后我们将q^rq^{NA}串联起来,形成所有关系(包括NA-关系)的置信向量,应用softmax得到概率分布p^r = [p^r_1,...,p^r_{m+1}] as:

                                                                    p^r = softmax([q^r;q^{NA}])                                                          (9)

 

我们选择概率最大的关系作为预测关系,并将其嵌入作为下一个时间步长的输入v_{t+1}


复制第一个实体。为了复制第一个实体,我们为原句中的所有单词计算置信向量q^e = [q^e_1,...,q^e_n]:

                                                                  q^e_i=selu([o^D_t;o_i^E] \cdot w^e)                                                             (10)

其中w^e是权向量。与关系预测相似,我们将q^eq^{NA}串联起来,应用softmax得到概率分布p^e = [p^e_1,...,p^e_{n+1}]:

                                                                 p^e=softmax([q^e;q^{NA}])                                                           (11)

同样,我们选择概率最高的单词作为预测单词,并使用它的嵌入v_{t+1}作为下一个时间步长输入。

复制第二个实体。复制第二个实体几乎与复制第一个实体相同。唯一的区别是,当复制第二个实体时,我们不能再次复制第一个实体。这是因为在一个有效的三元组中,两个实体必须是不同的。假设第一个被复制的实体是源语句中的第k个单词,我们引入一个带n (n是源语句的长度)元素的掩码向量M,其中:

                                                                      M_i=\left\{\begin{matrix} 1, & i \neq k \\ 0, & i = k \end{matrix}\right.                                                                   (12)

然后计算概率分布p^e为:

                                                            p^e=softmax([M \otimes q^e;q^{NA}])                                                       (13)

其中\otimes表示元素乘法。就像复制第一个实体一样,我们选择概率最高的单词作为预测单词,并使用它的嵌入v_{t+1}作为下一个时间步长输入。

3.2 MultiDecoder Model

多解码器模型是单解码器模型的扩展。主要区别是当解码三元组时,多解码器模型解码三元组时采用几个分开的解码器。图3 (b)为多解码器模型解码器的输入和输出。有两个解码器(带阴影的绿色和蓝色矩形)。解码器按顺序工作:第一个解码器生成第一个三元组,然后第二个解码器生成第二个三元组。

与(2)类似,我们计算第i(1≤i)解码器在时间步长t内的输出o^{D_i}_t和隐藏状态h^{D_i}_t如下:

                                                     o^{D_i}_t,h^{D_i}_t =\left\{\begin{matrix} g^{D_i}(u_t,h^{D_i}_{t-1}) & t \%3=2,0\\ g^{D_i}(u_t,\widehat{h}^{D_i}_{t-1}) & t \%3=1 \end{matrix}\right.                                                (14)

g^{D_i}(\cdot )为解码器i的解码器函数,u_t为时间步长t的解码器输入,我们将其与(3)一样计算。h^{D_i}_t是第i个解码器在时间步长t - 1内的隐藏状态。\widehat{h}^{D_i}_t是解码器的初始隐藏状态,计算如下:

                                                             \widehat{h}^{D_i}_t=\left\{\begin{matrix} s, &i=1 \\ \frac{1}{2}(s+h^{D_i}_{t-1}), & i>1 \end{matrix}\right.                                                         (15)

3.3 Training

采用负对数似然损失函数训练单解码器和多解码器模型。给定一批含有B个句子的数据S = \{s_1,...,s_B\},目标结果Y = \{y_1,...,y_B\}其中yi = [y^1_i,...,y^T_i]s_i的目标结果,损失函数定义如下:

                                                        L=\frac{1}{B \times T} \sum_{i=1}^B \sum_{t=1}^T -log(p(y_i^t|y_i^{<t},s_i,\theta ))                                         (16)
T为解码器的最大时间步长。p (x | y)是给定y时x的条件概率,θ表示整个模型的参数。

读后感

论文对不同三元组提取的场景进行了细致的划分,并精心设计了一个copy模型,联合了实体提取和关系分类两个步骤,总体来说有一定的创新性,但是论文中提到的方案并不能完全解决三元组重叠的问题,除了文中描述的三种情况,还有一种一个关系对应多个实体对的情况,这种情况用论文中方案无法解决。

 

源码地址

pytorch:https://github.com/WindChimeRan/pytorch_copy_re

tensorflow:https://github.com/xiangrongzeng/copy_re(作者提供)

make: Leaving directory '/home/wanglangtao/frifly/rk3399_linux_release_v2.5.1_20210301/buildroot' 2023-06-07T03:54:43 >>> host-gcc-initial 8.4.0 Building 2023-06-07T03:54:47 >>> host-gcc-initial 8.4.0 Installing to host directory 2023-06-07T03:54:49 >>> host-libtool 2.4.6 Extracting 2023-06-07T03:54:50 >>> host-libtool 2.4.6 Patching 2023-06-07T03:54:50 >>> host-libtool 2.4.6 Updating config.sub and config.guess 2023-06-07T03:54:50 >>> host-libtool 2.4.6 Configuring 2023-06-07T03:54:53 >>> host-libtool 2.4.6 Building 2023-06-07T03:54:54 >>> host-libtool 2.4.6 Installing to host directory 2023-06-07T03:54:55 >>> host-autoconf 2.69 Extracting 2023-06-07T03:54:55 >>> host-autoconf 2.69 Patching 2023-06-07T03:54:55 >>> host-autoconf 2.69 Updating config.sub and config.guess 2023-06-07T03:54:55 >>> host-autoconf 2.69 Patching libtool 2023-06-07T03:54:55 >>> host-autoconf 2.69 Configuring 2023-06-07T03:54:56 >>> host-autoconf 2.69 Building 2023-06-07T03:54:57 >>> host-autoconf 2.69 Installing to host directory 2023-06-07T03:54:57 >>> host-automake 1.15.1 Extracting 2023-06-07T03:54:57 >>> host-automake 1.15.1 Patching 2023-06-07T03:54:57 >>> host-automake 1.15.1 Updating config.sub and config.guess 2023-06-07T03:54:57 >>> host-automake 1.15.1 Patching libtool 2023-06-07T03:54:58 >>> host-automake 1.15.1 Configuring 2023-06-07T03:54:59 >>> host-automake 1.15.1 Building 2023-06-07T03:54:59 >>> host-automake 1.15.1 Installing to host directory 2023-06-07T03:55:00 >>> host-pkgconf 0.9.12 Extracting 2023-06-07T03:55:00 >>> host-pkgconf 0.9.12 Patching 2023-06-07T03:55:00 >>> host-pkgconf 0.9.12 Updating config.sub and config.guess 2023-06-07T03:55:00 >>> host-pkgconf 0.9.12 Patching libtool 2023-06-07T03:55:00 >>> host-pkgconf 0.9.12 Configuring 2023-06-07T03:55:00 >>> host-pkgconf 0.9.12 Building 2023-06-07T03:55:01 >>> host-pkgconf 0.9.12 Installing to host directory 2023-06-07T03:55:02 >>> host-libxml2 2.9.7 Extracting 2023-06-07T03:55:02 >>> host-libxml2 2.9.7 Patching 2023-06-07T03:55:02 >>> host-libxml2 2.9.7 Updating config.sub and config.guess 2023-06-07T03:55:02 >>> host-libxml2 2.9.7 Patching libtool 2023-06-07T03:55:02 >>> host-libxml2 2.9.7 Configuring 2023-06-07T03:55:06 >>> host-libxml2 2.9.7 Building 2023-06-07T03:55:22 >>> host-libxml2 2.9.7 Installing to host directory 2023-06-07T03:55:24 >>> host-gettext 0.19.8.1 Extracting 2023-06-07T03:55:25 >>> host-gettext 0.19.8.1 Patching 2023-06-07T03:55:26 >>> host-gettext 0.19.8.1 Updating config.sub and config.guess 2023-06-07T03:55:26 >>> host-gettext 0.19.8.1 Configuring 2023-06-07T03:55:26 >>> host-gettext 0.19.8.1 Autoreconfiguring 2023-06-07T03:55:51 >>> host-gettext 0.19.8.1 Patching libtool 2023-06-07T03:56:13 >>> host-gettext 0.19.8.1 Building什么问题
最新发布
06-08
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值