Pytorch学习记录-使用attention的GEC分类模型

作者: 我的昵称违规了 | 来源:发表于2019-05-09 11:45 被阅读4次

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

4. A Simple but Effective Classification Model for Grammatical Error Correction

这一篇是流利说2018年的论文,和之前深度语言模型相比看看区别。题目是《一个简单有效的GEC分类模型》

4.1 摘要

  • 将GEC任务看成是一个分类问题,分类之后找到目标词并进行预测。基于特征表达和分类模型搞- 了一个神经网络,使用大范围文本语料库进行训练(不使用人工标注)。
  • 模型中增加了attention机制,用于表达目标词的左右上下文。
  • 使用Seq2Seq。
  • 模型适合工业化生产

4.2 介绍

GEC最近的发展中主流的两个方式:分类器和机器翻译。

  • 分类器:能够处理指定错误类型。
  • 机器翻译:目标是将错误文本“翻译”成正确文本。《A multilayer convolutional encoder-decoder neural》这篇论文要看一下。
    发现都是用的Seq2Seq模型,不过现在主流就是这样。
    使用机器翻译手段的问题就是需要很大的平行语料库以及标注好的训练数据。
  • 在这篇论文中,研究者基于分类器的方式让神经网络学习句子和上下文表示,从大范围文本中生成数据用于训练神经网络。
  • 使用不同的attention捕捉句子中词的依存。

4.3 定义分类任务

这次依旧是五个错误类型:冠词、介词、动词时态、名词单复数、主谓一致。使用神经网络进行单独训练。

  • 冠词:3类a/an、 the、 没有。出现的位置应该在名词词组之前
  • 介词:8个常用介词in、to、of、on、by、for、with、about
  • 动词时态:3类
  • 名词单复数:2类
  • 主谓一致:两类


    image.png

使用stanford Corenlp作为分词和词性标注工具。

4.4 神经网络

image.png

和之前的那个简直一模一样的有没有……


image.png

模型使用Glove对输入词进行嵌入,在发现目标词汇的错误类型后,将句子以目标词为界限分成两部分(左侧上下文和右侧上下文),使用GRU进行处理。提出两种注意机制来更好地表示上下文和目标词。它们之间的区别在于是否使用目标词信息。

  • 第一种Attention仅仅使用上下文词。这是为输入上下文单词之间的内部连接建模。以下等式显示如何计算左GRU输出lo_{1:i-1}的注意力。
    score(lo_t)=lo_t^T W_a lo_{i-1}
    a(t)=\frac {exp(score(lo_t))}{\Sigma_{j=1}^{i-1}exp(score(lo_j))}
    lstate=(\Sigma_{t=1}^{i-1}a(t)lo_t)+lo_{i-1}
    可以看到W_a是矩阵,最终左侧上下文被表示为加权平均向量与最后的GRU输出连接。而右侧的上下文状态类似,除了右侧GRU最后输出是ro_{i+1},因为输入的顺序是从右往左。

OK,可以看到两边的输入顺序都是向那个目标词集中,所有左侧是从左往右,右侧是从右往左

  • 第二种Attention使用目标词来模拟它与其上下文之间的关系。以下等式用于左上下文。
    score(lo_t)=lo_t^T W_b e_i
    a(t)=\frac {exp(score(lo_t))}{\Sigma_{j=1}^{i-1}exp(score(lo_j))}
    lstate=(\Sigma_{t=1}^{i-1}a(t)lo_t)+eˆi+lo_{i-1}

其中W_b是矩阵,e_i是对目标词汇做的嵌入。左侧上下文状态是加权平均向量与最后目标次会嵌入、GRU输出的连接。同样的注意力也适用于右侧上下文。

注意,以下是重点
文章中只使用这个目标词依赖注意名词单复数和动词时态错误类型,因为在为这两种类型决定正确的单词形式时,单词本身与其上下文之间的相互作用是至关重要的;而对于其他三种类型,目标词信息没有必要或不正确有用,所以我们只对它们使用第一个注意。
对于介词错误类型,目标词本身可能是错误的(例如,目标词是,而右词可能是)。对于主谓一致或冠词错误类型,不需要关于目标词(动词,文章位置)的信息来预测正确的形式。

在计算完左右状态后,我们将它们连接起来并将其传递到多层感知器(MLP)。在MLP的最后一层,使用softmax函数来计算错误类型的每个类的概率。
其中L(x)是全连接线性操作。
L(x)=W_x+b
MLP(x)=softmax(L(ReLU(L(x)))

相关文章

网友评论

    本文标题:Pytorch学习记录-使用attention的GEC分类模型

    本文链接:https://www.haomeiwen.com/subject/ilfwoqtx.html