专栏首页人工智能前沿讲习【阅读笔记】用于可控文本生成的句法驱动的迭代拓展语言模型

【阅读笔记】用于可控文本生成的句法驱动的迭代拓展语言模型

论文标题:Syntax-driven Iterative Expansion Language Modelsfor Controllable Text Generation 论文出处:ACL2020 原文链接:https://arxiv.org/abs/2004.02211v1 转载请注明出处:学习ML的皮皮虾

Abstract

主流的文本建模方法都是将文本处理为离散的字符序列,尽管这样能够隐式地捕获一定量文本的结构信息,但是这种捕获能力受限于于顺序动态的自回归文本生成。

因此,本文提出了一种新的建模语言的范式:即将句法依赖解析树引入语言模型和文本生成过程中,按照从树的根节点向分支拓展的顺序指导文本生成。

本文实验表明,这种新的范式有效提高了文本生成,其质量和多样性高于顺序生成的语言模型。

Introduction

在当前文本生成任务领域中的主流范式均为从左到右自回归生成离散字符的生成方式。大部分流行的生成式神经语言模型都是基于这种范式构建的。

如RNN,本质上就是顺序模型,在接入teacher force的训练方式后很自然地使用了自回归的生成方法; 再如Transformer,尽管其本身并非顺序的,但也直接针对顺序范式。

这种顺序生成尽管能够最大程度上保留生成语句的连贯性,但是却因梯度消失以及上下文依赖捕获能力欠缺等问题,最终导致生成的内容缺乏一定逻辑性和正确性。

基于此,为了保留原本句子的句法结构,本文作者提出了一种新式的用于文本生成的语言模型:Iterative Expansion Language Model(IELM)

它从树根节点开始,通过迭代扩展树的每一层字符以生成最后的序列,该序列遵循句子句法依赖解析树所定义的字符顺序。

Related Works

在本文作者提到的related works中,我对于两个主题比较感兴趣,特别拿出来做一下归纳总结:

Syntactic Constituent-driven Generation

https://openreview.net/forum?id=rkgOLb-0W

这篇文章提出了一种解析-读取-预测网络,在这种网络中,通过跳连接将组成依赖关系与RNN集成在一起。他们的模型不需要句法监督,但可以通过利用句法距离和结构化注意来了解潜在的依赖结构。

https://www.aclweb.org/anthology/P19-1122/

这篇文章提出了一种句法监督的Transformer,将组成部分分析树的简化形式用作潜在变量,以监督的方式对其进行自回归建模,之后再将其作为输入,用于非自回归生成的Transformer中生成语句。

https://openreview.net/forum?id=B1l6qiR5F7

这篇文章提出了LSTM的一个魔改版本,潜在句子树结构用于通过特殊的“主”输入和忘记门以控制循环单元之间的依赖性。

Insertion-based Generation

http://proceedings.mlr.press/v97/stern19a.html

Insertion Transformer是最近频繁在非自回归生成任务的研究上作为baseline出现,因此若对于非自回归生成有研究的同学可以参考一下。

这篇文章提出的新式Transformer是一个条件生成模型,在其生成过程中,主要是在序列中对应位置插入新的字符,不断迭代插入最终生成目标序列。该模型依据其依赖二叉树的构建方法,同时具备了从左到右的逐字符解码能力以及插入新字符并行解码的能力。

Iterative Expansion LMs

在介绍模型之前,首先介绍模型的输入:

输入词汇表包含终端字符和称为依赖项占位符的特殊标记,每个标记都与一个可能的HEAD依赖关系相关联。具体如图所示:

如上图所示,依赖项占位符为[poss],[nsubj],[advmod],[xcomp],[dobj]以及[ROOT]。

第一次迭代的输入是带有[ROOT]元素的序列。在每次迭代时,模型都将输入词汇表的索引序列作为输入接收,称为“上级序列”(PLT),并且以非自回归方式生成两个新序列,每个序列的长度与输入相同。

