Tensorflow2.2实现,见github仓库。
关系抽取训练集标注成本高,一般使用远程监督方法(半监督)自动标注数据。远程监督假设,若知识库中两个实体具有某种关系,则任何包含这两个实体的句子都具有这种关系。
下图为使用远程监督自动标注数据的实例,其中第一句标注正确,而第二句标注错误。
远程监督是快速获取关系抽取训练集的有效方法,但其有 两个缺点:
Piecewise Convolutional Neural Networks (PCNNs) with multi-instance learning 解决以上两个难题:
为解决第一个问题,将远程监督关系抽取视为多实例问题。多实例问题中,训练集由很多包组成,每个包多个实例,每个包的标签已知,而包中实例的标签未知。设计目标函数只考虑每一个包的预测标签,PCNN仅选取每包中预测类别最接近真实类别的一个实例作为包的输出,一定程度上可降低包中一些实例标注错误的影响。
为解决第二个问题,使用CNN网络自动提取特征,不使用复杂的NLP预处理。对卷积层输出使用单一最大池化,能一定程度提取文本特征表达,但难以捕获两个实体间的结构信息。PCNN基于两实体位置信息将卷积层输出划分为3个部分,基于此,PCNN可能表现出更好的性能。
PCNN与Text CNN的主要区别在于输入层引入position embedding、池化层分为三段!
如图3所示,PCNNS主要由四部分组成:Vector Representation, Convolution, Piecewise Max Pooling and Softmax Output.
句子的向量表达为两部分的拼接结果:词嵌入和位置嵌入。
随机初始化两个位置嵌入矩阵,图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转换为类别概率)
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;θ)
1. Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks
2. EMNLP 2015 | PCNN实现远程监督在关系提取中的应用