最近一直在关注中文文本纠错的相关内容,看了很多东西,但是脑袋还是浆糊,思来想去还是慢慢总结一下。本文主要总结一下基于局部信息的中文文本纠错,不过因为是第一篇写纠错的,前面先写点纠错的地位吧,纯属闲聊。
目录
纠错的江湖地位
文本纠错任务是自然语言处理中的预处理步骤之一,因为叠加效应,其性能却可以对下游任务产生重要的影响,其在产业界的地位不言而喻——老大难又不是任务重点,所以导致重点招人来干~可惜,不干~系统性能拉垮,所以算是头疼一类的任务吧。但是换到科研领域就不一样了,数据都是清洗干净的,压根儿就不存在太多纠错问题,所以算了吧,大多数科研工作者才省的去关注呢。
正因为上面这种情况,纠错在科研领域一直属于小众任务,关注的人并不多,远比不上NER、分类等问题,就更不谈翻译和生成了。不过在工业界,却也有另外一番天地,工业界主要是大型互联网公司有投入研发人员或者也不部门有专门的几个人跟进这个问题,典型的有腾讯、百度、微软亚研,国外有谷歌、亚马逊、facebook,微软等不胜枚举。
吐槽完啦,下面说正事。
局部信息建模
语言模型
从文本纠错任务出现以来,从业者都将纠错任务定义为一个有监督问题,这样就需要有监督语料进行模型训练,这种局限往往导致在训练过程中没有充足的纠错语料。而这一问题却很好地被N-gram解决了,凭借无监督语料训练统计语言模型的能力,N-gram成为最简单、最常用的模型。此后在很长一段时间里,N-gram+混淆集的模式成为文本纠错的主流,关键在服务上运算还快,也能解决很多常见错误。但是在这个方法中,因为没法建模上下文的语义信息,经常造成虽然临近词正确,但放到整个句子却不符合逻辑,使得得分很低,没法召回。
此后,随着深度学习兴起,神经语言模型出现,能够建模语义信息的词嵌入出现了,在这个场景中,纠错任务常常被当作一种特殊的生成任务,最广泛使用的就是seq2seq框架。在这个框架中,错误文本是输入,正确文本作为输出进行训练。这种方法的优点在于模型可以学习文本的深层信息,加强对文本语义的理解,也加深对文本结构的学习,对获取推荐修改选项有更好的帮助。
局部信息
中文的文本纠错有两个注意点:
1)中文文本字符之间没有空格,且部分字符需要与另外的字符结合才具有特定含义,所以在处理中文文本时,需要对中文进行分词,将文本拆分成字或者词,形成一个独立的单位;
2)中文纠错中没有“字错误”的情况,即错误只出现在词或者句子中。因此,错误字符以及错误字符周边的信息需要重点关注。
对此,局部信息建模的动机便很明确了:
考虑到纠错任务的特殊性在于错误文本与正确文本之间的差别很小,而模型关注的范围过于宽泛,模型的重点关注范围应该是错误文本周边一定范围内的字符,提取错误字符特征,加强模型对纠错任务的适应能力。
参考文献:
Duan, Jianyong, Yang Yuan, and Hao Wang. "Chinese Spelling Correction Method Based on Transformer Local Information and Syntax Enhancement Architecture." Beijing Da Xue Xue Bao 57.1 (2021): 61-67.
思考与总结是前进的基石!