美文网首页机器学习100天论文阅读Machine Learning & Recommendation & NLP & DL
Pytorch学习记录-微软基于Seq2Seq的GEC(流畅度提

Pytorch学习记录-微软基于Seq2Seq的GEC(流畅度提

作者: 我的昵称违规了 | 来源:发表于2019-05-12 21:15 被阅读5次

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

    7. Reaching Human-level Performance in Automatic Grammatical Error Correction: An Empiricale Study

    这是微软亚洲研究院在2018年的一个报告,采用了一种全新的学习和推断机制,在CoNLL-2014以及JFLEG两个权威语法自动纠正评测数据集上,首次实现了机器语法自动检查结果超越人类参照水平。这项最新的语法改错技术也催生了“微软小英”作文打分这一全新的功能。

    7.1 摘要

    • 现在Seq2Seq已经是主流趋势了,研究者搞了一个更牛逼的流畅度提升学习和推断机制
    • 这个机制基于“错误-正确”句子对进行训练。
    • 流畅度提升推理允许模型通过多个推理步骤递增地校正句子。
    • 将流畅性提升学习和推理与卷积式seq2seq模型相结合。
    • 最后的得分很猛,在CoNLL-2014上75.72, JFLEG 测试集上62.42GLEU,这使其成为首个在两个基准数据集上都达到人类水平(CoNLL72.58,JFLEG62.37)的GEC系统。新加坡的那个模型搞了那么多整合最后才勉强达到54.79。

    7.2 介绍

    近些年Seq2Seq模型使得GEC得到极大的发展,但是大多数Seq2Seq模型都有两个问题:

    • 只使用少量“对-错”句子进行训练。训练数据限制了模型生成


      image.png
    • seq2seq模型通常无法通过单轮seq2seq推理完美地纠正具有许多语法错误的句子

    为了解决这个问题,研究者开发了一个流畅度提升学习和推断机制

    流畅度提升学习,Seq2Seq模型使用原始纠错句子和自己生成的流畅度较差句子进行训练,将它们与训练数据中正确句子配对,从而构建新的纠错句对。
    模型的推断方面,流畅度提升推断机制能够允许模型对错误句子进行多轮纠错,只要每一次提议的编辑能够提升语句的流畅度。具有多重语法错误的句子,一部分错误会被优先修正,修正的部分能让上下文更加清晰(有利于接下来的语法纠错)。进一步提出了使用两个 seq2seq 模型进行往返纠错方法,其解码顺序是从左到右和从右到左的 seq2seq 模型。又因为从左到右和从右到左的解码器使用不同的上下文信息解码序列,所以它们对于特定的错误类型有独特的优势。往返纠错可以充分利用它们的优势并互补,这可以显著提升召回率。

    7.3 背景:神经语法纠错

    典型的基于NMT的GEC是使用Seq2Seq(encoder-decoder)结合attention机制的模型。

    • 原始句子x^r=(x_1^r,x_2^r,...,x_M^r),其中M为句子中单词数目
    • 纠正后句子x^c=(x_1^c,x_2^c,...,x_N^c),其中N为句子中单词数目
      模型通过最大似然估计(maximum likelihood estimation)学习概率映射P(x^c|x^r),进而学习模型参数 Θ_crt 以最大化以下公式。
      \Theta_{crt}^*=argmax_{\Theta_{crt}}\Sigma_{(x^r,x^c)\in S^*} logP(x^c|x^r; \Theta_{crt})
      其中S^*是“对-错”句对。

    模型推断,输出的句子为x^o=(x_1^o,...,x_L^o),这一过程需要最大化下列公式。
    P(x^o|x^r=\prod _{i=1}^LP(x_i^o|x^r,x^o_{<i}; \Theta_crt)

    7.4 流畅度提升学习

    用于GEC的常规seq2seq模型仅从原始纠错的句子对中学习模型参数。但是这种纠错后的句子对不够充分。许多神经GEC模型的概括性不是很好。GEC和NMT不同的地方时,它的最终目标是让句子更加通顺,而不用改变其原始含义。因此任何满足流利提升条件的句对都能够作为训练例子。
    这里,研究者定义f(x)作为句子x的流利度得分。
    f(x)=\frac {1}{1+H(x)}
    H(x)=-\frac{\Sigma_{i=1}^{|x|}logP(x_i|x_{<i})}{|x|}

    • P(x_i | x_{<i})是给定上下文 x_{<i}x_i 的概率,由语言模型计算得到。
    • |x| 是句子 x 的长度。
    • H(x) 是句子 x 的交叉熵,范围为 [0, +∞)。因此 f(x) 的范围为 (0, 1]

    流畅度提升学习的核心是在训练中生成流畅度提升句对,在这里提供了三种流畅度提升学习策略:反向提升(back-boost)、自提升(self-boost)和双向提升(dual-boost)。


    image.png

    7.4.1 反向提升

    7.4.2 自提升

    7.4.3 双向提升

    7.5 流畅度提升推断

    7.5.1 多轮纠错

    7.5.2 往返纠错

    相关文章

      网友评论

        本文标题:Pytorch学习记录-微软基于Seq2Seq的GEC(流畅度提

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