第一个输出序列为从词汇表中生成的字符序列。这个序列被称为“下级序列”(NLT)。

第二个输出序列是一个名为扩展占位符的符号序列,它取自一个单独的符号词汇表。此序列称为“下级扩展”(NLE)。

每个扩展占位符都与一个依赖模式相关联,该模式描述对应字符在下一级字符序列中该位置的左、右依赖关系。打个比方,对于上图中第一次迭代like的NLE关系就是[nsubj-advmod-HEAD-xcomp]。

每次迭代之后,模型的输出都会被扩展。拓展内容通过组合来自前一层的字符、预测的下一层字符以及扩展占位符来创建新的序列。

当输出中有[pad](下级字符或下级扩展)时,这意味着在计算损失函数时将忽略该位置的输出。这是因为,每次迭代获得拓展的序列都会进行一次计算,已经计算过的字符或拓展,则不需要被重复计算。

另一点值得注意的是,由于占位符[HEAD]代表某个分支的开始,同时也代表了上一个分支的结束,因此在这种通过依赖树分支迭代生成的过程中不需要特定的结束符号(如</s>或<eos>等)。

Tree Sequentialization

由于单个词汇可能会有多重直接依赖项,因此上一部分提到的依赖解析树([nsubj-advmod-HEAD-xcomp])可能无法很好地进行迭代拓展:

因此,作者又提出了一种改进的树序列化的方法,即保证对于每一个终端[HEAD]词,最多只有一个左侧依赖项和一个右侧依赖项,以保证每次迭代的拓展顺利进行:

这种新的树序列化方法极大地降低了迭代生成过程中的并行程度:

上图展示了对于同一句子的三种句法解析树:序列化树、非序列化树、标准二叉树(log2n)的深度和对应句子的长度的比率分布。

可以看出,尽管树序列化对生成的并行程度,但它降低了数据的稀疏性,并允许模型处理如:单词的依赖项数量较大,以至于模型无法正确捕获依赖关系的结构,比如枚举:“I bought a pair of shoes, an umbrella, a beautiful jacket and a bracelet.”

Extension to Subword-level Vocabularies

为了便于捕获依赖关系,作者还提出了一个进一步分解的办法:对于每个单词,将其节点分解为该单词包含的子单词(Subwords)节点,并重新排列树,以使旧单词节点的头部现在成为第一个子单词节点的头部,而每个后续子单词都取决于前一个单词:

Neural Architecture

本节介绍了作者具体实现模型的一些关键组成部分的实现方式:

在baseline的选择上,由于Transformer的并行特性,本文的模型都是基于Transformer构建的,并且为了生成双重输出:字符序列(NLT)和拓展序列(NLE),对于以上两种序列的生成过程作者提出了两种做法:

  • 独立生成终端字符和扩展(independent generation ofterminals and expansions):把最终的隐层状态传入两个不同的映射网络用于生成关于终端字符词汇表的分布以及拓展占位符词汇表的分布。
  • 条件生成终端字符(conditioned generation of terminals):首先根据中间层的隐层状态解码得到对应的一组拓展占位符ID,然后通过一个可训练的embedding层获得推展占位符的embedding表示。这些embedding被添加到当前隐层状态编成新的隐层状态,用作后续层的输入。

对于解码时,按照上文设计,对于NLT和NLE的解码,理应有两个不同的词表,而为了实践上的便利,这里作者设计将两个词表融合在一起,即最终解码的softmax时则将所有拓展占位符的概率进行覆盖mask。

在引入依赖信息时,作者在编码表示时在原有的embedding层中添加了一个可学习终端位置的embedding编码head position embedding,该编码为每个词的编码加入了其对应终端head位置的编码。

而对于self-attention,作者再次提出了两种变体结构:

标准self-attention的可视性矩阵

  • 不受限的attention(unconstrained attention):对于原本的self-attention来说,为了确保训练时的因果性,往往会mask目标词之后的字符,然而此处解除了这个限制:将要预测的目标词可以获取整个输入的词序列,即上一次迭代生成的词汇。
  • 受限的attention(constrained attention):这种变体利用自注意矩阵来迫使每个预测词只关注它们的HEAD词,递归地直到句子的ROOT词。

