SpellGCN学习

SpellGCN: Incorporating Phonological and Visual Similarities into Language Models for Chinese Spelling Check

paper

code

这个是2020年蚂蚁金服在ACL上的一篇论文,主要思路是使用GCN将发音和形状相似的字符的嵌入向量进行融合,然后使用bert作为基模型进行字符级别的分类,最后使用softmax进行目标字符预测。

模型整体由两个模块组成,模块一为SpellGCN,模块二为抽取模型(满足输入为[x1,x2,…,xn],输出为[v1,v2,…,vn])进行字符的特征抽取,在本文中使用bert模型进行字符特征抽取。

在使用时模型一次性完成检测和纠错两项工作,在最后一层对输入字符 x i x_i xi进行目标字符预测时,选取 a r g m a x y ^ i p ( y ^ i ∣ X ) argmax_{\hat y_i}p(\hat y_i|X) argmaxy^ip(y^iX)具有最大概率的字符作为预测目标字符 y i y_i yi,当输入字符和目标字符一致时则表示文本无错误,如果不一致则表示文本拼写错误,纠正后的值为预测字符 y i y_i yi

个人感觉这个模型在结构方面比较新颖,使用GCN来进行相似字符的特征聚合,但是在最后检测和纠错上过于简单。另外bert使用T-TA是不是会对提取器的效果有所提高?

SpellGCN的结构

SpellGCN使用2013年的SIGHAN的csc比赛[数据集](Chinese Spelling Check Evaluation at SIGHAN Bake-off 2013)生成尺寸为 N × N N\times N N×N的二元邻接矩阵 A A A,其中N为数据集中出现过的混淆字符个数,邻接矩阵 A i , j A_{i,j} Ai,j的值由数据集决定,如果数据集中字符i和j为易混淆的字符,则 A i , j = 1 A_{i,j}=1 Ai,j=1,否则 A i , j = 0 A_{i,j}=0 Ai,j=0.其中在本数据集中字符的混淆有两种情况,发音相似( pronunciation)、形状相似(shape),我们根据混淆原因得到两个邻接矩阵:发音相近的矩阵 A p A^p Ap,形状相似的矩阵 A s A^s As.

SpellGCN的目标是学习映射函数将 l l l层节点向量 H l ∈ R N × D H^l\in \mathbb{R}^{N\times D} HlRN×D通过卷积运算映射到新的节点向量 H l + 1 H^{l+1} Hl+1。这个映射函数主要有两个组件组成Graph Convolution Operation和Attentive Graph Combination Operation。

图卷积操作

图卷积操作的目的是为了包含(absorb)图中相邻字符的信息,在每层网络中,都进行如下操作:
f ( A , H l ) = A ^ H l W g l f(A,H^l)=\hat AH^lW_g^l f(A,Hl)=A^HlWgl
上式中 W ∈ R N × N W\in \mathbb{R}^{N\times N} WRN×N是一个可进行训练的矩阵, A ^ \hat A A^表示邻接矩阵的规范化(normalized),具体的规范化操作可见SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS。值得注意的是,在本文中我们的初始化节点向量 H 0 H^0 H0与特征抽取模型中的输入向量一致。在本例中为bert的character embedding,因为我们采用了BERT作为抽取器,它有自己的学习语义空间,所以我们从方程中去掉激活函数,使导出的表示与原始空间保持一致,而不是完全不同的空间。在本文的实验中,也表明非线性激活如relu对于模型是无效的,将导致效果下降。

注意力图合并操作

