[mathjax]
Zeng, Xiangrong, et al. “Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism.” ACL 2018
1 简介
这篇文章是为了提取句子中的“多重关系”。作者使用复制机制 + seq2seq 模型,用同一模型提取实体和关系,且能提取上面说的“多重关系”。作者还提出了 OneDecoder Model 与 MultiDecoder Model 两种解码模型,并取得 SOTA。
作者把句子中的三元组分成三类(Normal, EntityPairOverlap, SingleEntityOverlap),Normal 是三元组的每一项与其它三元组均无重叠,EntityPairOverlap 是三元组之间的实体对有重叠(我更倾向于说“复用”),SingleEntityOverlap 是三元组里只有一个实体有重叠。之前的抽取实体和关系的工作(详见这篇文章)只关注 Normal 的情况,这篇文章着手解决复用的问题。
2 相关工作
抽取实体和关系详见这篇文章
3 算法
3.1 单解码器模型
3.1.1 总览
单解码器模型结构如图所示,可分为编码、解码两个大部分

模型是先进行下面的编码部分,然后进行右面的解码部分。
编码部分是普普通通的 Bi-LSTM,这里不再多说。
解码部分是分步循环进行的。每次循环,都是先得到 decoder 的输出 $o_t^D$(右上角 D 就是 decoder,E 就是 encoder)。然后通过 $o_t^D$ ,计算得到关系或者实体的预测结果。为什么是或者呢?当 $t%3=1$ 时,我们预测关系,得到左边中间的粉色虚线框框;当 $t%3=2$ 时,从原来的句子复制第一个实体;当 $t%3=0$ 时,从原来的句子复制第二个实体,得到左边下面的橘色虚线框框;这三步的结果攒起来,就得到了三元组,即左上的绿色虚线框框。
不断循环下去,就得到很多三元组,这些三元组所包含的实体是可以复用的,因此复用的问题就解决了。那什么时候结束循环呢?作者定义了一个 NA 三元组,作为结束的标志。
3.1.2 循环解码
上面抽象地阐述了单解码器模型解码的过程,下面具体进行阐述。
首先,解码器 $t$ 时刻的输出 $o_t^D$ 和隐层状态 $h_t^D$ 的计算是由上一时刻的隐层状态 $h_{t-1}^D$ 和当前时刻的输入 $u_t$ 决定的:$$o^D_t,h_t^D= g(u_t,h_{t-1}^D)$$
其中 $g(·)$ 是解码的函数,定义 $h_0^D = s$ 为原始的句子。当前时刻的输入 $u_t$ 是由 attention 向量 $c_t$ 和上个时刻“复制的实体或者关系”的 embedding $v_t$ 决定的(明明应该是 $v_{t-1}$,这里就不更改论文原文中的错误了):$$u_t = [v_t;c_t]\cdot W^u$$
那 attention 向量,又是通过下列公式计算的:
$$ \begin{aligned} c_t &= \sum_{i=1}^n \alpha_i \times o_i^E \\ \alpha &= softmax(\beta) \\ \beta_i &= selu([h_{t-1}^D;o_i^E]\cdot W^c) \end{aligned} $$
其中 $h$ 是隐层表示向量,$o$ 是输出,$^E$ 是编码器的,$^D$ 是解码器的,$W^c$ 是权重的矩阵,$\alpha,\beta$ 都是中间结果。
于是,解码的过程就是 $h_{t-1}^D\rightarrow c_t\rightarrow u_t\rightarrow h_{t}^D$ 这样循环的。不过,上文说过,我们是三步得到一个三元组,三步一个小循环。这三步之中,唯一不同的就是 $v_t$,下面分别介绍这三种的预测方法。
3.1.3 预测关系
每个关系的 confidence vector $q^r = [q_1^r,…,q_m^r]$ 为:$$q^r = selu(o^D_cdot W^r + b^r)$$
为了能停止,引入 NA-relation:$$q^{NA} = selu(o^d_t\cdot W^{NA} + b^{NA})$$
上述两个拼到一起,过层 softmax,就得到了预测的关系:$$p^r = softmax([q^r;q^{NA}])$$
3.1.4 预测第一个实体
句子里面每个词的 confidence vector $q^e = [q^e_1,…,q^e_n]$ 为:$$q_i^e = selu([o_t^D;o_t^E]\cdot w^e)$$
其中的 $o_t^E$ 我理解就是“从原来的句子里抽取”的感觉。
再过层 softmax,得预测结果:$$p^e = softmax([q_e,q^{NA}])$$
3.1.5 预测第二个实体
和预测第一个实体差不多,只是不能和前者一样。于是引入一个 mask $M$:$$M_i = 1 \text{ if } i\ne k \text{ else } 0$$
在预测的时候就加入这个 mask:$$p^e = softmax([M\otimes q^e;q^{NA}])$$
其中 $\otimes$ 是 Hadamard product。
3.2 多解码器模型

单解码器模型是 a,多解码器模型是 b。区别在于,多解码器不把三个小步骤一视同仁的对待啦!对于预测关系($t%3=1$),输入有变:$$o^{D_i}_t,h_t^{D_i}= g^{D_i}(u_t,\hat{h}_{t-1}^{D_i})$$ $$\hat{h}_{t-1}^{D_i} = \frac{1}{2}(s+h_{t-1}^{D_{i-1}})$$
3.3 训练
损失函数采用负对数损失:$$L = \dfrac{1}{B\times T}\sum_{i=1}^B\sum_{t=1}^T -log(p(y_i^t | y_i^{},s_i, \theta))$$
其中 $B$ 是句子的个数,$T$ 是解码器最大的步数。
4 实验结果
设置 $T=15$,即最多预测五个三元组。
- 比不考虑复用的模型总体好,在复用问题上更是大幅领先
- 在 Normal 问题上,不如不考虑复用的模型,这说明我们模型判断三元组对数的能力还有待提升(要能判断出只有一对,那就不会落后了)
- 一句话的复用越多,效果越差
- 多解码器模型好于单解码器模型。这个结论作者是通过文本生成的任务判断的,我没看懂。
5 总结
这篇文章我觉得很有意思,首先作者很懂 seq2seq,很懂 attention,而且能找到关键的 $v_t$,实在是非常厉害。我离他差的好远,我现在需要先对基础模型,有和他一样深的理解!