关系抽取—OneRel
关系抽取存在的方法通常把联合抽取任务分解为多个模型或者多步进行实现,如下图1,这种方法忽视了三元组中的元素相关联且不可见,并且会有联级错误和多余冗余信息。为了解决上述问题提出新的关系抽取模型——OneRel,提出单模型单步解码的模型OneRel。OneRel模型包含scoring-based分类和特定关系角标注策略。code地址:https://github.com/ssnvxia/OneRel
亮点
(1)提出单模块单步关系抽取模型
(2)提出了一个scoring-based分类和特定关系角标注策略Rel-Spec Horns Tagging strategy
模型
任务定义
给定长度为 L L L的句子 S = { w 1 , w 2 , … , w L } \mathcal{S} = \{w_{1},w_{2},\dots,w_{L}\} S={w1,w2,…,wL},定义了 K K K种关系 R = { r 1 , r 2 , … , r K } \mathcal{R} = \{r_{1},r_{2},\dots,r_{K}\} R={r1,r2,…,rK},关系抽取的目标是提取出句子中 S \mathcal{S} S中所有可能的关系三元组组合 T = { ( h i , r i , t i ) } i = 1 N \mathcal{T} = \{(h_{i}, r_{i}, t_{i})\}_{i=1}^{N} T={(hi,ri,ti)}i=1N,其中 N N N是三元组的数量, h i h_{i} hi和 t i t_{i} ti是句子中的部分token片段,分别称为关系主体和关系客体。
Relation Specific Horns Tagging
关系标记结果记录在一个矩阵
M
L
×
M
×
L
M^{L\times M\times L}
ML×M×L中方便关系分类,在模型推理解码的时候会使用这个矩阵
M
M
M。这个
M
M
M是一个稀疏矩阵,训练的过程中有大量的负例,解码的时候高效。
Tagging
这里标记关系三元组
(
s
,
r
,
o
)
(s,r,o)
(s,r,o)中的头实体和尾实体相关位置信息,只标记HB-TB,HB-TE,HE-TE这三个位置信息,简单的说标记头实体和尾实体构成的矩形中的三个角位置信息,下面详细介绍记HB-TB,HB-TE,HE-TE标记方法。
(1)HB-TB
头实体(
s
s
s)开始词的位置和尾实体(
o
o
o)开始词的位置标记HB-TB
(2)HB-TE
头实体(
s
s
s)开始词的位置和尾实体(
o
o
o)结束词的位置标记HB-TE
(3)HE-TE
头实体(
s
s
s)结束词的位置和尾实体(
o
o
o)结束词的位置标记HE-TE
(4)-
没有关系标注
头实体New York State的开始token为New,结束token为State,尾实体New York City的开始token为New,结束token为City。在(New, New)标记为HB-TB,(New,City)标记为HB-TE,(State,City)标记为HE-TE
备注
上述tagging方式可以处理复杂的关系三元组,例如EntityPairOverlap (EPO),SingleEntityOverlap (SEO)等。
i. EntityPairOverlap (EPO)
三元组(New York City, Located in, New York State) (New York State, Contains, New York City)是EntityPairOverlap例子,标注如下:
ii. SingleEntityOverlap
三元组(New York City, City Name, New York)在The New York City is in New York State中是一个SEO例子。标注入下:
在代码里面
M
M
M是一个全零矩阵大小为(关系数量,tokens长度,tokens长度),对于一个标注三元组,在对应关系id的位置处关系主体关系客体首首位置标记HB-TB,关系主体关系客体首尾位置标记HB-TE,关系主体关系客体尾尾位置标记HE-TE。
Scoring-based Classifier
输入长度为
L
L
L的句子经过bert预训练模型得到d-维向量
{
e
1
,
e
2
,
…
,
e
L
}
=
B
E
R
T
(
{
x
1
,
x
2
,
…
,
x
L
}
)
\{e_{1},e_{2},\dots,e_{L}\} = BERT(\{x_{1},x_{2},\dots,x_{L}\})
{e1,e2,…,eL}=BERT({x1,x2,…,xL})
定义score 函数如下:
h
⋆
t
=
ϕ
(
W
[
h
;
t
]
T
+
b
)
h \star t = \phi(W[h;t]^{T} + b)
h⋆t=ϕ(W[h;t]T+b)
其中
h
h
h,
t
t
t是头尾表示,
W
∈
R
d
e
×
2
d
W \in \Large\boldsymbol{R}^{d_{e}\times2d}
W∈Rde×2d,
d
e
d_{e}
de是实体对儿表示,
ϕ
\phi
ϕ是
R
E
L
U
(
)
RELU()
RELU()激活函数,
[
;
]
[;]
[;]是矩阵拼接。
通过关系全连接层
R
d
e
×
4
K
\Large\boldsymbol{R}^{d_{e}\times 4K}
Rde×4K最终得到关系三元组
v
(
w
i
,
r
k
,
w
j
)
v_{(w_{i},r_{k},w_{j})}
v(wi,rk,wj)
v
(
w
i
,
r
k
,
w
j
)
=
R
T
ϕ
(
d
r
o
p
(
W
[
e
i
;
e
j
]
+
b
)
)
P
(
y
(
w
i
,
r
k
,
w
j
)
∣
S
)
=
S
o
f
t
m
a
x
(
v
(
w
i
,
r
k
,
w
j
)
)
v_{(w_{i},r_{k},w_{j})} = \Large\boldsymbol{R}^{T}\phi(drop(W[e_{i};e_{j}] + b)) \\ P(y_{(w_{i},r_{k},w_{j})}|\mathcal{S}) = Softmax(v_{(w_{i},r_{k},w_{j})})
v(wi,rk,wj)=RTϕ(drop(W[ei;ej]+b))P(y(wi,rk,wj)∣S)=Softmax(v(wi,rk,wj))
其中4是tagging的label数量,本论文标记特征为HB-TB,HB-TE,HE-TE,O这四个标记label
目标函数:
L
t
r
i
p
l
e
=
1
L
×
K
×
L
∑
i
=
1
L
∑
k
=
1
K
∑
j
=
1
L
log
P
(
y
(
w
i
,
r
k
,
w
j
)
=
g
(
w
i
,
r
k
,
w
j
)
∣
S
)
\mathcal{L}_{triple} = \frac{1}{L\times K \times L}\sum\limits_{i=1}^{L}\sum\limits_{k=1}^{K}\sum\limits_{j=1}^{L}\log P(y_{(w_{i},r_{k},w_{j})} = g_{(w_{i},r_{k},w_{j})}|\mathcal{S})
Ltriple=L×K×L1i=1∑Lk=1∑Kj=1∑LlogP(y(wi,rk,wj)=g(wi,rk,wj)∣S)
分类函数score与bert预训练模型输出的特征可以连接,
W
W
W矩阵可以自适应的学习从实体到实体对的特征,同时实体对拼接是不可交换的。在OneRel模型中每一个样本都会有关系矩阵
R
R
R记录着标记信息,在实际中接了两层全连接层。
解码
根据模型得到的矩阵
M
M
M查找出大于0的元素的index,首先判断这些index查找满足HB-TB的index,
然后根据满足HB-TB的index在查找满足HB-TE的index,最后从满足HB-TE的index找查找满足HE-TE的index,从而得到关系三元组
(
s
,
r
,
o
)
(s,r,o)
(s,r,o)。
实验结果
(1)论文中在
N
Y
T
⋆
NYT^{\star}
NYT⋆和
W
e
b
N
L
G
⋆
WebNLG^{\star}
WebNLG⋆中的实验结果如下:
在常用复杂的关系数据集
N
Y
T
⋆
NYT^{\star}
NYT⋆和
W
e
b
N
L
G
⋆
WebNLG^{\star}
WebNLG⋆达到了SOTA的效果。
(2)在百度关系2020数据集上的实验结果
在数据处理中的tokenizer采用的huggingface家的BertTokenizer,没有采用bert_keras中的tokenizer,中文句子中汉字之间没有拼接unused1特殊符号,可以节省内存。
模型结果如下:
precision:0.7313706008471454, recall:0.7400391555108716, f1 :0.7356793434879514
在验证集上的模型推理结果如下:
{
"text": "由江苏艺星影视文化传播有限公司投资,演员赵荀、傅程鹏、程愫、侯梦莎、任柯诺、安雅萍、杨舒、张进、杨山等主演的大型谍战题材电视剧《与狼共舞2》正在江苏卫视",
"triple_list_gold": [
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "程愫"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "侯梦莎"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "安雅萍"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "傅程鹏"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "任柯诺"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "赵荀"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "杨舒"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "张进"
}
],
"triple_list_pred": [
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "程愫"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "侯梦莎"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "安雅萍"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "傅程鹏"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "任柯诺"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "赵荀"
},
{
"subject": "与狼共舞2",
"relation": "出品公司",
"object": "江苏艺星影视文化传播有限公司"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "杨舒"
},
{
"subject": "与狼共舞2",
"relation": "主演",
"object": "张进"
}
],
"new": [
{
"subject": "与狼共舞2",
"relation": "出品公司",
"object": "江苏艺星影视文化传播有限公司"
}
],
"lack": []
}
以上是关系抽取OneRel模型的介绍,如有错误欢迎指证。