其他分享
首页 > 其他分享> > 中文纠错(Chinese Spelling Correct)最新技术方案总结

中文纠错(Chinese Spelling Correct)最新技术方案总结

作者:互联网

目录

1 纠错基础知识

1.1 常见错误类型

在中文中,常见的错误类型大概有如下几类:

1.2 纠错组成模块

纠错一般分两大模块:

2 深度学习技术

2.1 FASPell(爱奇艺)

2.1.1 技术方案

FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker
Based On DAE-Decoder Paradigm

2.1.1.1 背景

由爱奇艺团队与2019年发表在EMNLP会议上的论文,通过训练一个以BERT为基础的深度降噪编码器(DAE)和以置信度-字音字行相似度为基础的解码器(CSD)进行中文拼写纠错。在DAE阶段,BERT可以动态生成候选集去取代传统的混淆集,而CSD通过计算置信度和字音字形相似度两个维度去取代传统的单一的阈值进行候选集的选择,提高纠错效果,取得了SOTA( state-of-the-art)的一个效果。

2.1.1.2 模型结构

在这里插入图片描述
模型主要分两大块组成:

第一:Masked Language Model (bert)

是一个自动编码器(DAE), 基于bert模型,每次获取预测词的top k个候选字。

第二:Cofidence-Similarity Decoder

该部分是一个解码器,通过编码器输出的置信度confidence分值和中文字音字形的相似度similarity分值两个维度进行候选集的过滤和刷选,选择最佳候选的路径作为输出。

在这里插入图片描述其中图1中没有任何过滤,在图2中,曲线对错误检错的部分结果进行过滤处理,在图3中,对误检和误纠进行过滤,在图4中进一步用cofidence和similarity进行加权过滤。

2.1.1.3 训练过程

2.1.2 优点和缺点

优点

缺点

2.2 SpellGCN (阿里)

2.2.1 技术方案

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

2.2.1.1 背景

由阿里团队于2020年在ACL会议上发表,主要通过graph convolutional network (GCN)对字音和字形结构关系进行学习,并且将这种字音字形的向量融入到字的embedding中,在纠错分类的时候,纠错更倾向于预测为混淆集里的字。模型训练是一个end-to-end的过程,试验显示,在公开的中文纠错数据集上有一个较大的提升。

2.2.1.2 模型结构

在这里插入图片描述
模型也主要分两部分组成:
第一部分:特征提取器
特征提取器基于12层的bert最后一层的输出

第二部分:纠错分类模型
通过GCN学习字音字形相似结构信息,融合字的语义信息和字的结构信息,在分类层提高纠错准确率。
接下来我们具体看下GCN的结构组成部分:

2.2.1.3 训练过程

2.2.2 优点和缺点

优点

缺点

2.3 Soft-Mask BERT (字节)

2.3.1 技术方案

Spelling Error Correction with Soft-Masked BERT

2.3.1.1 背景

该论文是字节团队于2020年发表在ACL会议,将纠错任务分成两部分:detection network(错误检测)和correction network(错误纠正)。在错误检测部分,通过BiGRU模型对每个输入字符进行错误检测,得到每个输入字符的错误概率值参与计算soft-masked embedding作为纠错部分的输入向量,一定程度减少了bert模型的过纠问题,提高纠错准确率。

2.3.1.2 模型结构

在这里插入图片描述
如上图所示,模型结构由两部分构成:

第一部分:Detection Network
在检测网络中,相当于对输入序列的二分类,假如输入序列的向量表征为 E = ( e 1 , e 2 , . . . , e n ) E = (e_1, e_2, ..., e_n) E=(e1​,e2​,...,en​),其中 e i e_i ei​表示的是字 x i x_i xi​的向量特征。标签labels G = ( g 1 , g 2 , . . . , g n ) G=(g_1, g_2, ..., g_n) G=(g1​,g2​,...,gn​),其中 g i g_i gi​代表的是第 i i i个字符的label,值为1表示字符是错误的,为0表示是正确的。每个字符都对应一个概率值 p i p_i pi​,值越高越可能表示该字是一个错误的字。用BiGRU对输入序列的每个字符进行错误检测,其中 p i p_i pi​分值计算如下:
p i = P d ( g i = 1 ∣ X ) = σ ( W d h i d + b d ) p_i = P_d(g_i=1|X) = \sigma(W_dh_i^d+b_d) pi​=Pd​(gi​=1∣X)=σ(Wd​hid​+bd​)
其中 h i d h_i^d hid​表示的是BiGRU的hidden state, W d , b d W_d, b_d Wd​,bd​是最后一层分类层参数。

