错别字类型
1. 字形相似错误。
2. 拼音相似错误
拼音: gaoxing -> 高兴
拼音缩写:
3. 其他: 多字、少字、乱序
纠错难点
1. 需要一定的知识背景: 专有名词、人名等
如: 金子塔 -> 金字塔
2. 需要一定推理和分析能力
如: 他的求胜欲很强,为了越狱在挖洞。 -> 他的求生欲很强,为了越狱在挖洞。
3. 文本纠错对于误纠率的要求很严格(一般要求低于0.5%),因为实际场景中,如果把正确字词"纠正"成错误的,会对后续任务造成很大影响
相关论文
1. Spelling Error Correction with Soft-Masked BERT
论文: https://arxiv.53yu.com/pdf/2005.07421.pdf
代码: https://github.com/quantum00549/SoftMaskedBert
摘要
由于BERT基于MLM的预训练方式,它没有足够的能力去检测句子中的每个位置是不是有错字。基于此,论文提出了一种新的模型架构去解决这个问题,该模型包括一个错误检测网络和一个错误纠正网络,前者通过soft-masking将它的预测结果输出给后者,用来处理字级别的中文文本纠错。
相关工作
先前的文本纠错方法一般基于传统的机器学习或其他深度学习。传统的机器学习方法是一个pipeline的过程,先进行错误检测,再生成候选集,再从候选集中选择正确的字;深度学习方法利用seq2seq模型从原始句生成一个纠错后的新句子。最近基于BERT进行文本纠错的方式,用纠错前后的语料对预训练好的模型进行微调,预测时,模型在每个位置从一些候选中预测出最有可能的字;然而,这种方式中模型的错误检测能力不是很好,作者推测是因为BERT在预训练时只mask了句子中15%的字,导致模型只学习到masked tokens的分布,从而选择不做任何correction。为了解决这个问题,作者提出了检测和纠正两个网络结合的模型,其中检测网络是一个Bi-GRU,用来预测某个位置是否有错字的概率,纠正网络与上面仅用BERT进行纠错方法类似。
模型
Detection Network
输入向量(input embedding)是句子中每个字的词向量、位置向量和segment向量之和,输出是该字是否是错字的概率。检测网络是一个双向GRU,给句子中的每个字预测一个是否为错字的概率。而soft masking () 就是input embedding () 和mask embedding () 的加权平均,权重就是是否为错字的概率。
若该字是错字的概率越大,则它的soft-masked embedding则更接近mask embedding;相反则更接近input embedding.
Correction Network
纠正网络是一个基于BERT的序列多标签标注模型,输入是上面得到的soft-masked embedding,输出是纠正后的文本序列。对于序列中的每个字,纠正模型将它纠正成字j的概率为
其中,是BERT最后一层embedding和input embedding之和,也就是说这里有一个残差连接。softmax输出字被纠正成词典中每个字的概率,概率最大的字被选为纠错后的字。
损失
最终损失是检测模型损失与纠正模型损失的线性组合
是[0-1]的系数。
其中,
总结
由于基于BERT的文本纠错方法中,BERT的错误检测能力不高,所以作者另外用了一个Bi-GRU模型进行检测,并将检测模型的预测结果融入到纠正模型的输入中,得到一个soft-masked embedding,使得可能错误的字的表征更接近[mask]的表征,正确的字的表征更接近自己的输入表征。
但该方法只适用于完全对齐的文本纠错,无法处理多字、少字的错误类型。
2. SpellGCN: Incorporating Phonological and Visual Similarities into Language Models for Chinese Spelling Check
论文: https://arxiv.org/pdf/2004.14166v2.pdf
代码: https://github.com/ACL2020SpellGCN/SpellGCN
摘要
现有的中文拼写检查(CSC)方法整合中文字符之间的相似信息,但这些相似信息一般都基于外部资源或是启发式的规则。这篇论文通过一个图卷积网络(SpellGCN)将拼音相似和字形相似信息融合到语言模型中,分别构建两个基于发音和字形的graph, 将graph作为模型的输入,给每个字符生成一个基于相似字符的向量表示,然后这些向量被构造成一个字符分类器,用来给从BERT抽取的表征做分类。
动机: 中文是一种没有单词分隔符的象形文字组成的语言,每个字的意思根据上下文的不同也会有所不同。因此,中文文本纠错需要识别语义和周围文本的信息进行修改。
相关工作
之前的工作非监督的语言模型,通过短语/句子的混淆度(perplexity)来检测和纠正错字,但是这种方法的纠错没有基于整个输入文本。后续也提出了一些基于序列标注,seq2seq模型和BERT的方法进行文本纠错。最近研究利用单词相似性的外部知识,比如构建相似字对的混淆集对错字的候选正确字进行选择,但这种方法没有建立相似单词之间的关系。基于此,论文结合了预训练语言模型BERT,并利用GCN来建立单词之间的相互依赖,捕捉拼音和字形的相似性。GCN还被用在关系抽取,给多标签任务建立标签之间的关系上,这些任务中graph的object都是语义相关的;但是,CSC中graph的相似单词都是语义不同的。
模型
SpellGCN的结构
SpellGCN需要两个分别基于发音和字形的相似graph , , 相似信息从一个开源混淆集中获得。每个相似图是一个大小为的二元相邻矩阵,从混淆集中的个字符构建。图的edge,i.e. 矩阵元素, 表示字符对(i,j)是否在混淆集中。SpellGCN的目标是学习一个映射函数,将第层的输入node embedding 映射到一个新的表示. 这个映射函数包括一个graph convolution operation和一个attentive graph combination operation.
Graph Convolution Operation:
目的是吸收相邻字符的信息,每一层的计算公式为
其中,是可训练的矩阵, 是归一化后的相邻矩阵.将BERT模型中的字向量作为第0层的特征.由于BERT作为提取器有它自己学习到的语义空间,论文中去除了卷积后的非线性激活函数,保证卷积前后特征空间的一致。实验也表明,使用ReLU作为非线性激活函数,效果反而会变差。
Attentive Graph Combination Operation:
Graph convolution operation处理每一张图的相似性,并利用注意力机制将两张图结合起来。对每个字符,
其中, , 是图第行的卷积特征。表示图对字符的权重,计算公式为
其中,是一个层间共享的可学习的向量,是一个控制注意力权重平滑性的超参数,这个参数对注意力机制很关键。
Accumulated Output:
第l+1层的表征来自attentive表征和之前所有层的表征之和:
通过这样的方式,SpellGCN可以集中于提取相似信息,而将语义信息的提取任务交给BERT。
SpellGCN for CSC
将BERT的最后一层输出作为每个字符的特征表示。
通过一个权重为的全连接层来输出最终的目标字符,是BERT的词表大小,目标函数为
是字符的向量表示。若在混淆集中,则使用SpellGCN最后一层的输出表示进行分类,否则就用BERT的word embedding进行分类,
最终的目标函数为
论文中直接取概率最大的字符实现correction,并通过检查预测字符与目标字符是否匹配来实现detection.
总结
论文利用GCN构建两个基于拼音相似和字形相似的图,并利用图得到的相似信息去优化BERT提取到的向量表示,从而得到从相似性上更合适的纠错候选。
参考
Soft-Masked BERT:文本纠错与BERT的最新结合
https://zhuanlan.zhihu.com/p/144995580?from_voters_page=true