热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python语言属于自然语言吗_一种从自然语言自动生成Python代码的方法与流程

本发明属于自然语言处理技术领域,具体涉及一种从自然语言自动生成python代码的方法。背景技术:语义分析任务是自然语言处理领域中的一类任务ÿ

1092528213.gif

本发明属于自然语言处理技术领域,具体涉及一种从自然语言自动生成python代码的方法。

背景技术:

语义分析任务是自然语言处理领域中的一类任务,主要研究的是如何将给定的自然语言描述文本转换成一种计算机能够理解并且可以执行的一种逻辑表示,比如sql,python,java等形式。传统的方法是根据程序设计语言的特点设计出固定的模板,然后使用模式匹配的方式将自然语言描述解析成模板中的一个个实例。随着深度学习技术的发展,encoder-decoder等深度学习框架也被引入到语义分析分析任务中,比如采用机器翻译的方法将自然描述语言序列直接翻译成编程语言序列,又或者是在生成代码的时候,引入编程语言的语法,先生成程序的抽象语法树,然后再将抽象语法树转换成程序代码。但是上述encoder-decoder模型在处理从自然语言到编程语言之间的转换的时候,encoder和decoder分别处理两种不同语言,由于encoder和decoder使用的神经网络的不同,以及网络的深度,自然语言描述的语义在程序代码生成的过程中会逐步丢失,因此缺少一个强的语义约束的训练模型。

技术实现要素:

针对于上述问题,本发明提出来一种从自然语言自动生成python代码的方法。本发明旨在通过判别器提高生成器根据自然语言描述生成程序片段的效果,学习到自然语言和编程语言的分布之间的联系。

本发明的技术方案是:

一种从自然语言自动生成python代码的方法,步骤如下:

步骤1:采用gan网络的生成器根据自然语言描述生成程序片段的抽象语法树。

生成器是一个encoder-decoder深度学习框架,encoder负责对自然语言描述序列进行编码,decoder则根据encoder的编码结果,将自然语言描述的语义解码成程序片段的抽象语法树。

步骤1.1:采用双向lstm网络作为encoder,对自然语言描述序列进行编码;

步骤1.1.1:从左到右以及从右到左两个方向对自然语言描述序列进行编码,得到每个字符的中间隐藏向量

步骤1.1.2:将中间隐藏向量进行concat操作即为自然语言描述字符的编码向量,并把每个字符的编码向量保存下来,以待后面decoder使用。

步骤1.1.3:将最后一个字符的中间隐藏向量作为decoder的初始状态hend。

步骤1.2:采用单向lstm网络作为decoder,将encoder编码的自然语言语义解码构建为程序的抽象语法树。

这一步骤将编程语言的语法规则引入到生成过程中。以深度优先遍历的方式生成抽象语法树,每一个生成步骤,是对上下文无关文法产生式的应用。语法规则为抽象语法树的生成提供先验知识,缩小搜索空间。

步骤1.2.1:将1.1.3中的hend作为decoder的初始状态,并使用注意力机制计算hend的内容向量,然后将该内容向量作为lstm的输入。

步骤1.2.2:采用softmax对1.2.1的lstm输出结果进行多分类,这些类别分别对应生成抽象语法树的动作。

步骤1.2.3:对于1.2.2生成的抽象语法树的动作,该动作一类是生成叶子节点,该动作另一类是生成非叶子节点。

对于生成非叶子节点的动作来说,是上下文无关文法扩展;而生成叶子节点的动作,则是生成具体的字符,也就是程序片段中的序列字符,可以采用复制的方式从自然语言描述序列中将字符复制过来,也可以根据由模型生成相应的字符。

步骤1.2.4:按照深度优先遍历的方式应用1.2.3的抽象语法树的动作构建抽象语法树。

步骤1.2.5:将1.2.4的输出结果作为1.2.1的输入,重复1.2.1到1.2.4操作,最终得到一棵完整的抽象语法树,即自然语言描述语义对应的程序片段的抽象法树。

步骤1.2.6:将抽象语法树解析成程序片段。

步骤2:采用gan的判别器判断生成器生成的抽象语法树的语义是否与给定的自然语言描述的语义是否一致,这也是对生成器生成的一种强的语义约束。训练判别器的数据分为三种:a训练数据中的自然语言描述和与之对应的程序的抽象语法树。b给定自然语言描述和生成器生成的抽象语法树。c自然语言描述序列和与之无关的程序的抽象语法树。对于训练数据a给定标签为一致,而训练数据b,c给定标签为不一致。

