Tensorflow2.2实现,见github仓库。
远程监督
关系抽取训练集标注成本高,一般使用远程监督方法(半监督)自动标注数据。远程监督假设,若知识库中两个实体具有某种关系,则任何包含这两个实体的句子都具有这种关系。
下图为使用远程监督自动标注数据的实例,其中第一句标注正确,而第二句标注错误。

远程监督是快速获取关系抽取训练集的有效方法,但其有 两个缺点:
- 远程监督假设过于强烈,易标注错误,从而引入噪声数据,多数远程监督方法的研究聚焦于降噪;
- 远程监督多用于使用精细特征(句法结构等)的监督模型,这些特征一般使用已有的NLP工具提取,不可避免会引入误差,使用NLP工具提取的传统特征,会造成误差的传播或积累,而且,远程监督语料库多来源于网络的非正式文本,句子长度不一,随着句子长度的增加,传统特征提取的正确性会急剧下降;
PCNN关系抽取
Piecewise Convolutional Neural Networks (PCNNs) with multi-instance learning 解决以上两个难题:
为解决第一个问题,将远程监督关系抽取视为多实例问题。多实例问题中,训练集由很多包组成,每个包多个实例,每个包的标签已知,而包中实例的标签未知。设计目标函数只考虑每一个包的预测标签,PCNN仅选取每包中预测类别最接近真实类别的一个实例作为包的输出,一定程度上可降低包中一些实例标注错误的影响。
为解决第二个问题,使用CNN网络自动提取特征,不使用复杂的NLP预处理。对卷积层输出使用单一最大池化,能一定程度提取文本特征表达,但难以捕获两个实体间的结构信息。PCNN基于两实体位置信息将卷积层输出划分为3个部分,基于此,PCNN可能表现出更好的性能。
PCNN与Text CNN的主要区别在于输入层引入position embedding、池化层分为三段!
PCNN方法论

如图3所示,PCNNS主要由四部分组成:Vector Representation, Convolution, Piecewise Max Pooling and Softmax Output.
向量表达
句子的向量表达为两部分的拼接结果:词嵌入和位置嵌入。
- 使用skip-gram方法预训练词向量;
- 使用Position Embeddings表示句子单词到两个实体的相对距离,如下图,单词son到实体Kojo Annan和Kofi Annan的相对距离分别为3和-2。