第二部分: Correction Network
纠错网络是一个基于bert的序列multi-class分类任务,输入的是序列soft-mask向量: E ′ = ( e 1 ′ , e 2 ′ , . . . , e n ′ ) E^{'} = (e^{'}_1, e^{'}_2, ..., e^{'}_n) E′=(e1′​,e2′​,...,en′​)输出是纠错后的序列词: Y = ( y 1 , y 2 , . . . , y n ) Y=(y_1,y_2,...,y_n) Y=(y1​,y2​,...,yn​)
对输入的soft-masked向量,经过bert模型,得到最后一层的输出向量表示: H c = ( h 1 c , h 2 c , . . . , h n c ) H^c = (h^c_1, h^c_2, ..., h^c_n) Hc=(h1c​,h2c​,...,hnc​)然后用residual connection连接,将原始输入向量 e i e_i ei​与输出向量相加:
h i ′ = h i c + e i h_i^{'} = h_i^c + e_i hi′​=hic​+ei​
经过分类层,计算预测概率结果值:
P c ( y i = j ∣ X ) = s o f t m a x ( W h i ′ + b ) [ j ] P_c(y_i=j|X) = softmax(Wh^{'}_i + b)[j] Pc​(yi​=j∣X)=softmax(Whi′​+b)[j]

2.3.1.3 训练过程

Soft-Masked Bert训练是一个end-to-end的过程,基于pre-trained bert做训练,对有错误的样本进行过采样,模型训练包含两部分loss,检测loss和纠错loss:
L d = − ∑ i = 1 n l o g P d ( g i ∣ X ) L_d = -\sum_{i=1}^nlogP_d(g_i|X) Ld​=−i=1∑n​logPd​(gi​∣X)
L c = − ∑ i = 1 n l o g P c ( y i ∣ X ) L_c = -\sum_{i=1}^nlogP_c(y_i|X) Lc​=−i=1∑n​logPc​(yi​∣X)
其中 L d , L c L_d, L_c Ld​,Lc​分别代表的是检测网络产生的loss和纠错网络产生的loss,两个loss通过线性加权作为最终loss:
L = λ . L c + ( 1 − λ ) . L d L = \lambda.L_c + (1-\lambda).L_d L=λ.Lc​+(1−λ).Ld​
其中 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ∈[0,1]是一个权重参数。

2.3.2 优点和缺点

优点

缺点

2.4 Spelling Correction as a Foreign Language (ebay)

2.4.1 技术方案

Spelling Correction as a Foreign Language

2.4.1.1 背景

由ebay团队于2019年发表在SIGIR 2019 eCom会议上,将纠错任务当做机器翻译任务,基于encoder-decoder框架。

2.4.1.2 模型结构

在这里插入图片描述
encoder部分是一个多层的RNN模型,decoder部分也是一个多层的RNN模型,attention权重计算依赖encoder部分的所有hidden state输出和decode部分的前一时刻的hidden state输出,计算生成当前时刻的上下文向量作为当前时刻的decode部分的输入。

第一部分:encoder阶段
对输入的向量 E = ( e 1 , e 2 , . . . , e t ) E=(e_1, e_2, ..., e_t) E=(e1​,e2​,...,et​)经过多层的RNN模型,得到序列hidden state向量输出: H = ( h 1 , h 2 , . . . , h t ) H =(h_1, h_2, ..., h_t) H=(h1​,h2​,...,ht​)。

第二部分:attention阶段
attention阶段主要是在每一步解码过程中,产生一个contex向量作为decoder阶段的输入,而contex上下文向量生成公式如下:
c i = ∑ j = 1 T λ i j h j c_i = \sum_{j=1}^T\lambda_{ij}h_j ci​=j=1∑T​λij​hj​
λ i j = e x p { a i j } ∑ k = 1 T e x p { a i k } \lambda_{ij} = \frac{exp\{a_{ij}\}}{\sum_{k=1}^Texp\{a_{ik}\} } λij​=∑k=1T​exp{aik​}exp{aij​}​
a i j = t a n h ( W s s i − 1 + W h h j + b ) a_{ij} = tanh(W_ss_{i-1}+W_hh_j + b) aij​=tanh(Ws​si−1​+Wh​hj​+b)
其中 W s , W h W_s, W_h Ws​,Wh​是模型需要的向量参数权重, b b b是bias参数。当前步输入到解码器的上下文向量是由encoder阶段的所有hidden state输出的加权之后得来,而encoder阶段的第 j j j个hidden state向量 h j h_j hj​对应的权重,则根据decoder阶段的上一时刻的hidden state输出 s i − 1 s_{i-1} si−1​与该hidden state向量 h j h_j hj​经过一个映射变换函数输出得到,最后用softmax进行权重归一。

第三部分:decoder阶段
解码阶段,每个时刻的输入为解码器当前时刻的输入,contex向量和上一时刻的hidden state向量,最后对每个输入序列进行分类。
p ( Y t ∣ s t ) = s o f t m a x ( W s t + b d ) p(Y_t|s_t) = softmax(Ws_t + b_d) p(Yt​∣st​)=softmax(Wst​+bd​)
s t = f d ( s t − 1 , c t , y t ; θ d ) s_t = f_d(s_{t-1}, c_t, y_t;\theta_d) st​=fd​(st−1​,ct​,yt​;θd​)

2.4.1.3 训练过程

2.4.2 优点和缺点

优点

缺点

2.5 HeadFit (加利福尼亚大学)

2.5.1 技术方案

Domain-shift Conditioning using Adaptable Filtering
via Hierarchical Embeddings for Robust Chinese Spell Check

2.5.1.1 背景

该论文是学术界的一篇中文纠错论文,在中文公开纠错数据集上取得了不错的效果。纠错模块分两部分:第一部分是基于bert的base模型,输出可能纠错后的结果,第二部分是一个filter模块,主要基于treeLSTM模型学习出字的hierarchical embedding,通过向量相似度衡量两个字的相似度,取代了预先设定好的混淆集并且可以通过模型的自适应学习,发现字与字之间新的混淆关系能力,通过filter模块,进一步过滤bert模型的过纠等问题,提高准确率。

2.5.1.2 模型结构

在这里插入图片描述
如上图所示,模型分成两部分:
第一部分:MaskLM bert
假设输入序列 X ∗ X_{*} X∗​,在序列第 i i i个位置的字符表示为 X i X_i Xi​,经过MLM bert模型,得到输出 Y ^ ∗ \hat{Y}_* Y^∗​,其中 Y i ^ = { Y i k ^ } \hat{Y_i} = \{\hat{Y_{ik}}\} Yi​^​={Yik​^​}是在输入为第 i i i个位置输出预测为各词的一个概率分布:
Y ∗ ^ = M a s k L M ( X ∗ ) \hat{Y_*} = MaskLM(X_*) Y∗​^​=MaskLM(X∗​)

第二部分:Adaptable Filter with Hierarchical Embeddings
这是一个基于treeLSTM模型结构,用字的IDS拆分结构作为treeLSTM的输入,学习字向量表示,如下图所示:
在这里插入图片描述
左图是“無”的IDS结构,然后依次输入到treeLSTM模型中,其中输出 h 7 h_7 h7​的向量为“無”的hierarchical向量表示。假设字符 a a a和 b b b经过模型得到的hierarchical向量表示为 h a h_a ha​和 h b h_b hb​,HeadFilt计算两个字符的相似度通过如下计算公式:
d a b = ∣ ∣    h a / ∣ ∣ h a ∣ ∣ − h b / ∣ ∣ h b ∣ ∣     ∣ ∣ d_{ab} = \begin{vmatrix} \begin{vmatrix} \text{ }\text{ } h_a/ \begin{vmatrix} \begin{vmatrix} h_a\end{vmatrix} \end{vmatrix} -h_b/ \begin{vmatrix} \begin{vmatrix} h_b\end{vmatrix} \end{vmatrix} \text{ }\text{ }\text{ }\end{vmatrix} \end{vmatrix} dab​=∣∣​∣∣​  ha​/∣∣​∣∣​ha​​∣∣​​∣∣​−hb​/∣∣​∣∣​hb​​∣∣​​∣∣​   ​∣∣​​∣∣​
S ^ ( a , b ) = 1 1 + e x p ( β × ( d a b − m ) ) \hat{S}(a,b) = \frac{1}{1+exp(\beta \times (d_{ab} -m ))} S^(a,b)=1+exp(β×(dab​−m))1​
其中 d a b d_{ab} dab​计算的是向量 h a h_a ha​和向量 h b h_b hb​之差的欧氏距离, S ( a , b ) ^ \hat{S(a,b)} S(a,b)^​表示的是相似度分值,若两个向量的距离 d a b d_{ab} dab​小于一个边缘常量阈值 m m m,则相似度分值接近1,否则接近0,其中 β \beta β是一个常量,主要控制当两个字符不相似的时候,保证 S ^ ( a , b ) \hat{S}(a,b) S^(a,b)相似度分值为0。则对于字符 X i X_i Xi​相对于所有其他 N N N个字符的一个相似度分值为:
S i ^ = [ S ^ ( X i , c 1 ) , . . . S ^ ( X i , c N ) ] \hat{S_i} = \begin{bmatrix} \hat{S}(X_i, c_1), ... \hat{S}(X_i, c_N) \end{bmatrix} Si​^​=[S^(Xi​,c1​),...S^(Xi​,cN​)​]
最终预测的结果将第一部分bert预测输出的分值与HeadFilt相似度计算的分值进行element-wise相乘,得到最后的概率分布值,输出最终的预测结果标签为:
Y ^ i f i l t = a r g m a x ( Y ^ i ∗ S i ) k \hat{Y}_i^{filt} = argmax(\hat{Y}_i * S_i)_k Y^ifilt​=argmax(Y^i​∗Si​)k​

2.5.1.3 训练过程

训练分两块训练:

2.5.2 优点和缺点

优点

缺点

3 总结

通过对这几篇纠错论文方案的梳理,总结如下:

在这里插入图片描述

4 资源链接

字形特征:字形特征
字音特征:字音特征1 字音特征2

标签:bert,end,Chinese,模型,字音,Spelling,纠错,Correct,向量
来源: https://blog.csdn.net/BGoodHabit/article/details/114589007