参与:Geek AI、张倩作者: Xinyue Liu、Xiangnan Kong、Lei Liu、Kuorong Chiang

TreeGAN:为序列生成任务构建有句法意识的GAN

生成对抗网络(GAN)在图像生成领域表现出了很强的能力。最近,GAN 从图像生成领域扩展到了序列生成领域。用于序列生成的现有 GAN 主要关注的是一些语法无关的一般序列。然而,在许多实际应用程序中,我们需要生成一种形式语言的序列,并受相应语法的约束。生成这样的序列非常具有挑战性。为了解决这些问题,本文研究了通过 GAN 实现的有句法意识的序列生成问题,提出了一个新的 GAN 框架——TreeGAN,将给定的上下文无关文法(CFG)融入序列生成过程中。本文证明了 TreeGAN 可以为任何 CFG 生成序列,它的生成完全符合给定的句法。在合成和真实数据集上的实验表明,TreeGAN 显著提高了上下文无关语言中序列生成的质量。

1. 引言

生成对抗网络是由生成网络和判别网络组成的无监督学习框架。我们将它们称为生成器(G)和判别器(D)。D 学着去区分某个数据实例是来自真实世界还是人为合成的。G 试图通过生成高质量的合成实例来迷惑 D。在 GAN 框架中,D 和 G 被不断地轮流训练直到它们达到纳什均衡。训练好的 GAN 会得到一个能够产生看起来与真实数据十分相似的高质量数据实例的生成器。

受到其在图像生成和相关领域取得的巨大成功的启发,GAN[1] 最近已经被扩展到序列生成任务中 [2,3]。用于序列生成的 GAN 在现实世界中有许多重要的应用。例如,为了给一个数据库构建一个良好的查询优化器,研究人员可能希望生成大量高质量的合成 SQL 查询语句对优化器进行基准对比测试。不同于图像生成任务,大多数语言都有其固有的语法或句法。现有的用于序列生成的 GAN 模型 [2,3,7] 主要着眼于如图 1a 所示的句法无关(grammar-free)的环境。这些方法试图从数据中学习到复杂的底层句法和语法模式,这通常是非常具有挑战性的,需要大量的真实数据样本才能取得不错的性能。在许多形式语言中,语法规则或句法(例如,SQL 句法,Python PL 句法)是预定义好的。将这样的句法引入到 GAN 的训练中,应该会得出一个具有句法意识的更好的序列生成器,并且在训练阶段显著缩小搜索空间。有句法意识的现有序列生成模型 [4] 主要是通过极大似然估计(MLE)进行训练的,它们高度依赖于真实数据样本的质量和数量。一些研究 [2,5] 表明,对抗性训练可以进一步提高基于极大似然估计的序列生成性能。即使有句法意识的现有序列生成方法引入了语法信息,其生成结果也可能不是最好的。

图 1:两个问题设定背景的比较。(a)句法无关的序列生成问题。仅仅使用了一组真实序列训练生成器,生成的序列可能会出现句法错误。(b)有句法意识的序列生成问题。除了一组真实序列(方框左侧顶部),我们还给出了一套句法规则作为先验知识(方框右侧顶部,例如「A 7→ A, A」和「B 7→ 表名」)。在每个步骤中,生成器都遵循一个或多个预定义的规则(输出箭头中间的小方框,如「R1」、「R2」等)来构造一个序列(虚线框),该序列与实际序列相类似并且遵循语法。

为了解决上述问题,我们深入研究了在预定义的语法环境下使用 GAN 生成序列的问题。我们在图 1b 中阐述了这个问题,其中给出了一个真实序列的语料库(方框左侧顶部)和一组语法规则(方框右侧顶部)作为输入。我们的目的是学到一个生成网络 G,使其能够根据给定的语法构建高质量序列,同时通过对抗性训练模拟真实序列。我们根据著名的乔姆斯基层级(Chomsky hierarchy)[8] 将研究重点放在上下文无关语法(Context-Free Grammar,CFG)上,它可以应用于许多现有的形式语言。上下文无关语法的正式定义在本文的第二章-C 中给出。据我们所知,我们的工作是第一份致力于为序列生成任务构建一个有句法意识的 GAN 的研究工作。