步骤2.1:采用gan生成器中encoder的方法对自然语言描述序列进行编码,这一步只要得到最后的语义向量。

步骤2.2:采用树型lstm网络,自底向上对抽象语法树进行编码,一直编码到抽象语法树的根节点,也就是这个抽象语法树对应的语义向量。

步骤2.3:将2.1和2.2中的自然语言语义向量和抽象语法树的语义向量进行向量乘法。

步骤2.4:重复2.1和2.3,对步骤2中的训练数据b和训练数据c进行同样的操作。

步骤2.5:对2.4中的训练数据对进行二分类预测,及判断这三种情况下自然语言和程序抽象语法树的语义是否一致。

步骤3:训练gancoder,将gan网络的生成器和判别器一起训练。在优化的时候,生成器和判别器交替优化。在训练之前,先分别对生成器和判别器进行预训练,然后再一起博弈训练。

进一步的,由一种从自然语言自动生成python代码的方法生成的模型gancoder包含两个部分:生成器和判别器,其中生成器负责实现从自然语言到编程语言程序片段的生成,而判别器则识别出生成器生成的程序片段。训练的时候,生成器和判别器处于博弈训练的状态,相互提高,到最后判别器不能识别出编程语言程序片段是原始训练集的数据还是由生成器生成的数据。

本发明具备的有益效果:

本发明通过生成对抗网络优化训练,生成一个代码生成系统,该系统可以根据用户给定的对于一个功能的自然语言描述,然后生成一段具有相同功能的程序代码。相较于传统的优化方法,使用生成对抗网络进行对抗博弈训练,生成器能够更有效地学习到自然语言和编程语言的语言模型。

附图说明

图1是基于encoder-decoder模型的语义分析器。

图2是一个python程序对应的抽象语法树。

图3是本发明gancoder的总体框架。

图4是gancoder的生成器的框架表示图。

图5是使用树型lstm网络对抽象法树进行编码。

具体实施方式

以下结合技术方案和附图详细叙述本发明的具体实施方式。

一种从自然语言自动生成python代码的方法,提出的gancoder系统,总体上是一个生成对抗网络,包含生成器和判别器两个部分,如图3所示。其中生成器是一个encoder-decoder模型,如图4所示,encoder负责对自然语言描述序列进行编码,使用双向lstm网络,而decoder则将encoder编码的语义解码成程序的抽象语法树,使用单向lstm网络;而判别器主要负责判断自然语言描述和抽象语法树的语义是否一致,对于自然语言描述的语义编码使用生成器encoder,对于抽象语法树的编码则采用树型lstm网络,树型lstm网络如图5所示,以自底向上的方式对程序的抽象语法树进行编码,抽象语法树的根节点的编码向量为抽象语法树的语义向量。

步骤1:采用gan网络的生成器根据自然语言描述生成程序片段的抽象语法树。

生成器是一个encoder-decoder深度学习模型,如图4所示,图中左边是encoder,是一个双向lstm网络,负责对自然语言描述序列进行编码;图中右边是decoder,是一个单向lstm网络,它则根据encoder的编码结果,将自然语言描述的语义解码成程序片段的抽象语法树。

步骤1.1:采用双向lstm网络作为encoder,对自然语言描述序列进行编码。图4encoder中左右两个方向表示lstm网络的编码顺序。

步骤1.1.1:从左到右以及从右到左两个方向对自然语言描述序列进行编码,得到每个字符的中间隐藏向量如图4encoder中lstm网络的两个编码方向一样。

步骤1.1.2:将1.1的进行concat操作,得到即为自然语言描述字符的编码向量,并把每个字符的编码向量保存下来,以待后面decoder使用。

步骤1.1.3:将最后一个字符的中间隐藏向量作为decoder的初始状态hend。

步骤1.2:采用单向lstm网络作为decoder,将encoder编码的自然语言语义解码构建为程序的抽象语法树。

这一步骤将编程语言的语法规则引入到代码生成过程中。以深度优先遍历的方式生成抽象语法树,每一个生成步骤,是对上下文无关文法产生式的应用。语法规则为抽象语法树的生成提供先验知识,缩小搜索空间。

步骤1.2.1:如图4,decoder将1.1.3中的hend作为始状态,并使用注意力机制计算hend的内容向量c1,然后将该内容向量作为lstm的输入。