受限的attention每次迭代的可视性矩阵

Training

对于IELM的训练,首先明确模型的主要输入是依赖项解析树某一级别上的字符(PLT),而输出则包括了两项:下级字符(NLT)和下级拓展(NLE)。

其次输入还包括了依赖项索引序列(主要用于head position embedding)以及用于受限attention的mask序列。

训练在mini-batch中进行;由于“可训练单元”是一个层次转换,在数据随机重排后,训练批次由来自许多不同句子的不同层次组成。

该模型使用最大似然估计进行训练,使用字符和扩展占位符的类别交叉熵,然后将两个子损失都加入到最终损失中。同时,在先前迭代中生成的字符会在当前的输出中显示为[PAD]令牌,并在计算loss中被忽略。

Inference and Text Generation

IELM的推理同样也是迭代进行的。初始状态是一批[ROOT]字符,其head position初始化为表示根节点的特殊值,并且在受限attention中,包括一个mask序列,其具有该批次中每个句子中单个节点的自相关性。

在每次迭代中,模型都会生成终端字符和扩展占位符的概率分布。而字符序列则会根据拓展占位符序列进行拓展。并且,如果仍然有未完成的分支,这些就会成为下一个迭代的输入。

在对字符和扩展占位符概率分布进行采样之前,作者对<unk>字符和占位符进行了屏蔽,以避免生成它们。

Probabilities from the Language Model

与顺序LM按照链式法则

来分解一个句子的生成概率不同。

IELM需要借助句子的依赖解析树来计算其生成概率。给定一个依赖树

,考虑到在特定迭代中字符预测是相互独立的,但又依赖于前面迭代中的字符预测,故将句子概率近似分解为:

其中,

表示在上一次迭代中生成的字符序列

以及拓展序列

同样地,还可以通过加入拓展占位符的概率来计算句子和树的联合概率:

而要计算最终的句子和树的联合概率,需要计算所有可能出现的依赖树

,而这是不现实的,因此作出假设,所有

的和由最有可能出现的树

决定,故IELM的最终句子和依赖树联合概率计算方法可近似为:

这样的近似让IELM计算语料库级别的句子困惑度成为可能,然而这样近似的困惑度必然是大于等于其真正对所有可能进行计算的方法得到的困惑度。

Experiment Setup

结合以上阐述的方法,在本章节,作者首先做出说明:除了明确说明,实验条件设置为,采用不受限的attention,采用head position embeddings以及条件生成终端字符方法,并且对于依赖树采用序列化方法。

Unconditional Text Generation

这项实验评估方法借鉴了以下文章的方法:

https://arxiv.org/abs/1811.02549

建立了模型的softmax温度(temperature)和质量-多样性-权衡之间的自然关系:较低的温度产生较少的多样性,较高的质量样本;较高的温度增加分布的熵,并产生更多的多样性,较低的质量模型。

因此综上所述,本文的评估目标就是在不同的模型最终softmax温度值

下生成质量和多样性都较高的文本。

对于质量的评估,作者采用了

分数来评估;

而对于多样性,作者采用了

分数来评估,这个分数是使用生成的其他句子作为参考进行计算。

通过设置不同的温度值

,对每个值选取2000个样本进行实验,以结果质量为横坐标,结果多样性为纵坐标,其具体结果如下:

特别的,当

时:

消融实验:

基于AWD-LSTM和GPT-2计算出的困惑度,并在更多数据上进行训练,本文模型生成的文本质量更高。

并且从消融实验中可以看出,受限的attention在非自回归生成中并没有太好的表现;对于字符序列和拓展序列的生成方式上,条件生成所产生的效果要由于分开生成;Head position embedding的引入并没有带来较大的提升。

而一些自监督的Refinement实验反而不像其他自回归语言模型一样对模型的表现带来了提升,而是降低了模型的表现。