虽然 GAN 在很多任务上都取得了成功,想要学习到这样一个具有句法意识的生成网络并非易事,它面临着如下挑战:

  • 确保句法的正确性:保证句法正确性的困难是序列生成器与生俱来的:它依次逐个生成单词。大多数语法模型都适用一种自顶向下的结构,例如用树形结构来抽象语法信息。为了充分实现句法意识,序列生成器必须遵循一定的语法树结构。然而,语法树的结构可能有很大的区别,序列生成器不可能涵盖所有可能存在的树形结构情况。

  • 跟踪不完整短语的句法状态:循环神经网络(RNN)通常在序列生成任务中被用作生成器,它在每个步骤中将生成的单词的摘要存储在其隐藏状态中。然而这样的摘要并没有跟踪部分生成的序列中的句法信息,这会导致整个序列中可能出现句法错误。为了构建一个有句法意识的生成器,我们需要建立一种机制,使 RNN 能够在生成序列时存储完整的句法信息,并跟踪当前状态。

  • 有句法意识的判别器:判别器是一个 GAN 框架的关键组成部分,应该根据待研究任务的特性专门设计。DCGAN 使用了卷积神经网络(CNN)[9] 作为判别器在图像表示和生成方面取得了更好的模型性能。而 MaskGAN[6 ] 则使用了 LSTM[10] 作为判别器训练序列生成器,用来填补缺失的文本。在我们的问题中,简单地使用 LSTM 或 CNN 作为判别模型可能会遗漏关键的语法模式,这会让 GAN 框架得到一个较弱的分类器。因此,对于具有句法感知能力的序列生成任务来说,需要精心设计一个量身定做的判别器,从而对序列中丰富的语法信息进行恰当的编码,引导生成器更好地获取底层句法模式。

  • 预训练:生成器和判别器通常都需要适当的预训练。然而,由于我们是首次使用 GAN 研究该问题,尚不清楚如何为有句法意识的序列生成任务设计一个合适的预训练策略。

为了解决上述问题,我们提出了一个新的 GAN 模型,称为 TreeGAN。TreeGAN 纳入了一套语法规则并且学着生成解析树,而不是直接生成序列。每棵生成的树都对应于一个序列,该序列在给定的语法下是正确的。这种方法对生成器有严格的限制,并且保证了生成序列的句法正确性。我们将在第三章-B 中详细介绍如何应用这些限制。由于 TreeGAN 的生成器生成的是树而不是普通的序列,基本的 RNN/LSTM 并不再是判别器的最佳选择。为了更好地区分假解析树(不正确的人为合成的解析树)和真解析树,我们在对抗训练中使用 TreeLSTM [11] 指导树生成器,本文的第三章-C 将会介绍详细细节。相应的预训练策略将在第三章-D 中讨论。现将本文的贡献总结如下:

  • 我们将序列生成任务转化为解析树生成任务,从而有效地引入结构化的信息。我们说明了在一个上下文无关句法环境下的序列可以被转换为相应的解析树,这在 TreeGAN 中被用于指导生成器生成真实的解析树

  • 我们提出了一个树生成器,它使用 LSTM 生成遵循预定义的上下文无关语法的解析树

  • 我们提出了一个名为 TreeGAN 的对抗训练框架,其中使用树结构的 LSTM 模型 [11] 作为判别器指导树生成器构建解析树

  • 在合成数据集和真实数据集上进行的大量实验表明,本文提出的 TreeGAN 框架可以根据预定义的上下文无关语法生成高质量的文本/序列。

图 2: 相关的 GAN 模型的对比。「D」代表 GAN 模型的判别器,「G」代表生成器。(a)DCGAN[5](b)MaskGAN[6](c)TreeGAN(本文提出的模型)

论文:TreeGAN: Syntax-Aware Sequence Generation with Generative Adversarial Networks 

论文链接:https://arxiv.org/abs/1808.07582

生成对抗网络(GAN)在图像生成领域表现出了很强的能力,GAN 框架中有一个指导生成器模型进行训练的判别器模型,从而构建与真实图像极为相似的图像。最近,GAN 从图像生成领域扩展到了序列生成领域(例如,诗歌、音乐和代码)。用于序列生成的现有 GAN 主要关注的是一些语法无关的一般序列。然而,在许多实际应用程序中,我们需要生成一种形式语言的序列,并受相应语法的约束。例如,为了测试数据库的性能,可能需要生成一组 SQL 查询语句,这些查询不仅需要与真实的用户查询相类似,还需要遵循目标数据库的 SQL 句法。生成这样的序列非常具有挑战性,因为 GAN 的生成器和判别器都需要考虑序列的结构和形式语言中给定的语法。为了解决这些问题,我们研究了通过 GAN 实现的有句法意识的序列生成问题,在该问题中,判别器和生成器同时获得了一组真实序列和一组预定义的语法规则。我们提出了一个新的 GAN 框架,即 TreeGAN,将给定的上下文无关文法(CFG)融入序列生成过程中。在 TreeGAN 中,生成器使用循环神经网络(RNN)来构造解析树。然后,可以将每个生成的解析树转换为给定语法的正确序列。判别器使用树结构的 RNN 来区分生成的树和真实的树。我们证明了 TreeGAN 可以为任何 CFG 生成序列,它的生成完全符合给定的句法。在合成和真实数据集上的实验表明,TreeGAN 显著提高了上下文无关语言中序列生成的质量。


图 7:在 SQL-B 上进行的定量分析

表 3:SQL—B 中的 SQL 查询语句生成结果。句法错误用红字标注。


图 8:在 Django 上进行的定量分析

表 4:Django 中生成的 Python 代码。句法错误用红字标注。

图 3:左图:序列「010010」的解析树。右图:用于生成左图所示的解析树的动作序列。实线箭头表示动作流的时间顺序,虚线肩头表示上一层嵌入的输入(参见第三章-B)

图 4: 图 3 所示的解析树的生成过程。生成器维护了一个父栈(灰色的列)和一个子栈(黄色的列),当前节点(子栈下方的黄色方框)及其父节点(灰色方框)在每个生成步骤中分别从两个栈中弹出。栈中的红色元素指的是在每一步中压入栈的元素。当两个栈都为空时停止序列生成。

理论自然语言处理序列模型生成对抗网络
2
相关数据
纳什均衡技术

纳什平衡,又称为非合作赛局博弈,是在非合作博弈状况下的一个概念解,在博弈论中有重要地位,以约翰·纳什命名。 如果某情况下无一参与者可以通过独自行动而增加收益,则此策略组合被称为纳什均衡点。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

判别模型技术

在机器学习领域,有一种分类方法将模型分为判别模型和生成模型(generative model)两种。 判别模型是一种对未知数据y与已知数据x之间关系进行建模的方法,是一种基于概率理论的方法。已知输入变量x,判别模型通过构建条件概率P(y|x)分布预测结果,或试图直接从输入x的空间学习映射到标签{0,1}(如感知器算法)的函数。生成模型则是考虑x与y之间的联合分布。 在实际应用中判别模型非常常见,如:逻辑回归(logistic regression),支持向量机(support vector machine), 提升方法(Boosting),条件随机场(conditional random fields),神经网络(neural network),随机森林(random forests)典型的生成模型则包括:高斯混合模型(Gaussian Mixture Model),隐马尔科夫模型(hidden markov model),简单贝叶斯(naive Bayes)等。不难看出两者的区别。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

解析树技术

解析树是一个内部结构,由编译器或解释器在解析一些语言结构时创建,解析也被称为“语法分析”。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

语料库技术

语料库一词在语言学上意指大量的文本,通常经过整理,具有既定格式与标记;事实上,语料库英文 "text corpus" 的涵意即为"body of text"。

先验知识技术

先验(apriori ;也译作 先天)在拉丁文中指“来自先前的东西”,或稍稍引申指“在经验之前”。近代西方传统中,认为先验指无需经验或先于经验获得的知识。先验知识不依赖于经验,比如,数学式子2+2=4;恒真命题“所有的单身汉一定没有结婚”;以及来自纯粹理性的推断“本体论证明”

上下文无关文法技术

上下文无关文法,在计算机科学中,若一个形式文法 G = 的产生式规则都取如下的形式:V -> w,则谓之。其中 V∈N,w∈* 。上下文无关文法取名为“上下文无关”的原因就是因为字符V 总可以被字串w 自由替换,而无需考虑字符V 出现的上下文。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

生成对抗网络技术

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~