《Leverage Lexical Knowledge for Chinese Named Entity Recognition via》解读

@ 苹果树数据科技有限公司-AI部

论文地址与代码地址

代码地址
论文地址

Abstract

词汇边界信息的缺失是高性能NER的主要障碍之一,幸运的是,自动构建的结构化词典包含丰富的词汇边界信息和词汇语义信息。然而,融合中文NER的词汇信息面临了挑战,因为self-matched lexical words和最近的上下文词汇,作者提出了Collborative Graph Network来解决这个挑战。实验结果显示:在多个任务上,不仅性能提升,而且速度比SOTA模型快6-7倍。

1 Introduction

套路,所有论文一样的写法

2 Related Work

套路,所有论文一样的写法

3 Approach

先介绍图的构建,构建的图能将self-matched lexical words和最近邻的上下文词汇融入到句子,其实图就是mask,如果大家对transformer的Attention机制比较了解的话,就不难理解了,就是利用这个mask来屏蔽掉那些我们不需要关注的信息;然后介绍Collborative Graph Network,它是中文NER任务的核心。

3.1 The Construction of Graphs

总共有三种图,C-graph、T-graph、L-graph,假设词典V={希尔, 希尔顿, 离开, 北京, 北京机场},原始的文本是:希尔顿离开北京机场了,三种图有相同的顶点即点集,点集包括句子的字符和matched lexical words,但是边集完全不同。三种图如下图所示:

  • C-graph:
    在这里插入图片描述
    它能捕捉self-matched lexical words的边界和语义信息
  • T-graph
    在这里插入图片描述
    它能帮助字符来捕捉最近的上下文词汇的语义信息。
  • L-graph
    在这里插入图片描述
    它能捕捉最近邻的上下文词汇信息和self-matched lexical words。
  • 如何表示三种图
    三种图的点集相同,只是边集不同,可以使用临界矩阵来表示边集,假设邻接矩阵M,M[i][j]=1表示点i和点j是连接的,M[i][j]=0表示点i和点j不相连,所以M中的元素值要么是0,表示不相连,要么是1,表示相连。以C-graph为例,根据C-graph的特征,可用下面的矩阵M来表示C-graph。
    在这里插入图片描述

3.2 Model

以字符为基础的Collaborative Graph Network包含:Encoding layer, Graph layer, Fusion layer, Decoding layer,如下图(作者有个地方少画了):
在这里插入图片描述
Encoding layer捕捉句子的语义信息和词汇的语义信息;Graph layer是以GAT为基础的,它可以对三种图进行建模;Fusion layer用来将句子语义信息和通过三种图捕捉到的信息进行融合;Decoding layer是使用CRF来对labels进行解码。

Encoding layer

这里就很简单了,最后得到 N o d e f Node_f Nodef
N o d e f = [ h 1 ,    h 2 ,    . . . ,    h n ,    w v 1 ,    w v 2 ,    . . . ,    w v m ] Node_f=\lbrack h_1,\;h_2,\;...,\;h_n,\;wv_1,\;wv_2,\;...,\;wv_m\rbrack Nodef=[h1,h2,...,hn,wv1,wv2,...,wvm]

Graph layer

