FASPell论文复现记录
简介
最近在做FASPell的复现,遇到一些问题,做一个记录,此篇仅作FASPell README.md的补充。
FASPell是由爱奇艺出品的,针对ocr识别后的文本纠错模型,在SIGHAN15数据集上能够达到SOTA的效果。其论文发表在EMNLP上,代码在github当中开源。
原理
由于对论文及代码的细节还不是特别熟悉,所以难免有错漏,欢迎留言一起交流。
FASPell采用编码器解码器的方式,训练一个深度自动降噪编码器(DAE)和一个置信度-字音字形相似度解码器(CSD)进行纠错。其中,编码器的训练可以使用掩码语言模型BERT、XLNet、MASS等,BERT等语言模型的使用是为了避免平行语料不够时的过拟合问题。解码器则使用字音字形相似度帮助生成混淆集。文章有三个创新点,一是使用解码器解码的方式替代传统混淆集,解决混淆集不够灵活的缺点。二是使用IDS和CJK发音方法进行字音字形计算对候选集进行精准召回,三是针对纠错任务FINE-TUNE时设计的掩码策略。更多详细内容可以参照FASPell论文阅读记录。
FINE-TUNE 语言模型
在对语言模型进行FINE-TUNE的时候主要有两点需要注意。
- 在做数据处理的时候使用作者提供的方法生成TFrecord而非GOOGLE REPO当中的方法。主要区别在于作者提供的方法对存在错误的句子和正确句子使用不同的掩码策略。
- FINE-TUNE时使用REPO当中run_pretrained.py文件进行。
模型训练
在模型训练过程当中也有两个问题需要注意。
- 训练前将plot.py当中第79行plt.show()注释掉,要不然图片当中不能画出图像。
- 训练后可以使用多条直线对曲线进行拟合。将蓝色的x和o尽量放到曲线下边儿。
- 在模型训练过程中round设置为1,预测过程中可更改选择结果最佳的round。
- 训练时可先对字形训练,将生成的图片剪切存放;再对字音进行训练,按照作者推荐的顺序生成图片会使后边生成的图片覆盖掉前边的图片。
图像处理
对于曲线的获取,请参考FASPell论文中2.3 Confidence-Similarity Decoder部分。
在通过图像进行曲线的获得时,笔者发现对于difference_1-rank_0_results.png图像的处理对precision和recall的影响比较大,在获得曲线时要适度调整。曲线越是偏右则获得的precision越大,但相应的recall会有所减小。这是由于曲线偏右误报会相应减少但同时正确的报错也会相应减少。训练更加精确的MLM则显得非常重要。下面展示了笔者自己训练的rank=0的字音模型图片。
difference_1-rank_0_results.png右侧放大
未明确参数
暂无