Graph Convolution Operation主要针对的是单个的网络图,为了同时利用发音相似图和形状相似图的,下面使用注意力机制来得到包含两者信息的混合向量:
C i l = ∑ k ∈ { s , p } α i , k l f k ( A k , H l ) i C^l_i=\sum_{k\in\{s,p\}}\alpha_{i,k}^lf_k(A^k,H^l)_i Cil=k{s,p}αi,klfk(Ak,Hl)i
其中 C l ∈ R N × D C^l\in \mathbb{R}^{N\times D} ClRN×D,同时 f k ( A k , H l ) i f_k(A^k,H^l)_i fk(Ak,Hl)i表示图的卷积表示的第i行, α i , k \alpha_{i,k} αi,k表示图k的第i个字符的权重标量。权重 α i , k \alpha_{i,k} αi,k通过如下方式计算:
α i , k = e x p ( w a f k ( A k , H l ) i / β ) ∑ k ′ e x p ( w a f k ′ ( A k ′ , H l ) i / β ) \alpha_{i,k}=\frac{exp(w_af_k(A^k,H^l)_i/\beta)}{\sum_{k'}exp(w_af_{k'}(A^{k'},H^l)_i/\beta)} αi,k=kexp(wafk(Ak,Hl)i/β)exp(wafk(Ak,Hl)i/β)
其中 w a ∈ R D w_a\in \mathbb{R}^D waRD是一个可学习且各层共享的向量, β \beta β是一个用来控制注意力权重平滑的超参数。在本文中作者认为 β \beta β对注意力机制起到重要作用。

输出累加

在经过图卷积和注意力合并的操作后,我们得到一个第l层的向量表示 C l C^l Cl。为了保持提取器的原始语义表示,我们将前面所有层的输出进行累加得到新的输出。
H l + 1 = C l + ∑ i = 0 l H i H^{l+1}=C^l+\sum_{i=0}^lH^i Hl+1=Cl+i=0lHi
通过这种方式,SpellGCN能够专注于捕获字符相似性的知识,而将语义推理的责任留给提取器。希望每个层都能学会为特定的跃点聚合信息。在实验过程中,当累加时排除H0时,模型失败。

SpellGCN在中文拼写检查中的应用

首先使用提取器获取字符特征,在最后输出时使用SpellGCN进行目标字符的分类。

构造混淆图

本文中使用来自2013SIGHAN的混淆数据集,这个混淆数据集包含了大约95%的中文字符的相似字符,并将其根据混淆类型不同分为以下五类:

  1. 相似的形状
  2. 相同的发音和音调
  3. 相同的发音但音调不同
  4. 相似的发音和相同的音调
  5. 相似的发音但不同的音调

因为语音相似度比形状更为精细,因此本文将语音相似度合并为一个图,最终得到两个对应于发音和形状相似性的图。

提取字符表达

将输入的字符序列 X = { x 1 , x 2 , . . . , x n } X=\{x_1,x_2,...,x_n\} X={x1,x2,...,xn}通过提取器提取得到最终的向量表达 V = { v 1 , v 2 , . . . , v n } ( v ∈ R D ) V=\{v_1,v_2,...,v_n\}(v\in \mathbb{R}^D) V={v1,v2,...,vn}(vRD),此处可以使用任意模型完成提取器的任务,在本文中使用12layer-12head-768的base bert模型完成提取向量表达任务,使用X作为输入,使用最后一层的输出作为V。

使用SpellGCN进行字符分类

当我们通过提取器提取得到字符 x i x_i xi的向量 v i v_i vi,我们使用一个全连接网络进行目标字符的预测。
p ( y ^ i ∣ X ) = s o f t m a x ( W v i ) p(\hat y_i|X)=softmax(Wv_i) p(y^iX)=softmax(Wvi)
其中 W ∈ R M × D W\in\mathbb{R}^{M\times D} WRM×D,M是提取器的字典大小,D是提取器的向量维度,如此文使用768维的bert,则D=768.

对于W,如果字符在混淆集中出现过,我们将SpellGCN最后一层的网络表示赋值给W对应的字符,如果未在混淆集中出现过的字符,我们使用提取器字符嵌入矩阵(embedding matrix)。
W i = { H u i L i f i − t h c h a r a c t e r ∈ c o n f u s i o n s e t E i o t h e r w i s e W_i=\left\{ \begin{array}{rcl} H_{u_i}^L && if\quad i-th\quad character \in confusion set\\ E_i & & otherwise \end{array} \right. Wi={HuiLEiifithcharacterconfusionsetotherwise
u i ∈ { 1 , . . . , N } u_i\in\{1,...,N\} ui{1,...,N}表示混淆字符集中的字符在提取器字典中的索引为i。 E i ∈ R M × D E_i\in \mathbb{R}^{M\times D} EiRM×D是提取器的字符嵌入矩阵(embedding matrix)。 H u i L H_{u_i}^L HuiL表示混淆字符 u i u_i ui在SpellGCN第L层的输出。

之所以没有使用SpellGCN为所有包含在提取器字典中的字符建模是为了提高计算效率,因为SpellGCN的混淆集中约有5k字符,而提取器bert中的字符数量约为20k。

最后,我们的目标是最大化目标字符的最大似然函数。
L = ∑ X , Y ∑ i l o g p ( y ^ i = y i ∣ X ) L=\sum_{X,Y}\sum_ilogp(\hat y_i=y_i|X) L=X,Yilogp(y^i=yiX)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值