使用GAT来对三种图进行建模,GAT的操作如下:
f i ′ = ∣ ∣ k = 1 K σ ( ∑ j ∈ N i α i j k W k f j ) {f_{i}}^{'}=\overset K{\underset{k=1}{\vert\vert}}\sigma(\sum_{j\in{\mathrm N}_{\mathrm i}}\alpha_{ij}^kW^kf_j) fi=k=1∣∣Kσ(jNiαijkWkfj)
α i j k = e x p ( L e a k y R e L U ( a T   [ W k f i ∣ ∣ W k f j ] ) ) ∑ t ∈ N i e x p ( L e a k y R e L U ( a T [ W k f i ∣ ∣ W k f t ]    ) \alpha_{ij}^k=\frac{exp(LeakyReLU(a^T\ [W^kf_i\vert\vert W^kf_j]))}{{\displaystyle\sum_{t\in{\mathrm N}_{\mathrm i}}}exp(LeakyReLU(a^T\lbrack W^kf_i\vert\vert W^kf_t\rbrack\;)} αijk=tNiexp(LeakyReLU(aT[WkfiWkft])exp(LeakyReLU(aT [WkfiWkfj]))
α i j k \alpha_{ij}^k αijk计算的公式,作者写的有较大问题,我进行了纠正。
关于有些符号的相关说明,大家可以去看原始论文,我这里向对这个公式两个公式进行一下说明

  1. f i ′ {f_{i}}^{'} fi的计算公式中的||是拼接操作,其实这里实现的也是多头注意力机制,类似于transfomer的做法。
  2. α i j k \alpha_{ij}^k αijk计算的是位置i对位置j的权重,只有两位置是连接的,才会考虑该权重,所以在计算得到 L e a k y R e L U ( a T   [ W k f i ∣ ∣ W k f j ] ) LeakyReLU(a^T\ [W^kf_i\vert\vert W^kf_j]) LeakyReLU(aT [WkfiWkfj])之后,要把某些未连接的位置进行屏蔽,所以之后乘上了M,用来屏蔽掉某些没连接的边,得到 L e a k y R e L U ( a T   [ W k f i ∣ ∣ W k f j ] ) LeakyReLU(a^T\ [W^kf_i\vert\vert W^kf_j]) LeakyReLU(aT [WkfiWkfj])之后就进行softmax操作。
  3. a T = [ a 1 T ∣ ∣ a 2 T ] a^T=\lbrack a_1^T\vert\vert a_2^T\rbrack aT=[a1Ta2T],记 W k f i = o i W^kf_i=o_i Wkfi=oi,则 W k f j = o j W^kf_j=o_j Wkfj=oj,那么 a T [ W k f i ∣ ∣ W k f j = a 1 T o i + a 2 T o j a^T\lbrack W^kf_i\vert\vert W^kf_j=a_1^To_i+a_2^To_j aT[WkfiWkfj=a1Toi+a2Toj。 记A=middle_result1+middle_result2,则 A [ i , j ] = a 1 T o i + a 2 T o j A[i, j]=a_1^To_i+a_2^To_j A[i,j]=a1Toi+a2Toj,表示位置i和位置j之间的权重。
  4. 对于该公式,可以加上源码进行更深刻的理解,注意在论文中向量F,即f的集合,F的维度是[dim, seq_length],而代码中的维度是[seq_length, dim]。
h = self.W(input)  # 输入F'是300维,输出F是30维, input*W  h:[batch_size, seq_len, F] 即实现matmul(W_k,f_j)的操作
# [batch_size, N, out_features]
batch_size, N,  _ = h.size()
middle_result1 = torch.matmul(h, self.a1).expand(-1, -1, N)
middle_result2 = torch.matmul(h, self.a2).expand(-1, -1, N).transpose(1, 2)
e = self.leakyrelu(middle_result1 + middle_result2)
attention = e.masked_fill(adj == 0, -1e9)  # 若adj[i][j]==0,说明点i和点j相连,则该位置的权重屏蔽
attention = F.softmax(attention, dim=2)  # softmax操作求得alpha权重
attention = F.dropout(attention, self.dropout, training=self.training)
h_prime = torch.matmul(attention, h)
if self.concat:
    return F.elu(h_prime)
else:
    return h_prime
  1. 与transformer的self-attention操作的计算量进行对比,只分析求attention score,当然假定seq_length相同,最后一维的维度都相同。
    在transformer的self-attention操作中求attention score主要是 Q K T QK^T QKT这一步,假设seq_length是n,最后一维的维度是d,则计算量是:乘法计算量是 O ( n 2 d ) O(n^2d) O(n2d),加法计算量是 O ( n 2 d ) O(n^2d) O(n2d),总的计算量是 O ( 2 n 2 d ) O(2n^2d) O(2n2d);在Graph中,middle_result1乘法计算量是 O ( n d ) O(nd) O(nd),加法计算量是 O ( n d ) O(nd) O(nd),则middle_result1和middle_result2总计算量是 O ( 4 n d ) O(4nd) O(4nd),middle_result1+middle_result2操作的计算量是 O ( n 2 ) O(n^2) O(n2),即Graph总的计算量是 O ( 4 n d + n 2 ) O(4nd+n^2) O(4nd+n2)所以这里的操作比transformer更高效经过验证,乘法计算量与加法计算量相同

得到 G k G_k Gk之后,因为只需要考虑文本长度n个位置,所以最后的图特征只取前面n个值,即
Q k = G k [ : , 0 : n ] , k = 1 , 2 , 3 Q_k = G_k[:, 0:n], k={1, 2, 3} Qk=Gk[:,0:n],k=1,2,3
k表示不同的图。

Fusion layer

根据论文和代码中提出了三种方案:

  • R = w 1 H + w 2 Q 1 + w 3 Q 2 + w 4 Q 3 R = w_1H+w_2Q_1+w_3Q_2+w_4Q_3 R=w1H+w2Q1+w3Q2+w4Q3
    w 1 、 w 2 、 w 3 w_1、w_2、w_3 w1w2w3分别表示待训练的值,通过模型去训练出各个特征对最终特征的比例。
  • R = W 1 H + W 2 Q 1 + W 3 Q 2 + W 4 Q 3 R = W_1H+W_2Q_1+W_3Q_2+W_4Q_3 R=W1H+W2Q1+W3Q2+W4Q3
    W 1 、 W 2 、 W 3 W_1、W_2、W_3 W1W2W3分别表示线性映射矩阵
  • R = W [ H ∣ ∣ Q 1 ∣ ∣ Q 2 ∣ ∣ Q 3 ] R = W[H||Q_1||Q_2||Q_3] R=W[HQ1Q2Q3]
    其实该方法与第二个方法相同,方法2可以进行变换
    W 1 H + W 2 Q 1 + W 3 Q 2 + W 4 Q 3 = [ W 1 W 2 W 3 W 4 ] [ H ∣ ∣ Q 1 ∣ ∣ Q 2 ∣ ∣ Q 3 ] = W [ H ∣ ∣ Q 1 ∣ ∣ Q 2 ∣ ∣ Q 3 ] W_1H+W_2Q_1+W_3Q_2+W_4Q_3=\begin{bmatrix}W_1\\W_2\\W_3\\W_4\end{bmatrix}\left[H\vert\vert Q_1\vert\vert Q_2\vert\vert Q_3\right]=W\left[H\vert\vert Q_1\vert\vert Q_2\vert\vert Q_3\right]\\\\ W1H+W2Q1+W3Q2+W4Q3=W1W2W3W4[HQ1Q2Q3]=W[HQ1Q2Q3]

4 Experiments

这里也是套路,大家看看论文就行了。

优化思路

  • 使用其他的结构来替代LSTM
  • 词典的设计越精细,越能融入更多词汇的信息,提升模型的性能
  • 使用词典对句子进行匹配的时候,其实可以先进行分词,再匹配。但是这要求分词质量较高,特别是某些专有领域的分词难度更大
  • 可以在模型训练的时候加入对抗训练,提高模型的稳定性
  • Fusion layer对各个特征进行融合的时候,可以使用其他的融合方法
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值