W2NER学习
论文
code
ner任务包含实体flat(平铺)、nested(嵌套)、 discontinuous(不连续)这三种类型的实体识别,之前的研究工作中,主要通过以下四种方式进行ner:
1.序列标注(sequence labeling)
2.基于图(hypergraph-based methods)
3.seq2seq
4.基于片段(span-based)
前3种方法都没办法实现三种实体类型的统一识别,第四种方式虽然实现了三种实体类型的统一识别,但仍然存在片段长度受限和计算复杂性高的问题。
之前的ner范式都是关注实体词边界,而在本文种则重点关注词内部的关联关系。
任务范式
本文将ner任务转换为词与词之间的分类任务,对于词汇,存在3种类别信息,分别是
‘None’:两个词之间不存在任何关系
‘Next-Neighboring-Word’:标记两个词是否相邻(用于识别嵌套实体和不连续实体)
‘Tail-Head-Word-*’:标记词尾对应的词首和实体类型,*
表示对应的实体类型(用于识别实体边界和实体类型)
模型结构
Encoder Layer
使用bert生成word pieces的向量表示,通过最大池化将几个word pieces的向量归一得到word的向量,之后接一层双向LSTM得到最后的word向量。
Convolution Layer
- Conditional Layer Normalization
通过Conditional Layer Normalization得到单词间的向量关系表达 V i j V_{ij} Vij
V i j = C L N ( h i , h j ) = γ i j ⊙ h j − μ σ + λ i j V_{ij}=CLN(h_i,h_j)=\gamma_{ij} \odot \frac{h_j-\mu}{\sigma}+\lambda_{ij} Vij=CLN(hi,hj)=γij⊙σhj−μ+λij - BERT-Style Grid Representation Build-Up
此处模仿bert的输入,将输入分为三个 B × N × N × D B\times N\times N\times D B×N×N×D的矩阵,拼接后使用多元感知机来得到具有位置信息和区域信息的向量表达。
**在源码中实际使用 dropout+conv2d+gelu 来进行降维和信息混合,conv2d为1*1
的卷积核 ** - Multi-Granularity Dilated Convolution
模仿TextCNN,使用多个不同膨胀率 l ∈ { 1 , 2 , 3 } l\in \{1,2,3\} l∈{1,2,3}的2维膨胀卷积去捕获不同距离的单词间的交互,一个膨胀卷积中的计算可以用如下公式表示:
Q l = σ ( D C o n v l ( C ) ) \mathbf{Q^l}=\sigma (DConv_l(\mathbf{C})) Ql=σ(DConvl(C))
Q l ∈ R N × N × d c \mathbf{Q^l}\in \mathbb{R}^{N\times N\times d_c} Ql∈RN×N×dc表示膨胀率为l的膨胀卷积输出结果, σ \sigma σ是GELU激活函数。
最后我们合并不同膨胀卷积的输出表达得到最后的词对网格表达
Q
\mathbf{Q}
Q。
Q
=
[
Q
1
,
Q
2
,
Q
3
]
∈
R
N
×
N
×
3
d
c
\mathbf{Q}=[\mathbf{Q_1},\mathbf{Q_2},\mathbf{Q_3}] \in \mathbb{R}^{N\times N\times 3d_c}
Q=[Q1,Q2,Q3]∈RN×N×3dc
Co-Predictor Layer
使用MLP和biaffine分别预测词对之间的关系,最后使用MLP对两个模块的预测结果进行合并。
- Biaffine Predictor
使用encoder layer的输出 H = h 1 , h 2 , h 3 , . . . , h N ∈ R N × d h \mathbf{H}={\mathbf{h_1},\mathbf{h_2},\mathbf{h_3},...,\mathbf{h_N}}\in \mathbb{R}^{N\times d_h} H=h1,h2,h3,...,hN∈RN×dh作为biaffine predictor的输入,通过下列步骤计算词对之间的关系 y i , j ′ \mathbf{y'_{i,j}} yi,j′:
s i = M L P 2 ( h i ) o j = M L P 3 ( h j ) y i , j ′ = s i T U o j + W [ s i ; o j ] + b \mathbf{s_i}=MLP_2(\mathbf{h_i}) \\ \mathbf{o_j}=MLP_3(\mathbf{h_j}) \\ \mathbf{y'_{i,j}}=\mathbf{s_i}^T\mathbf{U}\mathbf{o_j}+\mathbf{W}[\mathbf{s_i};\mathbf{o_j}]+\mathbf{b} si=MLP2(hi)oj=MLP3(hj)yi,j′=siTUoj+W[si;oj]+b - MLP Predictor
使用convolution layer输出的词对网络表达 Q \mathbf{Q} Q作为MLP Predictor的输入,通过多层感知机计算得到词对间关系 y i , j ′ ′ \mathbf{y''_{i,j}} yi,j′′
y i , j ′ ′ = M L P ( Q i , j ) \mathbf{y''_{i,j}}=MLP(Q_{i,j}) yi,j′′=MLP(Qi,j)
最终得分通过合并两个预测得分得到 y ′ y' y′和 y ′ ′ y'' y′′
y i , j = S o f t m a x ( y i , j ′ ′ + y i , j ′ ) \mathbf{y_{i,j}}=Softmax(\mathbf{y''_{i,j}}+\mathbf{y'_{i,j}}) yi,j=Softmax(yi,j′′+yi,j′)
Decoding
在解码时使用NNW用于构建词语关联关系,使用THW得到词语的边界和实体类型,通过两种标签体系结合实现对不同类型的实体正确识别。