步骤1.2.2:采用softmax对lstm输出结果进行多分类,这些类别分别对应生成抽象语法树的动作,对应如图2中右图抽象语法树的每个节点。

步骤1.2.3:对于1.2.2预测的动作,一类是生成叶子节点,另一类是生成非叶子节点,也就是图2中抽象语法树中叶子节点和非叶子节点。对于生成非叶子节点的动作来说,是上下文无关文法扩展,每一条为上下文文法规则;而生成叶子节点的动作,则是生成具体的字符,也就是程序片段中的序列字符,可以采用复制的方式从自然语言描述序列中将字符复制过来,也可以根据由模型生成相应的字符。

步骤1.2.4:按照深度优先遍历的方式应用1.2.3预测动作构建抽象语法树。图2中的抽象语法树节点用实线箭头表示的顺序为建立抽象语法树中每个节点构建的顺序。

步骤1.2.5:将1.2.4的输出结果作为1.2.1的输入,如图2,上一个节点的信息传递给下一节点,其中信息包括上一步骤的状态,也就是实线箭头表示的,还有父节点的信息,虚线箭头传递的信息。然后重复1.2.1到1.2.4操作,最终得到一棵完整的抽象语法树,即自然语言描述语义对应的程序片段的抽象语法树。

步骤1.2.6:将完整的抽象语法树解析成程序片段。

步骤2:采用gan的判别器判断生成器生成的抽象语法树的语义是否与给定的自然语言描述的语义是否一致,这也是对生成器生成的一种强的语义约束。训练判别器的数据分为三种:1.训练数据中的自然语言描述和与之对应的程序的抽象语法树。2.给定自然语言描述和生成器生成的抽象语法树。3.自然语言描述序列和与之无关的程序的抽象语法树。对于1来说,给定标签为一致,而2,3两种数据,给定标签为不一致。

步骤2.1:采用gan生成器中encoder的方法对自然语言描述序列进行编码,这一步只要得到最后的语义向量,encoder的结构如图4所示。

步骤2.2:采用树型lstm网络,如图5所示,自底向上地对抽象语法树进行编码,抽象语法树的孩子节点是父节点编码的输入,一直编码到抽象语法树的根节点,也就是这个抽象语法树对应的语义向量。

步骤2.3:将2.1和2.2中的自然语言语义向量和抽象语法树的语义向量进行向量乘法。

步骤2.4:重复2.1和2.3,对步骤2中的训练数据2和训练数据3进行同样的操作。

步骤2.5:对2.4中的训练数据对进行二分类预测,及判断这三种情况下自然语言和程序抽象语法树的语义是否一致。

步骤3:训练gancoder,将gan网络的生成器和判别器一起训练。在优化的时候,生成器和判别器交替优化。在训练之前,先对生成器和判别器进行预训练,然后再一起博弈训练,如图3所示,判别器的信息会反馈到生成器。



推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 深度学习与神经网络课程总结
    本文档总结了神经网络和深度学习课程中的关键概念和理论,包括机器学习的基本要素、算法类型以及数据特征表示等。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 知识图谱与图神经网络在金融科技中的应用探讨
    本文详细介绍了融慧金科AI Lab负责人张凯博士在2020爱分析·中国人工智能高峰论坛上的演讲,探讨了知识图谱与图神经网络模型如何在金融科技领域发挥重要作用。 ... [详细]
  • Python 领跑!2019年2月编程语言排名更新
    根据最新的编程语言流行指数(PYPL)排行榜,Python 在2019年2月的份额达到了26.42%,稳坐榜首位置。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 机器学习(ML)三之多层感知机
    深度学习主要关注多层模型,现在以多层感知机(multilayerperceptron,MLP)为例,介绍多层神经网络的概念。隐藏层多层感知机在单层神经网络的基础上引入了一到多个隐藏 ... [详细]
  • 使用 Jupyter Notebook 实现 Markdown 编写与代码运行
    Jupyter Notebook 是一个开源的基于网页的应用程序,允许用户在同一文档中编写 Markdown 文本和运行多种编程语言的代码,并实时查看运行结果。 ... [详细]
  • 第三届人工智能、网络与信息技术国际学术会议(AINIT 2022)
    20223rdInternationalSeminaronArtificialIntelligence,NetworkingandInformationTechnology第三届 ... [详细]
author-avatar
弍大爺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有