代码注释生成方法、模型的训练方法、装置和设备与流程

文档序号:30979465发布日期:2022-08-03 00:15阅读:99来源:国知局
代码注释生成方法、模型的训练方法、装置和设备与流程

1.本公开涉及人工智能领域,更具体地,涉及一种代码注释生成方法、注释生成模型的训练方法、装置、设备、介质和程序产品。


背景技术:

2.代码注释是指对编程人员编写的源代码进行的解释和说明,可以形成可供阅读参考的功能文档。缺乏注释的代码使得现有代码维护人员浪费大量精力进行阅读和理解,对于一些晦涩代码甚至难以更新和维护。相关技术中,一般针对特定种类的编程语言训练人工智能模型,来实现该种编程语言编写的代码注释自动生成,但是无法用于其他种类的编程语言编写的代码。
3.在实现本公开的发明构思的过程中,发明人发现相关技术中至少存在以下问题:针对不同的编程语言都训练对应的人工智能模型,导致增加开发、部署和使用等成本。


技术实现要素:

4.鉴于上述问题,本公开提供了一种代码注释生成方法、注释生成模型的训练方法、装置、设备、介质和程序产品。
5.本公开实施例的一个方面,提供了一种代码注释生成方法,包括:获取待注释的代码内容;确定编写所述代码内容所使用的第一编程语言;根据所述第一编程语言,将所述代码内容输入至预先训练的注释生成模型中的第一编码器,其中,所述注释生成模型包括n个编码器,以及所述n个编码器共用的解码器,每个编码器对应处理一种编程语言,第一编码器为所述n个编码器中对应处理所述第一编程语言的编码器,n为大于或等于2的整数;将所述第一编码器输出的第一中间特征输入至所述解码器,其中,所述第一中间特征由所述第一编码器处理所述代码内容而获得;根据所述解码器输出的第一预测结果,生成所述代码内容的注释内容,其中,所述第一预测结果由所述解码器根据所述第一中间特征获得。
6.根据本公开的实施例,所述每个编码器包括自注意力层、历史信息混合层和前馈网络层,在将所述代码内容输入至预先训练的注释生成模型中的第一编码器之后,还包括获得所述第一中间特征,具体包括:将所述代码内容依次经过所述第一编码器中自注意力层、历史信息混合层和前馈网络层的处理,得到所述第一中间特征;其中,所述历史信息混合层用于根据上一时刻的历史信息和本次时刻的输入信息处理数据。
7.根据本公开的实施例,所述本次时刻包括第t时刻,所述上一时刻包括第t-1时刻,所述将所述代码内容依次经过所述第一编码器中自注意力层、历史信息混合层和前馈网络层的处理包括:使所述自注意力层处理所述代码内容,得到所述第t时刻的当前输入信息,t大于等于1;使所述历史信息混合层处理所述当前输入信息和所述代码内容的上一历史信息,得到所述第t时刻的当前输出,其中,所述上一历史信息在第t-1时刻获得;使所述前馈网络层处理所述第t时刻的当前输出,得到所述第t时刻的第一中间特征。
8.根据本公开的实施例,所述得到所述第t时刻的当前输出包括:根据所述当前输入
信息和所述上一历史信息,得到第t时刻的当前历史信息;根据所述当前历史信息和所述当前输入信息,得到所述当前输出。
9.根据本公开的实施例,还包括:根据所述第t-1时刻,及所述第t-1时刻之前每个时刻的第一中间特征,得到覆盖率向量;根据所述覆盖率向量,利用覆盖机制生成所述第t时刻的第一中间特征对应的注释内容,其中,所述覆盖机制用于降低将要生成的注释内容与已经生成的注释内容相重复的概率。
10.根据本公开的实施例,所述方法还包括:利用所述第一中间特征和所述解码器输出的第三中间特征,得到第二预测结果,其中,所述第二预测结果包括将所述代码内容中任一个代码字段作为所述注释内容中注释字段的概率;其中,根据所述解码器输出的第一预测结果,生成所述代码内容的注释内容包括:根据所述第一预测结果和所述第二预测结果,生成所述注释内容。
11.根据本公开的实施例,还包括训练所述注释生成模型,具体包括:将n个训练样本分别输入至所述n个编码器,得到所述n个编码器输出的n个第二中间特征,其中,所述n个训练样本利用n种编程语言分别编写具有相同功能的代码内容来获得,每个训练样本包括利用对应种类的编程语言编写得到的代码内容;对所述n个第二中间特征进行融合,得到融合中间特征;根据所述解码器输出的第三预测结果,生成所述n个训练样本的注释内容,其中,所述第三预测结果由所述解码器根据所述融合中间特征获得;根据所述n个训练样本的注释内容和代码注释标签之间的对比损失,训练所述n个编码器和所述解码器。
12.根据本公开的实施例,还包括:利用方差惩罚函数对所述n个第二中间特征进行惩罚处理,得到惩罚中间特征;其中,所述对所述n个中间特征进行融合,得到融合中间特征包括:根据所述惩罚中间特征进行融合,得到所述融合中间特征。
13.本公开实施例的另一方面提供了一种注释生成模型的训练方法,其中,所述注释生成模型包括n个编码器,以及所述n个编码器共用的解码器,每个编码器对应处理一种编程语言,所述方法包括:将n个训练样本分别输入至所述n个编码器,得到所述n个编码器输出的n个第二中间特征,其中,所述n个训练样本利用n种编程语言分别编写具有相同功能的代码内容来获得,每个训练样本包括利用对应种类的编程语言编写得到的代码内容;对所述n个第二中间特征进行融合,得到融合中间特征;根据所述解码器输出的第三预测结果,生成所述n个训练样本的注释内容,其中,所述第三预测结果由所述解码器根据所述融合中间特征获得;根据所述n个训练样本的注释内容和代码注释标签之间的对比损失,训练所述n个编码器和所述解码器。
14.本公开实施例的另一方面提供了一种代码注释生成装置,包括:代码获取模块,用于获取待注释的代码内容;语言确定模块,用于确定编写所述代码内容所使用的第一编程语言;第一输入模块,用于根据所述第一编程语言,将所述代码内容输入至预先训练的注释生成模型中的第一编码器,其中,所述注释生成模型包括n个编码器,以及所述n个编码器共用的解码器,每个编码器对应处理一种编程语言,第一编码器为所述n个编码器中对应处理所述第一编程语言的编码器,n为大于或等于2的整数;第二输入模块,用于将所述第一编码器输出的第一中间特征输入至所述解码器,其中,所述第一中间特征由所述第一编码器处理所述代码内容而获得;第一生成模块,用于根据所述解码器输出的第一预测结果,生成所述代码内容的注释内容,其中,所述第一预测结果由所述解码器根据所述第一中间特征获
得。
15.本公开实施例的另一方面提供了一种注释生成模型的训练装置,其中,所述注释生成模型包括n个编码器,以及所述n个编码器共用的解码器,每个编码器对应处理一种编程语言,所述装置包括:第三输入模块,用于将n个训练样本分别输入至所述n个编码器,得到所述n个编码器输出的n个第二中间特征,其中,所述n个训练样本利用n种编程语言分别编写具有相同功能的代码内容来获得,每个训练样本包括利用对应种类的编程语言编写得到的代码内容;特征融合模块,用于对所述n个第二中间特征进行融合,得到融合中间特征;第二生成模块,用于根据所述解码器输出的第三预测结果,生成所述n个训练样本的注释内容,其中,所述第三预测结果由所述解码器根据所述融合中间特征获得;模型训练模块,用于根据所述n个训练样本的注释内容和代码注释标签之间的对比损失,训练所述n个编码器和所述解码器。
16.本公开实施例的另一方面提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行如上所述的方法。
17.本公开实施例的另一方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如上所述的方法。
18.本公开实施例的另一方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上所述的方法。
19.上述一个或多个实施例具有如下有益效果:利用预先训练的注释生成模型可以对多种编程语言编写的代码内容进行注释生成。例如可以根据待注释的代码内容的编程语言种类,输入到注释生成模型中的对应编码器,如第一编码器。然后将第一编码器输出的第一中间特征输入至所述解码器。最后可以根据所述解码器输出的第一预测结果,生成所述代码内容的注释内容。从而无需针对不同种类的编程语言皆训练和部署各自的模型,能够使用注释生成模型为不同种类的编程语言编写的遗存代码或现存的第三方无注释代码添加可供阅读参考的注释,一定程度上减少了开发、部署和使用等成本。
附图说明
20.通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
21.图1示意性示出了根据本公开实施例的代码注释生成方法或注释生成模型的训练方法的应用场景图;
22.图2示意性示出了根据本公开实施例的注释生成模型的训练方法的流程图;
23.图3示意性示出了注释生成模型的架构示意图;
24.图4示意性示出了根据本公开实施例的得到融合中间特征的流程图;
25.图5a示意性示出了根据本公开实施例的编码器的结构示意图;
26.图5b示意性示出了根据本公开实施例的代码注释生成系统的架构示意图;
27.图6示意性示出了根据本公开实施例的代码注释生成方法的流程图;
28.图7示意性示出了根据本公开实施例的处理代码内容的流程图;
29.图8示意性示出了根据本公开实施例的得到所述第t时刻的当前输出的流程图;
30.图9示意性示出了根据本公开实施例的利用覆盖机制生成注释内容流程图;
31.图10示意性示出了根据本公开实施例的基于指针网络生成注释内容的流程图;
32.图11示意性示出了根据本公开实施例的注释生成模型训练装置的结构框图;
33.图12示意性示出了根据本公开实施例的代码注释生成装置的结构框图;以及
34.图13示意性示出了根据本公开实施例的适于实现注释生成模型的训练方法或代码注释生成方法的电子设备的方框图。
具体实施方式
35.以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
36.对于要实现的功能,可以使用python、java、c语言、c++或golang等编程语言编写代码来实现。人工注释代码的方式要求具有相当丰富开发经验的开发人员参与,耗时耗力,投入较大。按模板生成注释的方式不能很好的适应新项目需要,生成的注释信息不全,模板的维护成本较高。若对每种编程语言训练对应的模型来实现代码注释生成,在训练阶段和使用阶段都会具有较大的成本。
37.本公开的实施例提供了一种代码注释生成方法、注释生成模型的训练方法、装置、设备、介质和程序产品。利用预先训练的注释生成模型可以对多种编程语言编写的代码内容进行注释生成。可以根据待注释的代码内容的编程语言种类,对应输入到注释生成模型中的编码器,即第一编码器。然后将第一编码器输出的第一中间特征输入至解码器。最后可以根据解码器输出的第一预测结果,生成代码内容的注释内容。从而无需针对不同种类的编程语言皆训练和部署对应的模型,也能够为不同种类的编程语言编写的遗存代码或现存的第三方无注释代码添加可供阅读参考的注释,一定程度上减少了开发、部署和使用等成本。
38.图1示意性示出了根据本公开实施例的代码注释生成方法或注释生成模型的训练方法的应用场景图。
39.如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
40.用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
41.终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
42.服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信
vector)。根据上下文向量以及第三预测结果获得最终预测结果,以生成注释内容。
60.在操作s240,根据n个训练样本的注释内容和代码注释标签之间的对比损失,训练n个编码器和解码器。
61.示例性地,可以使用交叉熵损失函数来计算对比损失,并更新注释生成模型中的参数。根据交叉熵损失函数的值的收敛程度确定训练效果。
62.根据本公开的实施例,考虑到不同语言编写的相同功能的代码尽管外观不同,但其本质上所实现的功能是一致的,也就意味着其中间特征状态的分布是相同或类似的,因此多个编码器具有相同的解码器。在每个输入批次中输入不同编程语言编写的相同功能的代码进行端到端的训练,可以令注释生成模型具有对不同编程语言的代码自动生成注释的能力。
63.图4示意性示出了根据本公开实施例的得到融合中间特征的流程图。
64.如图4所示,该实施例的得到融合中间特征包括操作s410~操作s420。操作s420是操作s220的其中一个实施例。
65.在操作s410,利用方差惩罚函数对n个第二中间特征进行惩罚处理,得到惩罚中间特征。
66.示例性地,可以利用方差惩罚函数进行惩罚处理,如式1)所示
67.li=argminstd(fi)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
式1)
68.其中,li表示第i个编码器的惩罚中间特征,fi表示第i个编码器的第二中间特征,std表示标准差,argmin表示取标准差最小的ai。
69.在操作s420,根据惩罚中间特征进行融合,得到融合中间特征。
70.参照图3,将n个第二中间特征中标准差最小的特征输入到融合层,得到融合中间特征。
71.根据本公开的实施例,对各个编码器输出增加一个方差惩罚函数,使得针对不同语言的编码器具有相近的输出分布(根据融合中间特征得到),然后输入到参数共享的解码器中得到代码的注释输出。
72.在图3所示的注释生成模型的架构基础上,下面对编码器和解码器的结构进行介绍。
73.在一些实施例中,可以采用transformer模型的编码器和解码器作为注释生成模型的基本结构。
74.在另一些实施例中,可以采用transformer模型的解码器作为注释生成模型的解码器。下面通过图5介绍该实施例中注释生成模型的编码器结构。其中,每个编码器可以采用bert(bidirectional encoder representations from transformers)模型中的双向编码结构来处理代码内容中的上下文。
75.图5a示意性示出了根据本公开实施例的编码器的结构示意图。
76.如图5a所示,该实施例的编码器可以至少包括多头自注意力(multi-head selfattention)层、两个求和归一化(add&norm)层和前馈网络(feed forward)层,以及在多头自注意力层和前馈网络层之间的历史信息混合(mixed history)层。历史信息混合层的作用是将历史信息融合到当前特征表示。
77.例如,给定代码内容作为输入数据(inputs),先进行input embedding操作,即将
inputs中的文本转换为对应的词向量。然后,进行positional encoding操作,进行位置编码。最后输入到编码器中进行处理。
78.图5b示意性示出了根据本公开实施例的代码注释生成系统的架构示意图。
79.如图5b所示,代码注释生成系统可采用c/s(client and server)模式进行构建,即待注释的代码通过接收前端传入到统一的模型算法处理后端,处理后返回对应的注释文档。客户端/服务器的软件架构模式有利于系统能够在算力不足的操作平台上(前端平台运行输入/输出可视化前端,可不运行模型算法),同时也方便模型的部署和维护以及后续改进,降低成本。
80.在一些实施例中,为提高模型生成的注释的精确度,可在生成注释后添加人工审核标签,可供开启人工校勘功能。由于人工对模型生成的注解的局部进行修改,相较于纯手工编写,仍然能够很好地提升效率。
81.根据本公开的实施例,代码注释生成系统可以为无注释文档代码添加可供阅读的功能注释,提高代码的可读性。还可减少手工注解带来的人工成本,以及提高代码的可维护性,方便后续对代码的维护和修改。
82.下面进一步介绍本公开实施例的代码注释生成方法。
83.图6示意性示出了根据本公开实施例的代码注释生成方法的流程图。
84.如图6所示,该实施例的代码注释生成方法包括操作s610~操作s650。
85.在操作s610,获取待注释的代码内容。
86.例如获取遗存代码或第三方代码等无注释的代码。
87.在操作s620,确定编写代码内容所使用的第一编程语言。
88.示例性地,确定第一编程语言是python、java、c语言、c++或golang等各种编程语言中的哪一种。
89.在操作s630,根据第一编程语言,将代码内容输入至预先训练的注释生成模型中的第一编码器,其中,注释生成模型包括n个编码器,以及n个编码器共用的解码器,每个编码器对应处理一种编程语言,第一编码器为n个编码器中对应处理第一编程语言的编码器,n为大于或等于2的整数。
90.示例性地,可以参照图2~图6的实施例,得到预先训练的注释生成模型。例如代码内容是python语言编写的,则将其输入到负责处理python语言的编码器中。
91.在操作s640,将第一编码器输出的第一中间特征输入至解码器,其中,第一中间特征由第一编码器处理代码内容而获得。
92.示例性地,第一中间特征可以是根据输入的代码内容所得到的隐状态序列。参照图5,对代码内容input embedding和positional encoding后,将代码内容中的各个词的词向量输入至第一编码器。第一编码器会逐步为各个词生成隐状态,从而得到隐状态序列。
93.参照图3,在使用过程中输入第一编程语言得到的代码内容,融合层不再起到对多个编码器的中间特征进行融合的作用。该情况下,也可以利用融合层中的mlp层处理第一中间特征。
94.在操作s650,根据解码器输出的第一预测结果,生成代码内容的注释内容,其中,第一预测结果由解码器根据第一中间特征获得。
95.示例性地,可以将第一中间特征输入至解码器,由解码器处理融合中间特征生成
对应的隐状态序列,并可以经过另一mlp层和softmax层的处理(图3未示出),得到第一预测结果。
96.根据本公开的实施例,利用预先训练的注释生成模型可以对多种编程语言编写的代码内容进行注释生成。可以根据待注释的代码内容的编程语言种类,对应输入到注释生成模型中的编码器,即第一编码器。然后将第一编码器输出的第一中间特征输入至解码器。最后可以根据解码器输出的第一预测结果,生成代码内容的注释内容。从而无需针对不同种类的编程语言皆训练和部署对应的模型,也能够为不同种类的编程语言编写的遗存代码或现存的第三方无注释代码添加可供阅读参考的注释,一定程度上减少了开发、部署和使用等成本。
97.根据本公开的实施例,参照图5,每个编码器包括自注意力层、历史信息混合层和前馈网络层,在将代码内容输入至预先训练的注释生成模型中的第一编码器之后,还包括获得第一中间特征,具体包括:将代码内容依次经过第一编码器中自注意力层、历史信息混合层和前馈网络层的处理,得到第一中间特征。其中,历史信息混合层用于根据上一时刻的历史信息和本次时刻的输入信息处理数据。
98.若将代码内容中的一个方法或一个类为单位作为模型的输入通常都较长,这会带来长程依赖问题。长程依赖问题具体而言,可能注释生成模型对输入字符数量有限制,会将一个方法或一个类中函数和变量等分为多个分段(segment),由于各个segment是固定分片,每个segment之间没有关联性,对于长文本而言会导致segment的语义不完整问题。通过加入历史信息混合层,在双向编码结构的基础上,可以根据上一时刻的历史信息和本次时刻的输入信息处理数据,从而具有历史信息缓存能力,在一定程度上缓解长程依赖问题。
99.图7示意性示出了根据本公开实施例的处理代码内容的流程图。
100.如图7所示,将代码内容依次经过第一编码器中自注意力层、历史信息混合层和前馈网络层的处理包括操作s710~操作s730。其中,本次时刻包括第t时刻,上一时刻包括第t-1时刻。
101.在操作s710,使自注意力层处理代码内容,得到第t时刻的当前输入信息,t大于等于1。
102.示例性地,对代码内容进行input embedding和positional encoding处理,得到对应的词序列。其中,一些实施例中,代码内容中的一个方法或一个类可以是长文本,其中词语之间的顺序作为时间轴,逐步输入至编码器。可以处理第t时刻的词语,从而得到第t时刻的当前输入信息。
103.在操作s720,使历史信息混合层处理当前输入信息和代码内容的上一历史信息,得到第t时刻的当前输出,其中,上一历史信息在第t-1时刻获得。
104.示例性地,上一历史信息可以根据第t-1时刻的词语得到,其用于表征第t-1时刻以及之前每一时刻的所有词的综合历史信息,如语义信息。
105.在操作s730,使前馈网络层处理第t时刻的当前输出,得到第t时刻的第一中间特征。
106.图8示意性示出了根据本公开实施例的得到第t时刻的当前输出的流程图。
107.如图8所示,操作s720中得到第t时刻的当前输出包括操作s810~操作s820。
108.在操作s810,根据当前输入信息和上一历史信息,得到第t时刻的当前历史信息。
109.首先,利用式2)得到阈值α
t

