CN109739483B - 用于生成语句的方法和装置 - Google Patents

用于生成语句的方法和装置 Download PDF

Info

Publication number
CN109739483B
CN109739483B CN201811628295.1A CN201811628295A CN109739483B CN 109739483 B CN109739483 B CN 109739483B CN 201811628295 A CN201811628295 A CN 201811628295A CN 109739483 B CN109739483 B CN 109739483B
Authority
CN
China
Prior art keywords
sentence
statement
input
natural
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811628295.1A
Other languages
English (en)
Other versions
CN109739483A (zh
Inventor
王硕寰
孙宇
王丽杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201811628295.1A priority Critical patent/CN109739483B/zh
Publication of CN109739483A publication Critical patent/CN109739483A/zh
Application granted granted Critical
Publication of CN109739483B publication Critical patent/CN109739483B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Machine Translation (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例公开了用于生成语句的方法和装置。该方法的一具体实施方式包括:获取输入语句,其中输入语句是以预设编程语言描述的代码语句;选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型;将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。该实施方式能够让用户不需要学习编程语言的语法细节即可获取编程语句的自然语句,有助于用户理解程序代码。

Description

用于生成语句的方法和装置
技术领域
本申请实施例涉及计算机技术领域,具体涉及用于生成语句的方法和装置。
背景技术
编程指的是,让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。为了使计算机能够理解人的意图,必须将解决的问题的思路、方法和手段以计算机能够理解的形式告诉计算机(即,将人的意图转换成程序代码),使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。
目前,编程语言包括命令式编程语言(例如,SHELL等)、编译类编程语言(例如,C++、JAVA等)、脚本语言(例如,Python、Perl)、数据库查询语言等。一般而言,不同的编程语言具有不同的语法规范。
为了提高程序代码的可读性和可维护性,程序代码中可以包含注释。注释通常是对程序代码的解释和说明。实践中,注释通常由程序员手动编写。
发明内容
本申请实施例提出了用于生成语句的方法和装置。
第一方面,本申请实施例提供了一种用于生成语句的方法,该方法包括:获取输入语句,其中输入语句是以预设编程语言描述的代码语句;选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型;将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。
在一些实施例中,自然语句生成模型通过如下步骤训练得到:获取训练样本集合,其中训练样本包括以预设编程语言描述的代码语句以及与代码语句的语义对应的、以自然语言描述的命令语句;将训练样本集合中的训练样本中的代码语句作为输入,将与输入的代码语句对应的命令语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到自然语句生成模型。
在一些实施例中,自然语句生成模型包括编码器和解码器。将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句,包括:将输入语句输入到编码器中,得到输入语句的编码表示;将输入语句的编码表示作为解码器的当前输入信息,执行层次化语义解析步骤:将当前输入信息输入到解码器中,得到输出语句;确定输出语句中是否存在待解码标识符;若输出语句中不存在待解码标识符,则将输出语句确定为自然语句。
在一些实施例中,将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句,还包括:若输出语句中存在待解码标识符,则将输出语句输入到解码器中,得到输出语句的编码表示;采用注意力机制对输入语句的编码表示和输出语句的编码表示进行加权处理,将处理结果作为解码器的当前输入信息,继续执行层次化语义解析步骤。
在一些实施例中,该方法还包括:基于自然语句生成输入语句的注释。
第二方面,本申请实施例提供了一种用于转换代码的方法,该方法包括:获取以第一编程语言描述的源代码语句;选取以第一编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型;将源代码语句输入到自然语句生成模型中,得到与源代码语句的语义对应的、以自然语言描述的中间语句;选取以自然语言描述的语句作为输入、以第二编程语言描述的语句作为输出的代码语句生成模型;将中间语句输入到代码语句生成模型中,得到与中间语句的语义对应的、以第二编程语言描述的目标代码语句。
在一些实施例中,代码语句生成模型通过如下步骤训练得到:获取训练样本集合,其中训练样本包括以自然语言描述的命令语句以及与命令语句的语义对应的、以目标编程语言描述的代码语句;将训练样本集合中的训练样本中的命令语句作为输入,将与输入的命令语句对应的代码语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到代码语句生成模型。
第三方面,本申请实施例提供了一种用于生成语句的装置,该装置包括:输入语句获取单元,被配置成获取输入语句,其中输入语句是以预设编程语言描述的代码语句;模型选取单元,被配置成选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型;自然语句生成单元,被配置成将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。
在一些实施例中,自然语句生成模型通过如下步骤训练得到:获取训练样本集合,其中训练样本包括以预设编程语言描的代码语句以及与代码语句的语义对应的、以自然语言描述的命令语句;将训练样本集合中的训练样本中的代码语句作为输入,将与输入的代码语句对应的命令语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到自然语句生成模型。
在一些实施例中,自然语句生成模型包括编码器和解码器。自然语句生成单元包括:第一编码模块,被配置成将输入语句输入到编码器中,得到输入语句的编码表示;层次化语义解析模块,被配置成将输入语句的编码表示作为解码器的当前输入信息,执行层次化语义解析步骤:将当前输入信息输入到解码器中,得到输出语句;确定输出语句中是否存在待解码标识符;若输出语句中不存在待解码标识符,则将输出语句确定为自然语句。
在一些实施例中,自然语句生成单元还包括:第二编码模块,被配置成若输出语句中存在待解码标识符,则将输出语句输入到解码器中,得到输出语句的编码表示;加权处理模块,被配置成采用注意力机制对输入语句的编码表示和输出语句的编码表示进行加权处理,将处理结果作为解码器的当前输入信息,继续执行层次化语义解析步骤。
在一些实施例中,该装置还包括:注释生成单元,被配置成基于自然语句生成输入语句的注释。
第四方面,本申请实施例提供了一种用于转换代码的装置,该装置包括:源代码语句获取单元,被配置成获取以第一编程语言描述的源代码语句;第一模型选取单元,被配置成选取以第一编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型;中间语句生成单元,被配置成将源代码语句输入到自然语句生成模型中,得到与源代码语句的语义对应的、以自然语言描述的中间语句;第二模型选取单元,被配置成选取以自然语言描述的语句作为输入、以第二编程语言描述的语句作为输出的代码语句生成模型;目标代码语句生成单元,被配置成将中间语句输入到代码语句生成模型中,得到与中间语句的语义对应的、以第二编程语言描述的目标代码语句。
在一些实施例中,代码语句生成模型通过如下步骤训练得到:获取训练样本集合,其中训练样本包括以自然语言描述的命令语句以及与命令语句的语义对应的、以目标编程语言描述的代码语句;将训练样本集合中的训练样本中的命令语句作为输入,将与输入的命令语句对应的代码语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到代码语句生成模型。
第五方面,本申请实施例提供了一种电子设备,包括:一个或多个处理器;存储装置,其上存储有一个或多个程序;当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如第一方面或第二方面中任一实现方式描述的方法。
第六方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面或第二方面中任一实现方式描述的方法。
本申请实施例提供的用于生成语句的方法和装置,通过获取以预设编程语言描述的代码语句,之后选取与预设编程语言和自然语言匹配的自然语句生成模型,最后将代码语句输入到自然语句生成模型中得到自然语句,从而能够让用户不需要学习编程语言的语法细节即可获取编程语句的自然语句,有助于用户理解程序代码。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请的一个实施例可以应用于其中的示例性系统架构图;
图2是根据本申请的用于生成语句的方法的一个实施例的流程图;
图3是根据本申请的用于生成语句的方法的一个应用场景的示意图;
图4是根据本申请的用于转换代码的方法的一个实施例的流程图;
图5是根据本申请的用于生成语句的装置的一个实施例的结构示意图;
图6是根据本申请的用于转换代码的装置的一个实施例的结构示意图;
图7是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于生成语句的方法、用于转换代码的方法、用于生成语句的装置或用于转换代码的装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如编程类应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备101、102、103可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以是支持编程的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等。当终端设备101、102、103为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上运行的编程类应用提供支持的后台服务器。服务器105可以对接收到的输入语句等数据进行分析等处理并将处理结果(例如,自然语句)反馈给终端设备101、102、103。
需要说明的是,服务器可以是硬件,也可以是软件。当服务器为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
需要说明的是,本申请实施例所提供的用于生成语句的方法或用于转换代码的方法一般由服务器105执行,相应地,用于生成语句的装置或用于转换代码的装置一般设置于服务器105中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,示出了根据本申请的用于生成语句的方法的一个实施例的流程200。该用于生成语句的方法,可以包括以下步骤:
步骤201,获取输入语句。
在本实施例中,用于生成语句的方法运行于其上的执行主体(例如图1的服务器105)可以通过有线连接方式或者无线连接方式从终端设备(例如图1的终端设备101、102、103)获取输入语句。其中,输入语句可以是以预设编程语言描述的代码语句。例如,Python语句“for i in range(0,10,2)”、“list3=[(a+b)for a,b in zip(list1,list2)]”等。这里,第一编程语言可以是预设的编程语言,例如,Python、C++等。
编程语言(programming language)俗称计算机语言,是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
需要指出的是,上述无线连接方式可以包括但不限于3G(the 3rd generation,第三代)/4G(the 4th generation,第四代)/5G(the 5th generation,第五代)通信连接、Wi-Fi(Wireless-Fidelity,无线保真)连接、蓝牙连接、WiMAX(Worldwide Interoperabilityfor Microwave Access,全球微波互联接入)连接、Zigbee(又名紫蜂协议)连接、UWB(UltraWideband,超宽带)连接、以及其他现在已知或将来开发的无线连接方式。
步骤202,选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。
在本实施例中,用于生成语句的方法运行于其上的执行主体(例如图1的服务器105)可以从预先训练的多个自然语句生成模型中选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。例如,选取输入语句为Python代码、输出语句为汉语的自然语句生成模型。
自然语言通常是指一种自然地随文化演化的语言,例如,汉语、英语、日语等。
在本实施例中,上述执行主体可以存储有多个预先训练的自然语句生成模型,所存储的每一个自然语句生成模型与一种编程语言相对应(在自然语言确定的情况下)。自然语句生成模型可以用于表征以编程语言描述的代码语句与以自然语言描述的命令语句的对应关系。作为示例,自然语句生成模型可以是技术人员基于对大量的代码语句和命令语句的统计而预先制定的、存储有多个代码语句与命令语句的对应关系的对应关系表。
在本实施例的一些可选的实现方式中,自然语句生成模型可以按照以下步骤训练得到:
首先,获取训练样本集合。其中,每个训练样本可以包括以目标编程语言描述的代码语句和以自然语言描述的命令语句。命令语句可以与代码语句的语义对应。以预设编程语言为Python为例,代码语句可以为“for i in range(0,10,2)”,对应的命令语句为“遍历0到10以内的偶数”。命令语句可以通过对代码语句进行标注来获得。
然后,将训练样本集合中的每个训练样本中的代码语句作为输入,将与输入的代码语句对应的命令语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到自然语句生成模型。初始神经网络可以包括编码器和解码器(即,Encoder-Decoder模型)。这里,每种编程语言对应的自然语句生成模型的训练方法可以相同。
步骤203,将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。
在本实施例中,用于生成语句的方法运行于其上的执行主体(例如图1的服务器105)可以将步骤201获取的输入语句输入到步骤202选取的自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。作为示例,将输入语句“for i inrange(0,10,2)”输入到所选取的自然语句生成模型中,得到自然语句“遍历0到10以内的偶数”。
由上可知,与程序员自己编写注释相比,本实施例提供的方案能够让用户不需要学习编程语言的语法细节即可获取自然语句,使得不懂编程语言语法的普通用户可以轻易理解代码语句的含义,并且可以避免程序员编码风格迥异和缺少注释的问题。
在本实施例的一些可选的实现方式中,步骤203具体可以包括以下步骤:
第一步,将步骤201获取的输入语句输入到步骤202选取的自然语句生成模型的编码器中,得到输入语句的编码表示(也可以称为上下文向量)。
第二步,将第一步的编码表示作为步骤202选取的自然语句生成模型的解码器的当前输入信息,执行如下的层次化语义解析步骤:首先,将当前输入信息输入到解码器中得到输出语句,其中该输出语句可以包括以自然语言描述的词语,也可以包括待解码标识符(例如,以“#”和数字的组合来表示);然后,确定该输出语句中是否存在待解码标识符,若该输出语句中不存在待解码标识符,则表示层次化语义解析已完成,可以将该输出语句确定为要生成的自然语句,否则执行下面要描述的第三步和第四步。
第三步,若该输出语句中存在待解码标识符,则将该输出语句输入到编码器中得到该输出语句的编码表示。
第四步,采用注意力机制对输入语句的编码表示和该输出语句的编码表示进行加权处理,并将加权处理后的编码表示作为解码器的当前输入信息,继续执行上述层次化语义解析步骤。
下面通过具体示例进行说明。在该示例中,输入语句为Python代码“pow(x,2)”。通过编码器对该输入语句进行编码后输入到解码器中得到一输出语句“#1的#1次方”。由于此时输出语句中存在待解码标识符“#1”(即,层次化语义解析还未结束,需要进行下一层的语义解析),因此通过编码器对该输出语句进行编码并与输入语句的向量进行加权处理。将加权后的向量再次输入到解码器中,得到另一输出语句“x的2次方”。由于此时输出语句中不存在待解码标识符,因此,输出语句“x的2次方”即为Python代码“pow(x,2)”对应的自然语句。
在本实施例的一些可选的实现方式中,该用于生成语句的方法还可以包括:基于步骤203生成的自然语句生成输入语句的注释(例如,使用“//”等注释符号将自然语句标记在代码语句之后)。本实现方式提供的方案可以实现代码注释的自动生成,一方面不需要程序员手动编写注释,提高了程序员的编程效率,另一方面生成的代码注释规范,不存在缺少注释或风格迥异的问题。
继续参见图3,图3是根据本实施例的用于生成语句的方法的应用场景的一个示意图。在该应用场景中,需要将Python代码转化成汉语语句,自然语句生成模型是利用Python语言和自然语言的平行语料对初始编码器-解码器模型训练得到的。首先进行第1层解码:通过编码器对用户提交的Python代码语句“pow(int(x)+2,2)”进行编码,将命令语句的编码输入到解码器中,对最外层函数进行解码,得到第1层解码的输出语句为“#1的#1次方”。图中“<s>”代表解码开始,而“<e>”代表解码结束。由于第1层解码的输出语句中存在待解码标识符“#1”,因此继续进行第2层解码:对第1层的输出语句进行编码,采用注意力机制对命令语句的编码和第1层的输出语句的编码进行加权组合,将组合后的编码输入到解码器中,得到第2层解码的输出语句“#1与#1的和的2次方”。由于第2层解码的输出语句中仍存在待解码标识符“#1”,因此继续进行第3层解码:对第2层的输出语句进行编码,采用注意力机制对命令语句的编码和第2层的输出语句的编码进行加权组合,将组合后的编码输入到解码器中,得到第3层解码的输出语句“对#1取整后与2的和的2次方”。……以此类推,将命令语句的编码与第(n-1)层(n为大于3的自然数)的编码的加权组合作为第n层解码的输入,直至得到的输出语句中没有待解码标识符为止,从而得到输出语句“对x取整后与2的和的2次方”,将该语句作为Python代码语句的自然语句(即注释)。
本申请的上述实施例提供的方法,通过获取以预设编程语言描述的代码语句,之后选取与预设编程语言和自然语言匹配的自然语句生成模型,最后将代码语句输入到自然语句生成模型中得到自然语句,从而能够让用户不需要学习编程语言的语法细节即可获取编程语句的自然语句,有助于用户理解程序代码。
继续参考图4,示出了根据本申请的用于转换代码的方法的一个实施例的流程400。该用于转换代码的方法,可以包括以下步骤:
步骤401,获取以第一编程语言描述的源代码语句。
在本实施例中,用于转换代码的方法运行于其上的执行主体(例如图1的服务器105)可以通过有线连接方式或者无线连接方式从终端设备(例如图1的终端设备101、102、103)获取源代码语句。其中,源代码语句可以是以第一编码语言描述的代码语句。例如,Python语句“for i in range(0,10,2)”、“list3=[(a+b)for a,b in zip(list1,list2)]”等。这里,第一编程语言可以是预设的编程语言,例如,Python、C++等。
步骤402,选取以第一编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。
在本实施例中,用于转换代码的方法运行于其上的执行主体(例如图1的服务器105)可以从预先训练的多个自然语句生成模型中选取以第一编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。例如,选取输入语句为Python代码、输出语句为汉语的自然语句生成模型。
步骤403,将源代码语句输入到自然语句生成模型中,得到与源代码语句的语义对应的、以自然语言描述的中间语句。
在本实施例中,用于转换代码的方法运行于其上的执行主体(例如图1的服务器105)可以将步骤401获取的源代码语句输入到步骤402选取的自然语句生成模型中,得到与源代码语句的语义对应的、以自然语言描述的中间语句。作为示例,将源代码语句“for iin range(0,10,2)”输入到所选取的自然语句生成模型中,得到中间语句“遍历0到10以内的偶数”。
步骤404,选取以自然语言描述的语句作为输入、以第二编程语言描述的语句作为输出的代码语句生成模型。
在本实施例中,用于转换代码的方法运行于其上的执行主体(例如图1的服务器105)可以从预先训练的多个代码语句生成模型中选取以自然语言描述的语句作为输入、以第二编程语言描述的语句作为输出的代码语句生成模型。例如,选取输入语句为汉语、输出语句为JAVA编程语句的代码语句生成模型。这里,第二编程语言可以是与第一编程语言不同的编程语言。例如,第一编程语言为Python,第二编程语言为Perl。或者,第一编程语言为JAVA,第二编程语言为C++。
在本实施例中,上述执行主体可以存储有多个预先训练的代码语句生成模型,所存储的每一个代码语句生成模型与一种编程语言相对应(在自然语言确定的情况下)。代码语句生成模型可以用于表征以自然语言描述的命令语句与以编程语言描述的代码语句的对应关系。作为示例,代码语句生成模型可以是技术人员基于对大量的命令语句和代码语句的统计而预先制定的、存储有多个命令语句与代码语句的对应关系的对应关系表。
在本实施例的一些可选的实现方式中,代码语句生成模型可以按照以下步骤训练得到:
首先,获取训练样本集合。其中,每个训练样本可以包括以自然语言描述的命令语句和以目标编程语言描述的代码语句。代码语句可以与命令语句的语义对应。以目标编程语言为Python为例,命令语句为“遍历0到10以内的偶数”,对应的代码语句可以为“for iin range(0,10,2)”。代码语句可以通过对命令语句进行标注来获得。
然后,将训练样本集合中的每个训练样本中的命令语句作为输入,将与输入的命令语句对应的代码语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到代码语句生成模型。初始神经网络可以包括编码器和解码器(即,Encoder-Decoder模型)。这里,每种编程语言对应的代码语句生成模型的训练方法可以相同。
步骤405,将中间语句输入到代码语句生成模型中,得到与中间语句的语义对应的、以第二编程语言描述的目标代码语句。
在本实施例中,用于转换代码的方法运行于其上的执行主体(例如图1的服务器105)可以将步骤403生成的中间语句输入到步骤404选取的代码语句生成模型中,得到与中间语句的语义对应的、以第二编程语言描述的代码语句。作为示例,将中间语句“遍历0到10以内的偶数”输入到所选取的代码语句生成模型中,得到JAVA代码语句“for(i=0;i≤10;i=i+2)”。
本申请的上述实施例提供的方法,通过获取第一编程语言描述的源代码语句,然后将源代码语句输入与第一编程语言匹配的自然语句生成模型得到中间语句,最后将中间语句输入与第二编程语言匹配的代码语句生成模型得到目标代码语句,从而能够在不同编程语言之间进行代码转换,而不需要掌握编程语言的语法细节。
进一步参考图5,作为对图2所示方法的实现,本申请提供了一种用于生成语句的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于服务器中。
如图5所示,本实施例的用于生成语句的装置500可以包括输入语句获取单元501、模型选取单元502和自然语句生成单元503。其中,输入语句获取单元501可以被配置成获取输入语句,其中输入语句是以预设编程语言描述的代码语句。模型选取单元502可以被配置成选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。自然语句生成单元503可以被配置成将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。
在本实施例中,本实施例的用于生成语句的装置500的输入语句获取单元501可以通过有线连接方式或者无线连接方式从终端设备(例如图1的终端设备101、102、103)获取输入语句。其中,输入语句可以是以预设编程语言描述的代码语句。例如,Python语句“fori in range(0,10,2)”、“list3=[(a+b)for a,b in zip(list1,list2)]”等。这里,第一编程语言可以是预设的编程语言,例如,Python、C++等。
在本实施例中,上述模型选取单元502可以从预先训练的多个自然语句生成模型中选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。例如,选取输入语句为Python代码、输出语句为汉语的自然语句生成模型。
在本实施例的一些可选的实现方式中,自然语句生成模型可以按照以下步骤训练得到:
首先,获取训练样本集合。其中,每个训练样本可以包括以目标编程语言描述的代码语句和以自然语言描述的命令语句。命令语句可以与代码语句的语义对应。以预设编程语言为Python为例,代码语句可以为“for i in range(0,10,2)”,对应的命令语句为“遍历0到10以内的偶数”。命令语句可以通过对代码语句进行标注来获得。
然后,将训练样本集合中的每个训练样本中的代码语句作为输入,将与输入的代码语句对应的命令语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到自然语句生成模型。初始神经网络可以包括编码器和解码器(即,Encoder-Decoder模型)。这里,每种编程语言对应的自然语句生成模型的训练方法可以相同。
在本实施例中,上述自然语句生成单元503将输入语句获取单元501获取的输入语句输入到模型选取单元502选取的自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。作为示例,将输入语句“for i in range(0,10,2)”输入到所选取的自然语句生成模型中,得到自然语句“遍历0到10以内的偶数”。
由上可知,与程序员自己编写注释相比,本实施例提供的方案能够让用户不需要学习编程语言的语法细节即可获取自然语句,使得不懂编程语言语法的普通用户可以轻易理解代码语句的含义,并且可以避免程序员编码风格迥异和缺少注释的问题。
在本实施例的一些可选的实现方式中,自然语句生成单元503具体可以包括第一编码模块和层次化语义解析模块。其中,第一编码模块可以被配置成将输入语句输入到编码器中,得到输入语句的编码表示。层次化语义解析模块可以被配置成将输入语句的编码表示作为解码器的当前输入信息,执行层次化语义解析步骤:将当前输入信息输入到解码器中,得到输出语句;确定输出语句中是否存在待解码标识符;若输出语句中不存在待解码标识符,则将输出语句确定为自然语句。
在本实施例的一些可选的实现方式中,自然语句生成单元503具体还可以包括第二编码模块和加权处理模块。其中,第二编码模块可以被配置成若输出语句中存在待解码标识符,则将输出语句输入到解码器中,得到输出语句的编码表示。加权处理模块可以被配置成采用注意力机制对输入语句的编码表示和输出语句的编码表示进行加权处理,将处理结果作为解码器的当前输入信息,继续执行层次化语义解析步骤。
在本实施例的一些可选的实现方式中,该装置500还可以包括注释生成单元。其中,注释生成单元可以被配置成基于所生成的自然语句生成输入语句的注释(例如,使用“//”等注释符号将自然语句标记在代码语句之后)。本实现方式提供的方案可以实现代码注释的自动生成,一方面不需要程序员手动编写注释,提高了程序员的编程效率,另一方面生成的代码注释规范,不存在缺少注释或风格迥异的问题。
本申请的上述实施例提供的装置,通过获取以预设编程语言描述的代码语句,之后选取与预设编程语言和自然语言匹配的自然语句生成模型,最后将代码语句输入到自然语句生成模型中得到自然语句,从而能够让用户不需要学习编程语言的语法细节即可获取编程语句的自然语句,有助于用户理解程序代码。
继续参考图6,作为对图4所示方法的实现,本申请提供了一种用于转换代码的装置的一个实施例,该装置实施例与图4所示的方法实施例相对应,该装置具体可以应用于服务器中。
如图6所示,本实施例的用于转换代码的装置600可以包括源代码语句获取单元601、第一模型选取单元602、中间语句生成单元603、第二模型选取单元604和目标代码语句生成单元605。其中,源代码语句获取单元601可以被配置成获取以第一编程语言描述的源代码语句。第一模型选取单元602可以被配置成选取以第一编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。中间语句生成单元603可以被配置成将源代码语句输入到自然语句生成模型中,得到与源代码语句的语义对应的、以自然语言描述的中间语句。第二模型选取单元604可以被配置成选取以自然语言描述的语句作为输入、以第二编程语言描述的语句作为输出的代码语句生成模型。目标代码语句生成单元605可以被配置成将中间语句输入到代码语句生成模型中,得到与中间语句的语义对应的、以第二编程语言描述的目标代码语句。
在本实施例中,用于转换代码的装置600的源代码语句获取单元601通过有线连接方式或者无线连接方式从终端设备(例如图1的终端设备101、102、103)获取源代码语句。其中,源代码语句可以是以第一编码语言描述的代码语句。例如,Python语句“for i inrange(0,10,2)”、“list3=[(a+b)for a,b in zip(list1,list2)]”等。这里,第一编程语言可以是预设的编程语言,例如,Python、C++等。
在本实施例中,上述第一模型选取单元602从预先训练的多个自然语句生成模型中选取以第一编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型。例如,选取输入语句为Python代码、输出语句为汉语的自然语句生成模型。
在本实施例中,上述中间语句生成单元603可以将源代码语句获取单元601获取的源代码语句输入到第一模型选取单元602选取的自然语句生成模型中,得到与源代码语句的语义对应的、以自然语言描述的中间语句。作为示例,将源代码语句“for i in range(0,10,2)”输入到所选取的自然语句生成模型中,得到中间语句“遍历0到10以内的偶数”。
在本实施例中,上述第二模型选取单元604从预先训练的多个代码语句生成模型中选取以自然语言描述的语句作为输入、以第二编程语言描述的语句作为输出的代码语句生成模型。例如,选取输入语句为汉语、输出语句为JAVA编程语句的代码语句生成模型。这里,第二编程语言可以是与第一编程语言不同的编程语言。例如,第一编程语言为Python,第二编程语言为Perl。或者,第一编程语言为JAVA,第二编程语言为C++。
在本实施例中,上述目标代码语句生成单元605可以将中间语句生成单元603生成的中间语句输入到第二模型选取单元604选取的代码语句生成模型中,得到与中间语句的语义对应的、以第二编程语言描述的代码语句。作为示例,将中间语句“遍历0到10以内的偶数”输入到所选取的代码语句生成模型中,得到Perl代码语句“for(i=0;i≤10;i=i+2)”。
在本实施例的一些可选的实现方式中,代码语句生成模型可以按照以下步骤训练得到:
首先,获取训练样本集合。其中,每个训练样本可以包括以自然语言描述的命令语句和以目标编程语言描述的代码语句。代码语句可以与命令语句的语义对应。以目标编程语言为Python为例,命令语句为“遍历0到10以内的偶数”,对应的代码语句可以为“for iin range(0,10,2)”。代码语句可以通过对命令语句进行标注来获得。
然后,将训练样本集合中的每个训练样本中的命令语句作为输入,将与输入的命令语句对应的代码语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到代码语句生成模型。初始神经网络可以包括编码器和解码器(即,Encoder-Decoder模型)。这里,每种编程语言对应的代码语句生成模型的训练方法可以相同。
本申请的上述实施例提供的装置,通过获取第一编程语言描述的源代码语句,然后将源代码语句输入与第一编程语言匹配的自然语句生成模型得到中间语句,最后将中间语句输入与第二编程语言匹配的代码语句生成模型得到目标代码语句,从而能够在不同编程语言之间进行代码转换,而不需要掌握编程语言的语法细节。
下面参考图7,其示出了适于用来实现本申请实施例的服务器的计算机系统700的结构示意图。图7示出的服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标(或麦克风)等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本申请实施例的方法中限定的上述功能。
需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请实施例的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括输入语句获取单元、模型选取单元和自然语句生成单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,输入语句获取单元还可以被描述为“获取用户提交的输入语句的单元”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:获取输入语句,其中输入语句是以预设编程语言描述的代码语句;选取以预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型;将输入语句输入到自然语句生成模型中,得到与输入语句的语义对应的、以自然语言描述的自然语句。或者,当上述一个或者多个程序被该装置执行时,使得该装置:获取以第一编程语言描述的源代码语句;选取以第一编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型;将源代码语句输入到自然语句生成模型中,得到与源代码语句的语义对应的、以自然语言描述的中间语句;选取以自然语言描述的语句作为输入、以第二编程语言描述的语句作为输出的代码语句生成模型;将中间语句输入到代码语句生成模型中,得到与中间语句的语义对应的、以第二编程语言描述的目标代码语句。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (8)

1.一种用于生成语句的方法,包括:
获取输入语句,其中所述输入语句是以预设编程语言描述的代码语句;
选取以所述预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型,其中,所述自然语句生成模型包括编码器和解码器;
将所述输入语句输入到所述自然语句生成模型中,得到与所述输入语句的语义对应的、以所述自然语言描述的自然语句,包括:将基于所述编码器得到的所述输入语句的编码表示输入到所述解码器中,得到输出语句;响应于所述输出语句中不存在待解码标识符,将所述输出语句确定为自然语句。
2.根据权利要求1所述的方法,其中,所述自然语句生成模型通过如下步骤训练得到:
获取训练样本集合,其中训练样本包括以所述预设编程语言描述的代码语句以及与代码语句的语义对应的、以所述自然语言描述的命令语句;
将所述训练样本集合中的训练样本中的代码语句作为输入,将与输入的代码语句对应的命令语句作为输出,利用机器学习的方法对初始神经网络进行训练,得到所述自然语句生成模型。
3.根据权利要求1所述的方法,其中,所述将所述输入语句输入到所述自然语句生成模型中,得到与所述输入语句的语义对应的、以所述自然语言描述的自然语句,包括:
将所述输入语句输入到所述编码器中,得到所述输入语句的编码表示;
将所述输入语句的编码表示作为所述解码器的当前输入信息,执行层次化语义解析步骤:将当前输入信息输入到所述解码器中,得到输出语句;确定输出语句中是否存在待解码标识符;若输出语句中不存在待解码标识符,则将输出语句确定为自然语句。
4.根据权利要求3所述的方法,其中,所述将所述输入语句输入到所述自然语句生成模型中,得到与所述输入语句的语义对应的、以所述自然语言描述的自然语句,还包括:
若输出语句中存在待解码标识符,则将输出语句输入到所述解码器中,得到输出语句的编码表示;
采用注意力机制对所述输入语句的编码表示和输出语句的编码表示进行加权处理,将处理结果作为所述解码器的当前输入信息,继续执行所述层次化语义解析步骤。
5.根据权利要求1-4中任一所述的方法,其中,所述方法还包括:
基于所述自然语句生成所述输入语句的注释。
6.一种用于生成语句的装置,包括:
输入语句获取单元,被配置成获取输入语句,其中所述输入语句是以预设编程语言描述的代码语句;
模型选取单元,被配置成选取以所述预设编程语言描述的语句作为输入、以自然语言描述的语句作为输出的自然语句生成模型,其中,所述自然语句生成模型包括编码器和解码器;
自然语句生成单元,被配置成将所述输入语句输入到所述自然语句生成模型中,得到与所述输入语句的语义对应的、以所述自然语言描述的自然语句,包括:将基于所述编码器得到的所述输入语句的编码表示输入到所述解码器中,得到输出语句;响应于所述输出语句中不存在待解码标识符,将所述输出语句确定为自然语句。
7.一种电子设备,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
8.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的方法。
CN201811628295.1A 2018-12-28 2018-12-28 用于生成语句的方法和装置 Active CN109739483B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811628295.1A CN109739483B (zh) 2018-12-28 2018-12-28 用于生成语句的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811628295.1A CN109739483B (zh) 2018-12-28 2018-12-28 用于生成语句的方法和装置

Publications (2)

Publication Number Publication Date
CN109739483A CN109739483A (zh) 2019-05-10
CN109739483B true CN109739483B (zh) 2022-02-01

Family

ID=66361990

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811628295.1A Active CN109739483B (zh) 2018-12-28 2018-12-28 用于生成语句的方法和装置

Country Status (1)

Country Link
CN (1) CN109739483B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111159220B (zh) * 2019-12-31 2023-06-23 北京百度网讯科技有限公司 用于输出结构化查询语句的方法和装置
CN112346737B (zh) * 2021-01-08 2021-04-13 深圳壹账通智能科技有限公司 编程语言翻译模型的训练方法、装置、设备及存储介质
CN113342318B (zh) * 2021-04-19 2022-06-10 山东师范大学 基于多视图代码特征的细粒度代码自动生成方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104750484A (zh) * 2015-03-23 2015-07-01 福建工程学院 一种基于最大熵模型的代码摘要生成方法
CN108345457A (zh) * 2018-01-24 2018-07-31 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN108519890A (zh) * 2018-04-08 2018-09-11 武汉大学 一种基于自注意力机制的鲁棒性代码摘要生成方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7725307B2 (en) * 1999-11-12 2010-05-25 Phoenix Solutions, Inc. Query engine for processing voice based queries including semantic decoding

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104750484A (zh) * 2015-03-23 2015-07-01 福建工程学院 一种基于最大熵模型的代码摘要生成方法
CN108345457A (zh) * 2018-01-24 2018-07-31 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN108519890A (zh) * 2018-04-08 2018-09-11 武汉大学 一种基于自注意力机制的鲁棒性代码摘要生成方法

Also Published As

Publication number Publication date
CN109739483A (zh) 2019-05-10

Similar Documents

Publication Publication Date Title
CN109614111B (zh) 用于生成代码的方法和装置
KR102401942B1 (ko) 번역품질 평가 방법 및 장치
US20210200957A1 (en) Method and apparatus for generating dialogue model
CN109063174B (zh) 查询答案的生成方法及装置、计算机存储介质、电子设备
CN109739483B (zh) 用于生成语句的方法和装置
CN109657251B (zh) 用于翻译语句的方法和装置
CN110046254B (zh) 用于生成模型的方法和装置
US11758088B2 (en) Method and apparatus for aligning paragraph and video
CN110149238B (zh) 用于预测流量的方法和装置
CN111159220B (zh) 用于输出结构化查询语句的方法和装置
CN111382261B (zh) 摘要生成方法、装置、电子设备及存储介质
US11132996B2 (en) Method and apparatus for outputting information
CN112417902A (zh) 文本翻译方法、装置、设备及存储介质
CN111078825A (zh) 结构化处理方法、装置、计算机设备及介质
CN115238045B (zh) 一种生成式事件论元抽取方法、系统及存储介质
US20240078385A1 (en) Method and apparatus for generating text
CN111368560A (zh) 文本翻译方法、装置、电子设备及存储介质
CN111104796B (zh) 用于翻译的方法和装置
CN114154518A (zh) 数据增强模型训练方法、装置、电子设备及存储介质
CN112269566B (zh) 脚本生成处理方法、装置、设备及系统
CN111027333B (zh) 篇章翻译方法和装置
CN112364653A (zh) 用于语音合成的文本分析方法、装置、服务器和介质
CN115810068A (zh) 一种图像描述生成方法、装置、存储介质及电子设备
CN111125154B (zh) 用于输出结构化查询语句的方法和装置
CN114841175A (zh) 机器翻译方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant