发展
-
Most existing supervised RE systems
大部分已有监督关系抽取系统需要大量标注的训练样本,这个过程又耗时又耗人力。 -
distant supervision ( 2009 )
假设:两个实体如果在知识库中存在某种关系,则包含这两个实体的非结构化句子均能表示出这种关系;
作用:可以通过对齐知识库和文本自动产生训练数据
不足:假设过于肯定,引入大量的噪声数据,具有标签错误的问题 -
multi-instance learning(2011)
多实例学习一定程度消除了错误标签的问题,然而不足的在于这种方法的所有特征的产生都依赖于NLP工具,如果产生的数据有误,那么错误将会被广泛传播开。 -
deep neural networks(2012-2015)
通过深度网络,无需人造构建特征。这些方法基于句子级别的数据,因为缺乏人类注解的训练数据,难以应用到大规模的知识库。 -
multi-instance learning with neural network model ( 2015 )
根据distant supervision 数据建立实体关系,具有比较好的效果,然而也难以满足。这种方法假设至少存在一个提到这两个实体的句子会表达实体间的关系,并且在训练和预测的时候为每个实体对选择最可能的句子。这个方法选择一个句子,会把其他的大量丰富的信息给丢失。 -
a sentenced-level attention-based CNN for distant supervised RE (2016)——本文
步骤:- 通过CNN将原生句子嵌入表达为具有语义向量
- 将关系表示为句子嵌入的语义组成来利用所有包含信息的句子
- 通过句子级别的注意力机制来动态消除实例噪声(错误标签)
- 通过句子级别的注意力机制来提取加权关系向量
优点:
- 利用所有的信息
- 解决错误标签问题
- 选择注意力机制有利于CNN模型提取实体关系
模型
总概
- 目标:给定一组句子 { x 1 , x 2 , . . . . , x n } \{x_1,x_2,....,x_n \} {x1,x2,....,xn}和两个对应的实体,模型要估计出每种关系的概率 r r r
- 步骤:
- 句子编码,通过CNN构建语义向量
- 通过句子级别的注意力机制提取能反映关系的句子
详细
句子编码
首先,将句子表达成稠密的实值向量(词嵌入方法),然后通过卷积层、池化层和非线性层,以此来构建句子的分布表示。
- 词嵌入
在词嵌入的过程中,为了指出实体的位置,同时也进行位置嵌入处理。比如
Bill_Gates is the founder of Microsoft
实体:Bill_Gates ,Microsoft
对于founder 的位置嵌入为:3,2
一般在关系抽取的任务中,与实体越近的词包含更多的关系信息。 - 卷积、池化、非线性层
挑战:句子长度可变,关系表示可能出现在任一位置
要求:能够利用局部信息也能利用全局信息
方式:卷积实现局部特征的提取,然后通过池化层联合局部特征,得到一个固定长度的向量 ——此部分有点不太理解
注意力机制
对编码后的向量引入注意力机制
s
=
∑
i
α
i
x
i
s=\sum_{i}\alpha_i\mathrm{x}_i
s=i∑αixi
这样可以对不同的预料进行加权,如果label错误,权重可以变小,从而解决label错误的问题。
α
i
=
exp
(
e
i
)
∑
k
exp
(
e
k
)
\alpha_{i}=\frac{\exp \left(e_{i}\right)}{\sum_{k} \exp \left(e_{k}\right)}
αi=∑kexp(ek)exp(ei)
其中
e
i
=
x
i
A
r
e_{i}=\mathrm{x}_{i} \mathrm{Ar}
ei=xiAr,
A
A
A为加权对角矩阵,
r
\mathrm{r}
r为与关系
r
r
r相关联的查询向量。先经过一次线性变换
o
=
M
s
+
d
\mathbf{o}=\mathbf{M s}+\mathbf{d}
o=Ms+d
其中
M
M
M是所有实体关系的向量所组成的矩阵,
d
\mathbf{d}
d是偏置向量。 这样使得网络的输出数目和关系数目相等,方便后续softmax层进行分类:
p
(
r
∣
S
,
θ
)
=
exp
(
o
r
)
∑
k
=
1
n
r
exp
(
o
k
)
p(r | S, \theta)=\frac{\exp \left(o_{r}\right)}{\sum_{k=1}^{n_{r}} \exp \left(o_{k}\right)}
p(r∣S,θ)=∑k=1nrexp(ok)exp(or)
损失函数
交叉熵
J
(
θ
)
=
∑
i
=
1
s
log
p
(
r
i
∣
S
i
,
θ
)
J(\theta)=\sum_{i=1}^{s} \log p\left(r_{i} | S_{i}, \theta\right)
J(θ)=i=1∑slogp(ri∣Si,θ)