Conclusion

这篇文章总体看来,介绍了一种新的用于生成的语言模型,具体优势总结起来如下:

  • 采用非自回归的生成方法,比自回归顺序生成节省了至少一半的生成步骤,效率极大提升。
  • 本文提出的非自回归生成语言模型无论是质量上还是多样性上都可以与传统语言模型不相上下甚至某些指标更胜一筹,可见非自回归模型的潜力。
  • 借助了句法依赖解析树来指导生成:与以往在编码输入文本的过程中隐式捕获依赖关系不同,这种做法显示地将句法信息作为输入强制约束了整个生成过程中的依赖关系指向,保证了生成内容的逻辑性和准确性。

但是其缺点也很明显:

  • 在文中提出的句法依赖解析树的构造还是相对复杂的,对于数据的预处理工作量较大,同时某些特定句法的标注可能需要专家知识。
  • 某些传统语言模型极大受益并得到验证的自监督训练方法在非自回归模型中无法使用,没有替换的手段对其进行进一步训练。

关于非自回归生成预训练语言模型,还有一篇文章可供参考:

https://arxiv.org/abs/2005.00558v1

本文分享自微信公众号 - 人工智能前沿讲习(AIFrontier)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SFFAI分享 | 田正坤 :Seq2Seq模型在语音识别中的应用

    随着神经机器翻译的兴起,基于Attention的Seq2Seq模型由于其强大的建模变长序列直接转换问题的能力,也在其他领域获得了极大的关注。语音识别问题本质上也...

    马上科普尚尚
  • SFFAI分享 | 曹杰:Rotating is Believing

    自动化所智能感知与计算研究中心在生成对抗网络(GAN)基础上提出高保真度的姿态不变模型来克服人脸识别任务中最为经典的姿态不一致问题。该模型不仅在多个基准数据集的...

    马上科普尚尚
  • SFFAI分享 | 邵晨泽:非自回归机器翻译【附PPT与视频资料】

    非自回归神经机器翻译是一种新兴的翻译技术。传统的自回归机器翻译模型是逐词产生译文的,每一步的译文单词的生成都依赖于之前的翻译结果,而非自回归模型对每个译文单词的...

    马上科普尚尚
  • Tensorflow入门教程(二十四)——生成对抗网络(GAN)

    目前在深度学习领域中,生成对抗网络是非常热门,能给我们带来不可思议的一个领域方向。今天我将分享一下如何用生成对抗网络来做生成图像(Mnist和卡通人物脸)。

    用户7498388
  • 使用Docker环境快速搭建靶机环境

    在实际学习中,经常需要模拟不同的漏洞环境,而使用公网的实例的话,多多少少又存在一些风险,因此能搭建一个本地的模拟环境去测试漏洞是一个不错的方案。Docker是近...

    FB客服
  • Delayed Message 插件实现 RabbitMQ 延迟队列

    对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的,之前有介绍过如何使用 RabbitMQ 死信队列(DLX) + TTL 的方式来模拟实...

    五月君
  • SNMP学习笔记之SNMPWALK 命令

    SNMPWALK是一个通过SNMP GET-NEXT类型PDU,实现对目标AGENT的某指定MIB分支信息进行完整提取输出的命令工作。

    Jetpropelledsnake21
  • 原来浏览器的数组排序 sort() 有 BUG

    按照我们正常理解,给 sort 方法传递的比较函数返回 0,那应该表示位置不用改变,所以应该是原数组输出,是把

    请叫我大苏
  • Oracle数据库 表连接与表设计

    select deptno,e.ename,d.dname from emp e natural join dept d;

    wolf
  • MySQL时间函数,用起来比PHP还爽

    前一篇写了PHP的时间函数(还是草稿),这一篇就写Mysql的时间函数吧。最近做的项目,关乎权限,于是自然而然的就与有效期联系在了一起。其 中有一个功能是生成特...

    wangxl

扫码关注云+社区

领取腾讯云代金券