FASPell论文阅读记录
背景
FASPell:A Fast,Adaptable,Simple,Powerful,Chinese Spell Checker Based On DAE-Decoder Paradim是由爱奇艺在2019年EMNLP会议上发表的论文。该文提出了一种解决中文拼写错误的新范式,抛弃了传统的混淆集转而训练了一个以BERT为基础的深度降噪编码器(DAE)和以置信度-字音字形相似度为基础的解码器(CSD)。通过使用BERT可以动态的生成候选集,通过CSD解码器(置信度-字音字形相似度)可以有效提高纠错效果。其整体架构如下图所示。
预训练与FINE-TUNE
传统的中文拼写纠错主要存在两个问题。一是中文拼写纠错的平行语料不足,二是使用混淆集进行纠错不够灵活。
通过训练基于BERT的MASK语言模型可以有效缓解以上两点不足。在对数据进行FINE-TUNE时,与原始的BERT语言模型的FINE-TUNE策略稍有不同,以下对预训练与FINE-TUNE作详细解释。
预训练
对BERT的预训练策略与原始的BERT预训练方法一致,可以使用与自己任务匹配的数据从头开始预训练也可以直接使用google提供的中文预训练模型。其训练策略如下:
对句子按15%的概率进行掩码,即对句子中最多15%的字进行掩码操作。掩码共分为三种情况。
1. 80%[MASK]掩码:通过上下文预测句子中掩码字,学习完型填空。
2. 10%随机掩码:学习改错。
3. 10%原字掩码:避免过拟合。
FINE-TUNE
由于预训练BERT语言模型时采用随机掩码的方式进行,掩码往往与真实的错误有一定的出入,因此在FINE-TUNE时采用与纠错任务更相适应的掩码策略。
1. 对不存在错误的句子采用BERT中的原始方法进行FINE-TUNE,不作改变。
2. 对存在错误的句子采用两种方式进行FINE-TUNE。为了保持平衡,按照下列1)2)进行掩码的平行语料的数量相等。
1). 给定句子,将其中的错误字全部使用这个字本身进行掩码,并将预测目标设置为正确字。
2). 为了防止过拟合,对部分正确的字也使用字本身进行掩码,并将预测目标设为字本身。
消融实验与Confidence-Similarity Decoder
论文中作者提到,FASPell之所以可以取得SOTA的结果,并不在于BERT的使用,而是由于文中的消融实验。
消融实验的主要目的是得到一条由Confidence和Similarity两个坐标共同控制的曲线,取代原先单一的概率阈值进行候选字的选择。
消融实验的流程如下:
- 通过BERT语言模型计算得到句子中每个字的TOPN候选字。
- 分别计算rank=0..TOPN-1的候选字的Confidence和与原句中字的Similarity。
- 以Confidence为纵坐标以Similarity为横坐标,分别将不同rank下候选字所在位置标识在散点图中,用不同符号标明其检错和纠错正确与否。
- 通过散点图获取适当的曲线,具体方法在获取消融曲线一节中介绍。
Confidence
Confidence又称置信度,主要指由BERT掩码语言模型产生的预测字的概率值,其值越大代表该字在这个位置出现的可能性越大。
通过实验可知,在字正确的情况下,一般该值会大于0.99。Similarity
Similarity代表相似度,论文中从字音和字形两个方面进行相似度的计算。对字形进行计算时主要采用CJK字的细粒度IDS表示。对字音进行相似度计算时则分别采用了汉字在普通话、粤语、日语、韩语中的不同发音进行计算。使用编辑距离的方法进行最终相似度的计算并对结果做归一化处理。shape similarity
字形相似度计算主要采用CJK字的细粒度IDS表示。IDS表示与传统笔画表示相比可以更细粒度的刻画字的结构和笔画,对笔画相同的字也能正确进行区分。例如‘牛’和‘午’,‘田’和‘由’。
上图所示是虚线上方是‘贫’字的IDS表示,字符串的顺序是圈3中字的二叉树表示的前续遍历。其中‘⿱’等符号代表字的上下左右、半包围或全包围结构。通过IDS表示能够有效计算各个字之间的字形相似度。
上图所示为‘牛’和‘午’,‘田’和‘由’之间的字形字音相似度,遗憾的是作者并没有提供拆分好的细粒度IDS表示,需要自己手动生成,或者仅使用文件中的粗粒度IDS表示。Phonological similarity
考虑到中文同音字的影响,在进行字音相似度计算时采用了汉字在普通话(MC)、粤语(CC)、日语(JO)和韩语(K)中的不同发音共同进行字音相似度的计算。
在对不同任务进行处理时可以对字音或字形相似度做一定的取舍,如针对键盘输入错误的情况,更多的是由拼音引起的错误,在计算时可以适当增加字音相似度的权重,或者完全抛弃字形相似度。而在进行OCR识别结果的纠错中则更多使用字形相似度进行计算。笔者在对sighan15的实验结果进行复现时发现仅考虑字音相似度的结果要更好一些,当然这不排除是由笔者使用的IDS文件不够细粒度造成的。总之,在相似度的使用时可以有所取舍。获取消融曲线
通过合适的消融曲线,可以有效控制对候选字的选择,从而提高检错纠错的准确度。如文首模型架构图所示,在rank=1的情况下,只有‘主’字与原文中字词不同,它可以顺利经过由Confidence-Similarity消融曲线筛选;在rank=2的情况下,虽然每个候选字都与原文中字不同,但最终只有‘著’经过了消融曲线的筛选胜出,从而对原字进行了修改。
如上图所示,圈1展示了消融实验得到rank=1情况下的散点图,圈234则分别展示了在圈1基础上使用不同消融曲线进行过滤的效果。
其中散点代表候选词。红圈代表检错正确且纠错正确(T-d & T-c),蓝圈代表检错正确但纠错不对(T-d & F-c),蓝色叉号代表检错错误(F-d)。图中实线则代表训练后手动获取的消融曲线,这类似于线性规划,通过曲线对候选词进行过滤,最终只保留消融曲线右上方的候选词。
在圈1中,没有候选词被过滤掉;在圈2中,曲线对检错结果进行优化,将误检部分过滤掉;在圈3中对纠错结果进行优化,将误检和误纠部分过滤掉;在圈4中曲线则使用加权的Confidence和Similarity()作为阈值对候选词进行过滤。
消融曲线的选择,可以有效的影响最终的纠错结果。实验发现,如圈4中情况,曲线越偏右上角则最终纠错的Precision会越高,但相应的Recall值会有所下降。要取得较好的F1值需要适度调整曲线所在位置,使其既能够过滤掉大部分误检和误纠的候选词又能够不漏掉太多正确候选词。结果分析
作者在SIGHAN13、14、15数据集上的实验,纠错均达到SOTA的效果。实验同时表明FINE-TUNE和CSD均对达到SOTA效果起到功不可没的作用。
同时作者也在自己的OCR数据集上做了一定的实验,实验中纠错Precision能够达到70+的效果,但Recall仅有不到19的效果,表明模型对错误的识别和纠正能力还不够强,对70%的错误未能识别或识别了没有纠正。这方面的改进需要对DAE部分进行增强。
有关论文的复现和实验中需要注意的问题,可以参考FASPell论文复现记录。参考博客
[1]. BERT源码分析PART III
[2]. 【论文阅读】FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm
[3]. 如何评价FASPell?