110.α
t
=σ(w
cx
·
[c
t-1
,x
t
]+b
cx
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
式2)其中,σ是sigmod函数,w
cx
和b
cx
为训练中学习的参数,c
t-1
为上一历史信息(第t-1时刻的历史信息),x
t
为当前输入信息。
[0111]
接着,利用式3)得到当前历史信息c
t

[0112]ct
=α
t
·ct-1
+(1-α
t
)
·
x
t
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
式3)
[0113]
在操作s820,根据当前历史信息和当前输入信息,得到当前输出。
[0114]
可以利用式4)得到当前输出o
t

[0115]ot
=(1-σ(x
t
))
·ct
+σ(x
t
)
·
x
t
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
式4)
[0116]
根据本公开的实施例,该当前输出ot可经过feed forward层和add&norm的处理,得到编码器输出的第一中间特征。
[0117]
图9示意性示出了根据本公开实施例的利用覆盖机制生成注释内容流程图。
[0118]
如图9所示,该实施例中生成注释内容可以包括操作s910~操作s920。
[0119]
在操作s910,根据第t-1时刻,及第t-1时刻之前每个时刻的第一中间特征,得到覆盖率向量。
[0120]
覆盖率向量(coverage vector)d
t
可以通过式5)计算获得。
[0121][0122]
其中,a为过往每一时刻第一中间特征得到的注意力分布。
[0123]
根据式5)可知,利用覆盖率向量表示过往时刻的所有注意力分布的累加,其告诉模型,encoder的输入中哪些部分是已经被注意力关注过的,哪些没有。
[0124]
在操作s920,根据覆盖率向量,利用覆盖机制生成第t时刻的第一中间特征对应的注释内容,其中,覆盖机制用于降低将要生成的注释内容与已经生成的注释内容相重复的概率。
[0125]
示例性地,参照图3,将覆盖率向量d
t
加入到前馈网络层之后的add&norm层中,该层第t时刻的输出f
t
如式6)所示。在一些实施例中,可以将f
t
作为第一中间特征。
[0126]ft
=norm(f
ta
+f
tm
+d
t
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
式6)
[0127]
其中,norm表示正则化函数,例如将transformer中的layernorm作为正则化函数。fa表示multi-head self attention层的输出。fm表示feed forward层的输出。
[0128]
根据本公开的实施例,功能相近方法的代码重合度通常较高,这会导致注释的重复生成,通过引入覆盖机制,通过对历史分布累积统计,对当前的编码分布在历史累积分布方向上进行惩罚,减少当前编码分布靠近历史分布,从而减轻注释的重复生成。
[0129]
在另一些实施例中,可以在训练阶段引入覆盖机制,并在损失函数中引入覆盖率向量的监督损失covloss
t
,如式7)。
[0130][0131]
其中,覆盖率损失是有界的,即
[0132]
在一些实施例中,注释中通常需要引用源代码中的一些变量或方法名称,由于变量或方法的起名因人而异,不被收录到输出词典中去。指针网络可以得到输出对应为输入每一个的概率大小,即概率分布。换言之,可以得到注释内容中的字段来自代码内容中字段
的概率分布。下面结合图10进行介绍。
[0133]
图10示意性示出了根据本公开实施例的基于指针网络生成注释内容的流程图。
[0134]
如图10所示,该实施例的生成注释内容包括操作s1010~操作s1020。操作s1020可以是操作s650的其中一个实施例。
[0135]
在操作s1010,利用第一中间特征和解码器输出的第三中间特征,得到第二预测结果,其中,第二预测结果包括将代码内容中任一个代码字段作为注释内容中注释字段的概率。
[0136]
示例性,第三中间特征可以是解码器根据第一中间特征得到的隐状态序列。可以将第三中间特征输入至sofxmax层得到第一预测结果。
[0137]
在操作s1020,根据第一预测结果和第二预测结果,生成注释内容。
[0138]
在一些实施例中,可以根据指针网络(pointer network)得到第二预测结果p2,如式8)。
[0139]
p2=softmax(vtanh(w1f
t
+w2s
t
))
ꢀꢀꢀꢀꢀꢀ
式8)
[0140]
其中,v、w1和w2为训练过程中学习或自定义的参数,tanh为双曲正切函数,f
t
为第一中间特征,s
t
为第三中间特征。在一些实施例中,p2可以作为该时刻的注意力分布a
t

