热门标签 | 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所示,判别器的信息会反馈到生成器。



推荐阅读
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 必备核心算法神经网络通俗讲解
    深度学习传统算法VS人工智能算法传统算法:都是人为去计算人工智能算法:部分人为需要做的事情交由机器去做【把更多的问题简单化】IT的发展比较高端的就是A ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 安装Tensorflow-GPU文档第一步:通过Anaconda安装python从这个链接https:www.anaconda.comdownload#window ... [详细]
  • 都会|可能会_###haohaohao###图神经网络之神器——PyTorch Geometric 上手 & 实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了###haohaohao###图神经网络之神器——PyTorchGeometric上手&实战相关的知识,希望对你有一定的参考价值。 ... [详细]
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社区 版权所有