语法检查-人工智能拼写检查系统是如何对语法错误进行纠正的?
编辑:pitaya02 日期:2020-10-29
已有的拼写检查系统虽然能识别拼写错误,但不能识别语法错误,本文的重点是,利用流行的seq2seq+ attention模型,训练大规模拼写检查数据集,以完成简单的语法错误识别任务。
一个上下文敏感的语法检查、错别字校对系统(如火龙果智能写作),尽管可以从即时消息、电子邮件和短消息中纠正大量的输入错误,但对于即使是最简单的语法错误也无能为力。例如,信息“I’ m going to store”并不会被自动错误更正系统报错,但是人们通常更喜欢说“I’ m going to the store”。火龙果智能写作
由于受到深度学习(Bahdanau等人2014年在 Neural Machine Translation中的工作)的启发,自然语言处理(NLP)取得了一些进展,我决定通过训练神经网络来解决这个问题。准确地说,我将从构建序列开始,建立序列模型,这些模型能够处理文字对话的样本,并且能够产生样本的正确表达形式。火龙果智能语法检查
我将在这个博客中描述如何构建这些“深度文本纠错”系统,并给出一些令人振奋的初步结
通过深度学习修正语法错误
这项工程背后的基本想法是,我们可以从一个语法正确的示例开始,引入一些小的错误来生成输入输出对,然后使用大量的数据集来进行语法纠正。下面将详细介绍如何构建这些数据集,如何使用它们来训练模型,以及如何预测这些任务。火龙果智能语法检查
资料组
本文从大量语法正确、书面英语对话为主的语料入手,创建了训练深度文本错误纠正的数据集。该项目首先考虑的数据集是《康奈尔电影对话库》(CornellMovie-Dialogs Corpus),其中包含超过300,000条来自电影剧本的台词。我可以找到最大的一组相关数据。
在获得类似这样的样本之后,下一步是为训练生成输入输出对。流程按下列步骤进行:
摘取资料集中的一段句子。在该句中添加一些干扰,然后设置相应于该句的输入序列。设置输出序列,使其不包含任何干扰。火龙果智能语法检查
第2步的干扰是有意引入的语法错误,我们希望模型能够改正这些错误。当前的噪声仅限于以下方面:
将(" a"," an"," the")删除。将第二部分(如" ve"," ll"," s"," m")从该动词的缩略语中删除。用同音词代替某些词体的常用词。将" then"替换为" their",将" then"替换为" than")
例如,给出下列例句:
And who was the enemy?
相应地生成的输入输出对数为:
("And who was enemy?","And who was the enemy?")
这一噪音是根据CoNLL2014语法错误纠错共享任务(" CoNLL 2014 Shared Task on GrammaticalError Correction")的统计数据产生的。该项目中,每一次干扰都随机地对可能发生的情况施加25%的概率。火龙果智能语法检查
培训
将训练序列扩展为序列模型所需的数据集。对于电影对话数据,我多次使用上述的抽样方法来获取原始对话的2-3倍的数据集。该训练模式是根据“TensorFlow序列到序列模型教学”(“TensorFlow’ ssequence-to-sequence-tutorial”)中提出的模式进行的。换句话说,我训练的序列模型包括 LSTM编码器和解码器,正如2014年 Bahdanau等人使用注意力模型来关联编码器和解码器。
译码
该方案并不采用基于最大后验概率的解码方法,而是利用这个问题的独特结构,将所有已解码序列的符号(token)都存在于输入序列中,或归入“已纠正的符号”集合中。通过训练构建“纠错”的符号集合,并与训练集合中的至少一个样本相对应,其中包含目标中的所有符号,而不是源代码中的符号。其理由是,训练过程中所遇到的错误大多包含了对一些常用词汇(如“the”,“an”,“their”)的滥用,而本文所介绍的模型应该只允许在该领域内纠正这些错误。
该工作的一部分是通过将 TensorFlow的序列修改为序列模型来完成的,它是一个用于解决未登录字(OOV)问题的预处理过程。火龙果智能语法检查
偏置解码
为把解码限制在只从输入序列或纠错符号集选取符号的情况下,项目对模型的逻辑回归先验概率用二值化掩码表示,并将掩码输入下一阶段的预测模块。
此步骤通过构建掩码完成:
mask[i] == 1.0 if i in (input or corrective_tokens) else 0.0
在解码过程中使用这些方法:
token_probs = tf.softmax(logits)
biased_token_probs = tf.mul(token_probs, mask)
decoded_token=math_ops.ar gm ax (文件文件,1)
由于在结果的 softmax转换中使用了掩码(它保证所有的输出都是正数),所以我们可以确保只选择输入和错误更正的符号。火龙果智能写作
请注意这里没有使用逻辑回归的先验概率,因为它只能用于隐藏可能对模型有用的信号。
对未登录单词(out of vocabulary)符号的处理
因为上面提到的有偏解码出现在该模型所使用的删节词中,所以我们还可以看到任意集外词表符号的模型输出中出现未知符号。在此基础上,我们再一次利用这一问题的独特结构,提出了一种非常直接的解决集外词符号问题的方法——集外词符号。
特别是,如果我们将输入序列中的集外词汇符号集合与输出序列中的集外词汇符号集合等同起来,那么就可以简单地为解码时遇到的每一个未知符号指定适当的符号。火龙果智能写作
举例来说,在以下场景中:
Input sequence: "Alex went to store"
Target sequence: "Alex went to the store"
Decoding from model: "UNK went to the store"
按照上面的逻辑, UNK将被 Alex替换。
这是一种很有道理的假设,因为在训练这个模型时,所有的错误都是相对简单的,并且没有任何特别的符号被插入或者删除。
试验与结果
下面是一些通过深度文本纠错模型和康奈尔电影对话数据集进行实验的有趣而全面的结果。这个数据集包括304713句电影对话中的台词。这些数据中有243758个用来训练模型,30474个用来验证。在训练集中,像前面描述的那样,对话库中的每一行都抽取两个样本。这些片断均按下列原则选择:同一影片中的台词不能出现在训练片断和测试片断中。火龙果智能写作
以下评估中的模型是一个序列到序列模型,它的编码和解码通过注意力机制连接起来,全部为 LSTMs 2层,512个隐藏单元。在训练过程中,该模型中的词表包含了训练集中出现的2000个常用词词汇(注意,由于我们的集外词汇解法,可以使用较少的词汇进行训练)。这一模式采用了与2014年 Bahdanau等人相似的成组(bucketing)方案,产生四种模式,输入输出能力分别低于10、15、20和40。
总体性能
以下为 BLEU (由 NLTK计算)和精度, BLEU是从测试数据集中计算出来的,用于评估培训模型和基准模型。本文中所用的基准模型只是一个分解函数,它假定输入端没有错误。这样做的目的是测试引入训练模型是否有助于提高目前没有语法纠错系统的模型的得分。
令人鼓舞的是,本文所提出的训练模型在准确度方面优于此基准模型,在 BLEU评分方面仅有一项未能优于基准模型。火龙果智能写作
研究结果表明,对于有可能出错的书写样本,采用深度文本纠错模型,平均而言,能产生语法更正确的书写样本。这个模型针对多个错误进行有针对性的训练,任何有相似错误倾向的人都可以使用这个模型来检测自己的信息。
该模型的总体结果是令人振奋的,我们可以预见,它可以扩展到电影对话数据集以外的特定的语言形式,只需用一小段虚构的、语法有问题的句子进行测试。以下是一些例子,你也可以用这些例子来验证你的观点。火龙果智能写作
对缺失成分进行解码的句子
In [31]: decode("Kvothe went to market")
Out[31]: 'Kvothe went to the market'
把 then/than混淆的句子译成:
In [30]: decode("the Cardinals did better then the Cubs in the offseason")
Out[30]: 'the Cardinals did better than the Cubs in the offseason'
该系统除纠正语法错误外,还可以顺利处理未登录的单词符号。
将来的工作
尽管目前的结果令人振奋,但是还有很大的提升空间。这一项目面临的最大问题是缺乏大型数据集——康奈尔电影对话数据集的300,000个样本相对于现代深度学习标准而言仍然太少。很遗憾,我不知道任何公开的(大多数)语法正确的英文数据集。在“高质量”的在线论坛上,类似于黑客新闻或者 Reddit的子版块上,有可能有相似的数据集。等我试一试。
对于更大的数据集,我也会考虑在训练样本中引入不同的错误。当前可以使用的干扰仅限于相当常见的语法错误;如果该模型能够学习如何纠正更细微的错误,如主谓一致等,则会非常有趣。
我可以预见,在应用前沿,该系统将被应用到多个消息应用的程序界面中,作为“纠错” API的一部分。
哈克新闻上的评论
Jmiserez:
在因特网上收集一大批高质量的数据并不容易。Reddit,以及论坛上的很多文章,都没有很高的语法质量,往往是那些母语非英语的读者(比如我)所写的。影片中的对白和我们写信时不同,可能有语法错误的句子。也许有些当代文学的公共领域(无限制地)可以用来代替或协助对话。
和这个项目没有关系,对于这个语言工具,我有一些担忧,它可以帮助我处理低质量的评论或电子邮件。一个简单的字典和语法检查就足以帮助人们在写作中找到正确的单词。但如果一个工具能够理解我的意图,然后提出重组计划,或者找到类似的句子或词语来表达同样的意思,它就会成为真正的杀手。
Brandonb:
有意思的观点!这和计算机视觉中自动编码器降低噪声的原理是相似的。本文并没有介绍高斯象素级的高斯噪声或 CNN的使用,而是介绍了世界层面的语法“噪声”,并使用 LSTM。
在我看来,一般框架可以应用于很多不同的领域。例如,我们使用 HealthKit数据(测量步数和心率的序列)训练降噪序列自动编码器,以这些身体指标为基础,来预测一个人是糖尿病、高血压还是心律不齐。在 EMR数据(与word2vec文本深度表示模型相似)方面也有类似的想法。有必要阅读"Semi-Supervised Sequence Learning"(" Sequence Learning from"),其中他们使用非噪声序列自编码器作为预训练步骤,并比较两种不同的技术:
最终,你开始考虑引入不同的语法错误,比如主语和动词的差异。他说:“我觉得这是一个好方法。你甚至有可能在极限情况下,为了“蒙骗”修正神经网络,神经网络生成的错误语法变得越来越困难,而当产生错误的神经网络与修正神经网络相互竞争时,你就可以创建生成式对抗网络。火龙果智能写作
火龙果智能写作是全球第一款中英双语语法检查校对产品,运用火龙果智能写作技术进行错别字文本校对,除错别字校对以外,还可以对语法、标点等进行校对。
火龙果智能写作官网https://www.mypitaya.com
积极拥抱变化,才能更好的应对这个时代