[0141]
在该实施例中,最终预测结果可以通过第一预测结果p1和第二预测结果中概率最大值来生成注释。
[0142]
在另一些实施例中,可以根据指针生成器网络(pointer-generator network)得到第二预测结果。指针生成器网络是根据baseline模型和指针网络的混合模型。其可以根据第一中间特征和第三中间特征得到上下文向量(context vector),然后根据该向量得到第二预测结果,最后通过软权重连接两个预测结果得到最终预测结果。
[0143]
换言之,注释生成模型除了解码器最终预测的词典分布(即第一预测结果)之外,还利用编码器产生的中间特征来预测源文本的复制分布。
[0144]
根据本公开的实施例,利用指针网络对源代码自定义的变量名和方法名进行赋值,减轻超出词典问题(out of vocabulary,oov)。注释生成模型根据最终预测结果决定第t时刻的词语的注释赋值自源文本还是词典结果,从而具有源文本拷贝能力。
[0145]
基于上述注释生成模型训练方法和代码注释生成方法,本公开还提供了一种注释生成模型训练装置和代码注释生成装置。以下将结合图11和图12进行详细描述。
[0146]
图11示意性示出了根据本公开实施例的注释生成模型训练装置的结构框图。
[0147]
如图11所示,该实施例的注释生成模型训练装置1100包括第三输入模块1110、特征融合模块1120、第二生成模块1130和模型训练模型1140。其中,注释生成模型包括n个编码器,以及n个编码器共用的解码器,每个编码器对应处理一种编程语言。
[0148]
第三输入模块1110可以执行操作s210,用于将n个训练样本分别输入至n个编码器,得到n个编码器输出的n个第二中间特征,其中,n个训练样本利用n种编程语言分别编写具有相同功能的代码内容来获得,每个训练样本包括利用对应种类的编程语言编写得到的代码内容。
[0149]
特征融合模块1120可以执行操作s220,用于对n个第二中间特征进行融合,得到融合中间特征。
[0150]
第二生成模块1130可以执行操作s230,用于根据解码器输出的第三预测结果,生
成n个训练样本的注释内容,其中,第三预测结果由解码器根据融合中间特征获得。
[0151]
模型训练模块1140可以执行操作s240,用于根据n个训练样本的注释内容和代码注释标签之间的对比损失,训练n个编码器和解码器。
[0152]
根据本公开的实施例,注释生成模型训练装置1100还可以包括惩罚处理模块,该模块可以执行操作s410,用于利用方差惩罚函数对n个第二中间特征进行惩罚处理,得到惩罚中间特征。特征融合模块1120还可以执行操作s420,用于根据惩罚中间特征进行融合,得到融合中间特征。
[0153]
图12示意性示出了根据本公开实施例的代码注释生成装置的结构框图。
[0154]
如图12所示,该实施例的代码注释生成装置1200包括代码获取模块1210、语言确定模块1220、第一输入模块1230、第二输入模块1240和第一生成模块1250。
[0155]
代码获取模块1210可以执行操作s610,用于获取待注释的代码内容。
[0156]
语言确定模块1220可以执行操作s620,用于确定编写代码内容所使用的第一编程语言。
[0157]
第一输入模块1230可以执行操作s630,用于根据第一编程语言,将代码内容输入至预先训练的注释生成模型中的第一编码器,其中,注释生成模型包括n个编码器,以及n个编码器共用的解码器,每个编码器对应处理一种编程语言,第一编码器为n个编码器中对应处理第一编程语言的编码器,n为大于或等于2的整数。
[0158]
第二输入模块1240可以执行操作s640,用于将第一编码器输出的第一中间特征输入至解码器,其中,第一中间特征由第一编码器处理代码内容而获得。
[0159]
第一生成模块1250可以执行操作s650,用于根据解码器输出的第一预测结果,生成代码内容的注释内容,其中,第一预测结果由解码器根据第一中间特征获得。
[0160]
根据本公开的实施例,代码注释生成装置1200还可以包括历史信息模块,该模块可以执行操作s710~操作s730,操作s810~操作s820,在此不做赘述。
[0161]
根据本公开的实施例,代码注释生成装置1200还可以包括覆盖处理模块,该模块可以执行操作s910~操作s920,在此不做赘述。
[0162]
根据本公开的实施例,代码注释生成装置1200还可以包括预测模块,该模块可以执行操作s1010,用于利用第一中间特征和解码器输出的第三中间特征,得到第二预测结果。第一生成模块1250还可以执行操作s1020,用于根据第一预测结果和第二预测结果,生成注释内容。
[0163]
需要说明的是,装置部分实施例中各模块/单元/子单元等的实施方式、解决的技术问题、实现的功能、以及达到的技术效果分别与方法部分实施例中各对应的步骤的实施方式、解决的技术问题、实现的功能、以及达到的技术效果相同或类似,在此不再赘述。
[0164]
根据本公开的实施例,注释生成模型训练装置1100或代码注释生成装置1200中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。
[0165]
根据本公开的实施例,注释生成模型训练装置1100或代码注释生成装置1200中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对
电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,注释生成模型训练装置1100或代码注释生成装置1200中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
[0166]
图13示意性示出了根据本公开实施例的适于实现注释生成模型的训练方法或代码注释生成方法的电子设备的方框图。
[0167]
如图13所示,根据本公开实施例的电子设备1300包括处理器1301,其可以根据存储在只读存储器(rom)1302中的程序或者从存储部分1308加载到随机访问存储器(ram)1303中的程序而执行各种适当的动作和处理。处理器1301例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic))等等。处理器1301还可以包括用于缓存用途的板载存储器。处理器1301可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
[0168]
在ram 1303中,存储有电子设备1300操作所需的各种程序和数据。处理器1301、rom 1302以及ram 1303通过总线1304彼此相连。处理器1301通过执行rom 1302和/或ram 1303中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,程序也可以存储在除rom 1302和ram 1303以外的一个或多个存储器中。处理器1301也可以通过执行存储在一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
[0169]
根据本公开的实施例,电子设备1300还可以包括输入/输出(i/o)接口1305,输入/输出(i/o)接口1305也连接至总线1304。电子设备1300还可以包括连接至i/o接口1305的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1306。包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1307。包括硬盘等的存储部分1308。以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1309。通信部分1309经由诸如因特网的网络执行通信处理。驱动器1310也根据需要连接至i/o接口1305。可拆卸介质1311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1310上,以便于从其上读出的计算机程序根据需要被安装入存储部分1308。
[0170]
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的。也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
[0171]
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的rom 1302和/或ram 1303和/或rom 1302和ram1303以外的一个或多个存储器。
[0172]
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
[0173]
在该计算机程序被处理器1301执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
[0174]
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1309被下载和安装,和/或从可拆卸介质1311被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
[0175]
在这样的实施例中,该计算机程序可以通过通信部分1309从网络上被下载和安装,和/或从可拆卸介质1311被安装。在该计算机程序被处理器1301执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
[0176]
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如java,c++,python,“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
[0177]
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0178]
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
[0179]
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1