Pytorch学习记录-基于深度上下文模型的GEC

Pytorch学习记录-GEC语法纠错02
五月第一周要结束了,接下来的三个月主要是文献阅读,准备8、9月的开题报告,技术类的文献集中在GEC和Text maching的应用方面,读完之后找demo复现,然后应用。
理论方面的论文也都是英文的

1. Deep Context Model for Grammatical Error Correction

这是我读的第一篇文法纠错的论文,流利说英语发表于2017年,很短,先来看看。

1.1 摘要部分

  • 模型架构:基于RNN构建的深度上下文模型(deep context model)
  • 模型解决的问题:识别5种语法错误
  • 模型解决方法:将错误纠正任务当作一种分类任务,模型从自然文本中学习语法上下文表示
  • 模型的优势:不像传统分类方法那样要求语言学知识
  • 实验数据:在CoNLL-2014 shared task达到SOTA

1.2 介绍

已有的GEC主要使用三类方法:预定义规则(pre-defined rules)、分类(classification)、机器翻译(MT)。

  • 预定义规则(pre-defined rules)无法涵盖所有的语法错误
  • 分类(classification)
    • 把文本语法纠错(GEC)视为多分类问题,其中会针对给定的错误类型指定一个混淆集合,并且使用的特征通常包括文本的表面形式和语法信息(例如,使用词性标签和依存句法)。使用分类方法,错误类型和提取特征方法需要事先定义清楚。
    • 另一种分类器如平均感知器和朴素贝叶斯算法也适用于GEC任务。
    • 问题是特征必须人工设置,这样就很难覆盖所有的情景,另外由于语言的复杂性,这种方法不适合GEC
  • 基于统计学的机器翻译(SMT)优点是它可以利用大规模语言资源(网络规模语言模型)和纠错文本
    • 问题:基于短语的MT方式存在字的离散性、线性映射和对全局上下文不敏感等问题
  • 基于神经网络的机器翻译(NMT)
    • 能够应对分类方法无法处理的冗余和非惯用语法错误
    • 双向LSTM模型能够用于语法错误检查任务

使用分类器方法作为GEC的优势

  • 不基于标记数据,这样就不是那么昂贵了
  • 分类方法易于融合其他更高级的上下文信息。许多语法纠错方法可以从词性信息,句法树信息获益,而且实验表明分类方法融合这些信息对错误纠正效果提升明显。

作者搞出来一个“基于深层上下文模型的GEC新型分类器方法”,不再使用表层和浅层特征(POS,依存信息)而是直接使用深层特征。使用双向GRU表达上下文。我们的新方法不需要为每种错误类型进行详细的特征工程。深度上下文表示以端到端的方式从大型纯文本语料库中学习。

1.3 模型

image.png

深度上下文向量表示的结构。对于目标单词"go",(“I”)上下文从左到右的顺序输入到GRU网络,另一个(“to school everyday”)是把上下文从右到左输入。获取上下文,这样就能够得到上下文向量,公式如下:

可以看到是处理左边部分,阅读顺序从左到右,是处理右边部分,阅读顺序从右到左。l,r 分别表示 从左到右的词向量和从右到左词向量。
在完成词嵌入后,将整合在一起的向量传入多层感知机(MLP)来获取两个向量之间的依存关系。在多层感知机(MLP)的第二层使用softmax预测目标词或目标词的状态。L(x)是一个全连接线性操作。最后获得的y是预测词或词的状态。


如果预测结果不同于原始单词或其状态,则检测到错误,预测结果用作校正。
不同的错误类型中,y被定义为不同的方式,这篇论文主要包括五个错误类型
image.png

  • 冠词纠错模型中,如果y等于0,1或2,则意味着冠词应该选择介词“a/an”、“the”或“非冠词”;
  • 介词纠错模型中,y表示每个介词(in , from , to,at …)的索引位置;
  • 动词纠错模型中,y表示动词的形式(0为动词原形,1为动名词或现在分词,2为动词过去式);
  • 主谓一致(人称)纠错模型中,0表示非第三人称单数,1表示第三人称单数;
  • 名词纠错模型中,0表示单数名词,1表示复数名词。

1.4 实验

1.4.1 数据集和评估

  • 训练:从wiki中提取训练样本。在实验中,使用Glove词向量来初始化,在训练过程中更新词向量,词向量维度为300。所有的输入文本转小写,而且把所有不在词表中的词映射为unk表示,词表大小是40000。
  • 测试:使用CoNLL-2014测试数据集来评价模型,数据集包含有1312个句子。
  • 标准:使用作为纠错指标。是准确率(P)和召回率(R)的组合指标,并且分配两倍权重到准确率上,因为在纠错任务中准确率要求往往比召回率更重要。

1.4.2 错误类型

五个错误类型,分类器都会独立训练。使用Stanford cordnlp需要检测的定位目标词。就是说,使用这类分词工具,对目标句子进行分词,同时会打上数据标签,提取其中的关系,通过学习这些关系来训练模型(这样就和人类自身对特定学习任务进行训练很类似了)。
例如,在主谓一致纠错任务中,用分词工具提取非第三人称单数单词和第三人称单数单词的映射关系。在测试中,分词工具可以定位动词,指示这些动词应该用我们的模型来检查。如果检查到错误,我们可以使用预测结果来纠正句子。

1.4.3 窗口大小

纠正不同的语法错误要求不同的依存距离。主谓一致的任务中谓语有可能距离很远;介词类错误只需要使用临近词汇。因此对于不同的语法错误类型要使用不同的上下文窗口大小。
结论:在冠词错误类型,窗口大小设置为5;介词错误类型,窗户大小为3;名词数错误类型,窗口大小为15。在图中选择数值最大的即可。

image.png

1.4.4 词根

引入词根作为额外的上下文信息。目标词的单复数与该词自身密切相关。同样也是效果显著。

总结一下

这活不容易啊,中间的模型很简单,但是要考虑周全很难……

你可能感兴趣的:(Pytorch学习记录-基于深度上下文模型的GEC)