随机初始化两个位置嵌入矩阵,图3中词嵌入的维度是4,位置嵌入的维度是1。结合词嵌入和位置嵌入,句向量表示为
S
=
R
s
×
d
S=\R^{s\times d}
S=Rs×d
其中, s s s是句子长度(单词数), d = d w + d p ∗ 2 d=d_w+d_p*2 d=dw+dp∗2.
卷积层
对于长度为
s
s
s的句子,首尾填充
w
−
1
w-1
w−1长度,则卷积核
w
\boldsymbol w
w的输出
c
∈
R
s
+
w
−
1
,
c
j
=
w
q
j
−
w
+
1
:
j
,
1
≤
j
≤
s
+
w
−
1
\boldsymbol c\in\R^{s+w-1},\quad c_j=\boldsymbol w\boldsymbol q_{j-w+1:j},\quad 1\leq j\leq s+w-1
c∈Rs+w−1,cj=wqj−w+1:j,1≤j≤s+w−1
若使用
n
n
n个卷积核,则卷积操作的输出为
C
=
{
c
1
,
⋯
,
c
n
}
,
c
i
j
=
w
i
q
j
−
w
+
1
;
j
,
1
≤
i
≤
n
C=\{\boldsymbol c_1,\cdots,\boldsymbol c_n\},\quad c_{ij}=\boldsymbol w_i\boldsymbol q_{j-w+1;j}, \quad 1\leq i\leq n
C={c1,⋯,cn},cij=wiqj−w+1;j,1≤i≤n
图3中,卷积核的数目为3。
分段最大池化层
卷积层输出维度为 R n × ( s + w − 1 ) \R^{n\times (s+w-1)} Rn×(s+w−1),输出维度依赖于句子的长度。为便于应用于下游任务,卷积层的输出必须独立于序列长度,一般采用池化操作,主要思想是仅保留每个feature map中的主要的特征。
使用单一最大池化无法捕获两个实体的结构信息特征,PCNN使用分段最大池化代替单一最大池化,如图3所示,每个卷积核的输出
c
i
\boldsymbol c_i
ci被两个实体划分为3部分,分段最大池化输出长度为3的向量:
p
i
=
{
p
i
1
,
p
i
2
,
p
i
3
}
,
p
i
j
=
max
(
c
i
j
)
1
≤
i
≤
n
,
1
≤
j
≤
3
\boldsymbol p_i=\{p_{i1},p_{i2},p_{i3}\},\ p_{ij}=\max(c_{ij})\quad 1\leq i\leq n,\ 1\leq j\leq 3
pi={pi1,pi2,pi3}, pij=max(cij)1≤i≤n, 1≤j≤3
拼接所有卷积核分段池化层输出为
p
1
:
n
\boldsymbol p_{1:n}
p1:n,经非线性函数输出为(维度与句子长度无关)
g
=
tanh
(
p
1
:
n
)
,
g
∈
R
3
n
\boldsymbol g=\tanh(\boldsymbol p_{1:n}), \quad\boldsymbol g\in\R^{3n}
g=tanh(p1:n),g∈R3n
Softmax层
首先将输出转化为类别分数(softmax转换为类别概率)
o
=
W
1
g
+
b
,
W
1
∈
R
n
1
×
3
n
,
o
∈
R
n
1
\boldsymbol o=W_1\boldsymbol g+b,\quad W_1\in\R^{n_1\times 3n},\ \boldsymbol o\in\R^{n_1}
o=W1g+b,W1∈Rn1×3n, o∈Rn1
多实例学习
为降低数据标注错误的影响,PCNN使用多实例(半监督)学习。
考虑包含
T
T
T个包的训练集
{
M
1
,
M
2
,
⋯
,
M
T
}
\{M_1,M_2,\cdots,M_T\}
{M1,M2,⋯,MT},其中
M
i
=
{
m
i
1
,
m
i
2
,
⋯
,
m
i
q
i
}
M_i=\{m_i^1,m_i^2,\cdots,m_i^{q_i}\}
Mi={mi1,mi2,⋯,miqi},包中
q
i
q_i
qi个不同实例互为独立。对于实例
m
i
j
m_i^j
mij,神经网络
Θ
\Theta
Θ输出向量
o
\boldsymbol o
o,其中第
r
r
r个关系对应的概率为
p
(
r
∣
m
i
j
;
θ
)
=
e
o
r
∑
k
=
1
n
1
e
o
k
p(r|m_i^j;\theta)=\frac{e^{o_r}}{\sum_{k=1}^{n_1}e^{o^k}}
p(r∣mij;θ)=∑k=1n1eokeor
将目标函数定义为极小化每个包的损失,从而降低包中部分数据标注错误的影响。每个包的标签已知,包中实例标签未知,训练过程中将包中实例在包标签上的最大概率作为预测输出,则目标函数定义为
J
(
θ
)
=
∑
i
=
1
T
log
p
(
y
i
∣
m
i
j
;
θ
)
,
j
∗
=
arg
max
j
p
(
y
i
∣
m
i
j
;
θ
)
J(\theta)=\sum_{i=1}^T\log p(y_i|m_i^j;\theta),\quad j^*=\arg\max_jp(y_i|m_i^j;\theta)
J(θ)=i=1∑Tlogp(yi∣mij;θ),j∗=argjmaxp(yi∣mij;θ)

Reference
1. Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks
2. EMNLP 2015 | PCNN实现远程监督在关系提取中的应用