把句法依存树当成输入
在n元关系抽取,大规模句子级别关系抽取都能充分利用依存树的信息
https://github.com/Cartus/AGGCN_TACRED
文章目录
创新:
提出soft pruning策略,把一颗完整的依存树送到全连通边加权图里。
这里的权重就通过attention学习得到
GCN
给定一个图,有n个节点,我们可以用
n
∗
n
n*n
n∗n的邻接矩阵表达这个图结构。
可以把边的方向性扩展到模型中,用来编码依存树
每个结点都添加一个自环
如果依存树里节点i到节点j有边,那在邻接矩阵里
A
i
j
=
1
A_{ij}=1
Aij=1,
A
j
i
=
1
A_{ji}=1
Aji=1。否则就都是0
第
l
l
l层节点
i
i
i卷积的运算,把输入特征的表示
h
l
−
1
h^{l-1}
hl−1作为输入,输出就叫
h
l
h^{l}
hl
最外面套的激活函数
ρ
\rho
ρ是ReLU
注意力引导层
大多数现在的修建策略,都是预定义好的。根据一个已经建立好的邻接矩阵,把full tree修建成子树。
可以看作是hard attention。
(hard attention我记得就是,把权重最高的那个设为1,其他的不考虑了,都搞0)
作者认为这种修剪策略太粗暴了,丢失了很多信息。提出soft pruning策略,在attention层,也就是把权值赋给每个边。
在attention层,我们把早期的依存树,扔到一个全连通边加权图,通过构建邻接矩阵 A → \overrightarrow{A} A
邻接矩阵里的值 A i j A_{ij} Aij,就表示从结点i到节点j的权值,可以通过attention构建。
拿到 A → \overrightarrow{A} A ,就可以把他作为后面的输入
在本文, A → \overrightarrow{A} A 用的多头注意力,可以使得模型获得不同子空间的信息。
Q K都等于
h
l
−
1
h^{l-1}
hl−1
图里就显示了,把一个标准的邻接矩阵转换成多头注意力引导的邻接矩阵
密连接层
为了捕获更加结构化的信息,需要加个密连接
加上以后可以训练更深层的网络,学到局部和远程信息
已经知道GCN有L层,比如第i层,他的每一层都连接到 他前面的i-1层上。图里画了。
定义g作为初始结点表示,和层里节点表示的连接。
每一个密连接,都有L个子层
这些子层的维度,
d
h
i
d
d
e
n
d_{hidden}
dhidden可以由层数
L
L
L和初始特征维度
d
d
d决定。
作者定义
d
h
i
d
d
e
n
=
d
/
L
d_{hidden} =d/L
dhidden=d/L
比如说,密连接层有3个子层,输入维度是300,每个子层的
d
h
i
d
d
e
n
d_{hidden}
dhidden=100
搞完以后把每个子层的输出拼接起来,输出的维度就还是300
因为我们有N个attention guide 临接矩阵,就需要N个密连接层
因此,计算改成这样的
线性组合层
来一个线性组合层,去把N个密连接的输出整合起来。
h
o
u
t
h_{out}
hout把N个密连接的输出拼接起来。
关系抽取层
经过上面一系列操作,就获得了所有token的隐藏表示
首先获得句子的表征
这里的mask就选择句子中,不是实体的标注表示
f
f
f是一个max pooling
相似的,也可以获得第i个实体的表示
实体表示和句子表示拼接起来,送到前馈神经网络,得到
h
f
i
n
a
l
h_{final}
hfinal
最后,
h
f
i
n
a
l
h_{final}
hfinal再逻辑回归做个分类
本质上还是一个关系分类任务,为什么都要说自己是关系抽取呢,疑惑