一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

生成注释信息的方法、装置、计算机设备和介质与流程

2022-02-20 13:22:08 来源:中国专利 TAG:


1.本公开涉及计算机领域,更具体而言,涉及一种生成注释信息的方法、装置、计算机设备和介质。


背景技术:

2.随着软件规模和复杂度提升,代码托管系统(如:codeup、github、tortoisesvn)在软件开发生命周期中重要性越来越显著。它们为用户提供版本控制服务,在软件更新迭代过程中,开发者被要求为每一次变更提交注释信息,来记录说明变更意图。协同开发者可以通过简单浏览这些提交信息了解到当前项目进展和代码变更情况,而不是耗费大量精力直接阅读源码。因此,高质量的提交注释信息对于开发者快速理解当前项目演进至关重要。目前,行业内提交高质量的注释信息主要通过人工发送。
3.行业内还没有自动化地为代码变更生成注释信息的产品。学术上提出过生成模型、检索模型,来自动化生成注释信息。生成模型生成的语句可读性较差,可能是不完整的句子或语句不通,准确性较低。检索模型忽略了代码本身的上下文,生成的结果可能不相关。此外,对于没有出现过的代码变更,无法生成准确的结果。因此,需要一种进一步提高精度以致能够用于实际代码开发的自动化注释信息生成方法。


技术实现要素:

4.有鉴于此,本公开旨在进一步提高为代码变更自动化生成注释信息的精度。
5.根据本公开的一方面,提供了一种为代码变更生成注释信息的方法,包括:
6.获取代码变更;
7.将所述代码变更分别输入生成模型和检索模型,由所述生成模型和检索模型分别输出候选注释信息;
8.从所述生成模型和所述检索模型分别输出的候选注释信息中,确定生成的注释信息。
9.可选地,所述从所述生成模型和所述检索模型分别输出的候选注释信息中,确定生成的注释信息,包括:
10.确定所述生成模型和所述检索模型分别输出的候选注释信息与所述代码变更的关联度;
11.根据所述关联度选择候选注释信息,作为生成的注释信息。
12.可选地,所述将所述代码变更分别输入生成模型和检索模型,包括:
13.生成所述代码变更的代码抽象语法树ast路径,输入所述生成模型;
14.将所述代码变更输入所述检索模型。
15.可选地,所述生成模型通过以下方式预先训练:针对代码变更片段样本集中的代码变更片段样本,生成该代码变更片段样本的ast路径,将生成的ast路径输入生成模型,由所述生成模型输出注释信息,将所述生成模型输出的注释信息与该代码变更片段样本预先
对应的注释信息比较,如果代码变更片段样本集中所述注释信息一致的比率大于预定比率,则所述生成模型训练成功。
16.可选地,所述检索模型包括代码变更与注释信息对应关系库和代码变更比较子模型,所述代码变更与注释信息对应关系库包括事先设置的代码变更与注释信息的对应关系,所述代码变更比较子模型确定输入的代码变更与所述注释信息对应关系库中的代码变更的相似度,根据所述相似度从注释信息对应关系库中确定注释信息,作为所述检索模型输出的候选注释信息。
17.可选地,所述确定所述生成模型和所述检索模型分别输出的候选注释信息与所述代码变更的关联度是由关联度模型实现的,其中,所述关联度模型通过以下方式预先生成:针对代码变更与注释信息样本对集合中的代码变更与注释信息样本对,将该代码变更与注释信息样本对输入关联度模型,由所述关联度模型输出该代码变更与注释信息样本对的关联度,与该该代码变更与注释信息样本对的预定的关联度比较,如果所述代码变更与注释信息样本对集合中关联度一致的比率大于预定比率,则所述关联度模型训练成功。
18.可选地,所述关联度模型是卷积神经网络。
19.可选地,所述根据所述关联度选择候选注释信息,作为生成的注释信息,包括:将所述关联度最大的候选注释信息,作为生成的注释信息。
20.可选地,所述根据所述关联度选择候选注释信息,作为生成的注释信息,包括:将所述候选注释信息按照关联度排序显示,并将用户选择的候选注释信息,作为生成的注释信息。
21.可选地,所述根据所述关联度选择候选注释信息,作为生成的注释信息,包括:
22.接收用户输入的注释信息的第一部分;
23.使生成模型和检索模型按照所述代码变更,重新输出以所述第一部分开头的候选注释信息;
24.确定所述生成模型重新输出的候选注释信息和所述检索模型重新输出的候选注释信息与所述代码变更的关联度;
25.根据所述关联度选择重新输出的候选注释信息,作为生成的注释信息。
26.可选地,根据本公开的一方面,提供了一种为代码变更生成注释信息的方法,包括:
27.显示变更前代码和变更后代码;
28.基于所述变更前代码和变更后代码,确定并显示代码变更;
29.显示由生成模型和检索模型分别针对所述代码变更得到的候选注释信息;
30.基于用户对候选注释信息的选择,确定生成的注释信息。
31.可选地,所述显示由生成模型和检索模型分别针对所述代码变更得到的候选注释信息,包括:
32.按照所述候选注释信息与所述代码变更的关联度,排序显示所述候选注释信息。
33.根据本公开的一方面,提供了一种为代码变更生成注释信息的装置,包括:
34.代码变更获取单元,用于获取代码变更;
35.候选注释信息生成单元,用于将所述代码变更分别输入生成模型和检索模型,由所述生成模型和检索模型分别输出候选注释信息;
36.注释信息确定单元,用于从所述生成模型和所述检索模型分别输出的候选注释信息中,确定生成的注释信息。
37.可选地,所述注释信息确定单元进一步用于:
38.确定所述生成模型和所述检索模型分别输出的候选注释信息与所述代码变更的关联度;
39.根据所述关联度选择候选注释信息,作为生成的注释信息。
40.可选地,所述候选注释信息生成单元进一步用于生成所述代码变更的代码抽象语法树ast路径,输入所述生成模型,并将所述代码变更输入所述检索模型。
41.可选地,所述生成模型通过以下方式预先训练:针对代码变更片段样本集中的代码变更片段样本,生成该代码变更片段样本的ast路径,将生成的ast路径输入生成模型,由所述生成模型输出注释信息,将所述生成模型输出的注释信息与该代码变更片段样本预先对应的注释信息比较,如果代码变更片段样本集中所述注释信息一致的比率大于预定比率,则所述生成模型训练成功。
42.可选地,所述检索模型包括代码变更与注释信息对应关系库和代码变更比较子模型,所述代码变更与注释信息对应关系库包括事先设置的代码变更与注释信息的对应关系,所述代码变更比较子模型确定输入的代码变更与所述注释信息对应关系库中的代码变更的相似度,根据所述相似度从注释信息对应关系库中确定注释信息,作为所述检索模型输出的候选注释信息。
43.可选地,所述关联度确定单元由关联度模型实现,其中,所述关联度模型通过以下方式预先生成:针对代码变更与注释信息样本对集合中的代码变更与注释信息样本对,将该代码变更与注释信息样本对输入关联度模型,由所述关联度模型输出该代码变更与注释信息样本对的关联度,与该该代码变更与注释信息样本对的预定的关联度比较,如果所述代码变更与注释信息样本对集合中关联度一致的比率大于预定比率,则所述关联度模型训练成功。
44.可选地,所述关联度模型是卷积神经网络。
45.可选地,所述注释信息生成单元进一步用于:将所述关联度最大的候选注释信息,作为生成的注释信息。
46.可选地,所述注释信息生成单元进一步用于:将所述候选注释信息按照关联度排序显示,并将用户选择的候选注释信息,作为生成的注释信息。
47.可选地,所述注释信息生成单元进一步用于:
48.接收用户输入的注释信息的第一部分;
49.使生成模型和检索模型按照所述代码变更,重新输出以所述第一部分开头的候选注释信息;
50.确定所述生成模型重新输出的候选注释信息和所述检索模型重新输出的候选注释信息与所述代码变更的关联度;
51.根据所述关联度选择重新输出的候选注释信息,作为生成的注释信息。
52.根据本公开的一方面,提供了一种为代码变更生成注释信息的装置,包括:
53.变更前后代码显示单元,用于显示变更前代码和变更后代码;
54.代码变更显示单元,用于基于所述变更前代码和变更后代码,确定并显示代码变
更;
55.候选注释信息显示单元,用于显示由生成模型和检索模型分别针对所述代码变更得到的候选注释信息;
56.注释信息确定单元,用于基于用户对候选注释信息的选择,确定生成的注释信息。
57.可选地,所述候选注释信息显示单元进一步用于:按照所述候选注释信息与所述代码变更的关联度,排序显示所述候选注释信息。
58.根据本公开的一方面,提供了一种计算机设备,包括:存储器,用于存储计算机可执行代码;处理器,用于执行所述计算机可执行代码,以实现如上所述的为代码变更生成注释信息的方法。
59.根据本公开的一方面,提供了一种计算机可读介质,包括计算机可执行代码,所述计算机可执行代码被处理器执行时实现根据如上所述的为代码变更生成注释信息的方法。
60.本公开实施例同时采用生成模型和检索模型,并从所述生成模型和所述检索模型分别输出的候选注释信息中,确定生成的注释信息,而不是仅根据其中一个模型的输出结果来确定生成的注释信息。如果生成模型生成的某个候选注释信息不准确,或者检索模型生成的某个候选注释信息不准确,在综合甄选时可能不会选择其作为生成的注释信息。通过这样的方式,综合了生成模型和检索模型的优点,避免了单一生成模型生成的语句可读性差、单一检索模型无法用于没有出现过的代码变更的缺点,提高了为代码变更自动化生成注释信息的精度。
附图说明
61.通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
62.图1示出根据本公开的一个实施例的为代码变更生成注释信息的方法所应用的计算机设备的硬件结构;
63.图2a-b示出根据本公开的一个实施例的为代码变更生成注释信息的界面变化图;
64.图3示出根据本公开一个实施例的为代码变更生成注释信息的过程原理图;
65.图4示出根据本公开一个实施例的为代码变更生成注释信息需要的各模型或模块训练过程框图;
66.图5示出根据本公开的一个实施例的为代码变更生成注释信息的方法流程图;
67.图6示出根据本公开的一个实施例的为代码变更生成注释信息的方法流程图;
68.图7示出根据本公开的一个实施例的为代码变更生成注释信息的装置的框图;
69.图8示出根据本公开的一个实施例的为代码变更生成注释信息的装置的框图。
具体实施方式
70.以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
71.根据本公开的一个实施例的为代码变更生成注释信息的方法可以由图1的计算机
设备800实现。下面参照图1来描述根据本公开实施例的计算机设备800。图1显示的计算机设备800仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。它可以是通用计算设备,也可以是专用于为代码变更生成注释信息的专用设备。它可以表现为桌面电脑、笔记本电脑、移动设备、个人数字助理(pda)等形式,也可以是一条服务器。它还可以是多台终端设备或多台服务器设备的集群,如云平台上的多台设备的集合。
72.图1示出了计算机设备800是单台通用计算设备的情形。计算机设备800的组件可以包括但不限于:上述至少一个处理单元810、上述至少一个存储单元820、连接不同系统组件(包括存储单元820和处理单元810)的总线830。
73.所述存储单元存储有程序代码,所述程序代码可以被所述处理单元810执行,使得所述处理单元810执行程序中的各个步骤。
74.存储单元820可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)8201和/或高速缓存存储单元8202,还可以进一步包括只读存储单元(rom)8203。
75.存储单元820还可以包括具有一组(至少一个)程序模块的程序/实用工具8204,其中一个程序模型是集成开发环境(ide)组件8205。集成开发环境组件8205是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具,它是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。本公开实施例的为代码变更生成注释信息是代码开发中的一项工作。在代码开发的代码更新迭代过程中,开发者被要求为每一次变更提交注释信息,来记录说明变更意图。协同开发者可以通过简单浏览这些提交信息了解到当前项目进展和代码变更情况,而不是耗费大量精力直接阅读源码。本公开实施例将自动生成注释信息的功能集成在ide组件8205中,当ide组件8205被处理单元810调用执行时,达到无需人工生成注释信息的目的。
76.git客户端8206是ide组件8205中的一个组件,它是一种分布式版本控制系统,用以记录软件开发过程中的代码变更。在用户开发软件时,如果变更代码,git客户端8206会自动识别出并记录。现有技术的git客户端8206能自动识别变更但不生成注释信息。本公开的一个实施例中,可以将为代码变更生成注释信息的功能集成在git客户端8206中,使得git客户端8206不但能够自动识别代码变更,还能生成注释信息。在本公开的一个实施例中,可以将为代码变更生成注释信息的功能作为ide组件8205的一部分,集成在ide组件8205中的非git客户端8206的部分。
77.总线830可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
78.计算机设备800也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该计算机设备800交互的设备通信,和/或与使得该计算机设备800能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口850进行。并且,计算机设备800还可以通过网络适配器860与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器860通过总线830与计算机设备800的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备800使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带
驱动器以及数据备份存储系统等。
79.图2a-b示出根据本公开的一个实施例的为代码变更生成注释信息的界面变化图,其示出了计算机设备800执行本公开实施例的为代码变更生成注释信息的方法时其显示器上的界面变化。
80.图2a的界面并列示出了原代码框199和变更后代码框198。原代码框199中显示原代码。变更后代码框198中显示变更后代码。图1的git客户端8206会自动识别变更后代码与原代码的区别,即代码变更197。如图2a所示,代码变更197包括代码行删除和代码行增加。图2a中,代码行删除用虚线框表示,代码行增加用实线框表示。
81.根据本公开实施例,计算机设备800(具体是git客户端8206或者集成在ide组件8205中的非git客户端8206的部分)会根据识别的代码变更产生候选注释信息196,让用户选择,如图2a所示。候选注释信息呈现在候选注释信息框195中。在图2a中,用户选择了第二个候选注释信息,进行提交。这样,提交的注释信息就是第二个候选注释信息。
82.在图2b中,在注释信息框194中,显示提交的第二个候选注释信息,作为最终的注释信息106。
83.在软件代码开发中,代码托管系统为用户提供版本控制服务。在软件更新迭代过程中,开发者被要求为每一次变更提交注释信息,来记录说明变更意图。协同开发者可以浏览提交的注释信息了解开发进展,而不是耗费大量精力直接阅读源码。目前,注释信息主要通过人工填写,浪费开发用户大量时间。行业内还没有自动化地生成注释信息的产品。
84.学术上提出过生成模型、检索模型,来自动化生成注释信息,但它们尚未被应用于生产,原因是尚未达到实践上要求的精度。
85.生成模型是一种神经网络模型,如神经网络机器翻译(nmt)。它将代码变更表示成一个序列,将注释信息看成另一个序列。因此,生成模型就变成了从一个序列翻译成另一个序列的模型。它采用大量代码变更样本进行训练,每个代码变更样本具有对应的注释信息标签。将代码变更样本输入神经网络模型,由神经网络模型输出判定的注释信息,与对应的注释信息标签进行比较。如果所有代码变更样本中判定的注释信息与注释信息标签一致的比率超过预设比率,则认为神经网络模型训练成功。如果未超过预设比率,调整该神经网络模型,直到所有代码变更样本中判定的注释信息与注释信息标签一致的比率超过预设比率。该模型训练成功后,将代码变更输入训练好的生成模型,该生成模型就能够得到注释信息。它的缺点是,生成模型将更倾向于输出高频词。并且,直接生成的语句可读性较低,可能不是完整的句子或语句不通。此外,常见的生成模型以扁平的词序列作为输入,忽略了代码片段本身语法语义结构,导致生成出的意图准确性较低。
86.检索模型是一种通过检索出历史上相似代码变更片段对应的注释信息,作为当前提交的注释信息的模型。它需要大量的历史上的代码变更与注释信息组成的信息对作为支持。另一方面,它需要比较准确的代码变更相似度比较方法。借助于该比较方法,找到历史上的代码变更中与当前代码变更相似度最大的代码变更,然后查找该代码变更与注释信息组成的信息对,得到注释信息。由于检索模型基于代码变更相似度进行查找,主要依赖当前代码变更和历史上代码变更的词重合度,忽略了代码本身的上下文,有可能导致完全不相关的结果。此外,对于没有出现过的代码变更,无法生成准确的注释信息。
87.由于以上原因,生成模型和检索模型各有其优缺点,精度都不足以应用到实际生
产。因此,需要一种进一步提高精度以致能够用于实际代码开发的自动化注释信息生成方法。
88.根据本公开的一个实施例,提供了一种为代码变更生成注释信息的方法。该方法由计算机设备800中git客户端8206或者集成在ide组件8205中的非git客户端8206的部分执行。如图5所示,该方法包括:
89.步骤210、获取代码变更;
90.步骤220、将所述代码变更分别输入生成模型和检索模型,由所述生成模型和检索模型分别输出候选注释信息;
91.步骤230、从所述生成模型和所述检索模型分别输出的候选注释信息中,确定生成的注释信息。
92.下面对这些步骤进行详细描述。
93.在步骤210中,获取代码变更。
94.如图2a所示,当用户在计算机设备的界面上更改编写的代码时,git客户端8206会自动识别出并记录代码变更197。
95.在图3示出的本公开实施例总体原理图中,从开发代码107中由上述git客户端8206自动获取代码变更101并将获取的代码变更发送到生成模型102和检索模型103进行并行处理。
96.在步骤220中,将所述代码变更分别输入生成模型和检索模型,由所述生成模型和检索模型分别输出候选注释信息。
97.如上所述,生成模型和检索模型是根据代码变更产生注释信息的两种模型。在现有技术中,二者是单独使用的。将代码变更输入生成模型,由生成模型输出概率最高的注释信息,或者将代码变更输入检索模型,由检索模型输出概率最高的注释信息。由于生成模型具有生成的语句可读性较低、可能不是完整的句子或语句不通的缺点,检索模型具有忽略了代码本身的上下文,且对于没有出现过的代码变更,无法生成准确的注释信息的缺点,本公开实施例将两种模型巧妙地融合在一起,让其各自生成一些候选注释信息,例如,各自的概率前n名选中的注释信息作为候选注释信息,然后通过后续的步骤230、240中,比较这些候选注释信息与代码变更的关联度,根据关联度选择最终的注释信息,巧妙地避免了生成模型和检索模型各自的缺点,发挥了各自的长处。
98.候选注释信息是指最终生成的注释信息所选自的注释信息,最终生成的注释信息从候选注释信息中挑出。
99.在一个实施例中,步骤220包括:生成所述代码变更的代码抽象语法树(ast)路径,输入所述生成模型;将所述代码变更输入所述检索模型。
100.ast可以表达代码片段的语义结构,是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。ast路径则是变更的代码部分在整个树状结构中对应的结构。
101.ast路径比源代码更能体现出代码结构化的含义,并能表达更长的源代码。因此,与直接输入代码变更到生成模型相比,生成所述代码变更的ast路径,输入所述生成模型,
有利于表达代码变更的结构化含义,提高生成模型生成结构的准确性,同时能够表达更长的代码变更序列。
102.另外,在一个实施例中,在生成代码变更的ast路径之后,可以将该ast路径标准化,然后,将标准化后的ast路径输入生成模型。标准化的作用是,代码变更的ast路径是树状结构,属于多维结构,将其转为扁平的数据结构有利于提高编码效率,提高单位码信息含量。
103.在一个实施例中,所述生成模型102可以通过下面的方式预先训练。首先,如图4所示,设置含有大量代码变更片段样本的代码变更片段样本集109,其中的每个代码变更片段样本预先对应有一个注释信息(例如通过专家打标签的方式给出)。针对代码变更片段样本集109中的代码变更片段样本,通过预处理模块105生成该代码变更片段样本的ast路径,将生成的ast路径输入生成模型102。另外,预处理模块105对于该代码变更片段样本对应的注释信息,可以进行截短处理,例如只保留注释信息的第一句,提供给生成模型102。注释信息的第一句或前面的若干句,基本上涵盖了注释信息的大部分含义,因此,只要将注释信息的第一句或前面的若干句发送给生成模型102就具有足够的区分度,达到了以尽量少的信息达到较佳的模型训练效果的目的,提高模型训练效率。生成模型102输出注释信息,将所述生成模型102输出的注释信息与预处理模块108发送的该代码变更片段样本预先对应的注释信息比较。如果代码变更片段样本集中所述注释信息一致的比率大于预定比率,则所述生成模型训练成功。如果不大于,则调整生成模型内部参数,直到代码变更片段样本集中所述注释信息一致的比率大于预定比率为止。
104.在一个实施例中,检索模型103包括代码变更与注释信息对应关系库和代码变更比较子模型(未示)。代码变更与注释信息对应关系库包括事先设置的代码变更与注释信息的对应关系。例如,将历史上所有发生代码变更时记录下来的代码变更,与在该代码变更时提交的注释信息,相对应地记录在该代码变更与注释信息对应关系库中。代码变更比较子模型用于确定输入的代码变更与所述注释信息对应关系库中的代码变更的相似度。当从预处理模块105接收到一个代码变更时,代码变更比较子模型计算该代码变更与代码变更与注释信息对应关系库中所有代码变更的相似度,根据所述相似度从注释信息对应关系库中确定注释信息,例如将相似度最大或相似度前n名(n为大于等于2的正整数)的代码变更所对应的注释信息,作为检索模型103输出的候选注释信息。
105.代码变更比较子模型可以预先通过以下方式训练:事先设置包含大量代码变更样本对的集合,其中,每个代码变更样本对包括两个代码变更样本,并事先由专家贴上其相似度的标签。将每个代码变更样本对输入代码变更比较子模型,由代码变更比较子模型输出判定的相似度,与事先贴上的相似度标签比较。如果代码变更样本对的集合中代码变更比较子模型输出的相似度与相似度标签一致的比率超过预定比率,则认为代码变更比较子模型训练成功。如果不超过预定比率,将调整代码变更比较子模型中的参数,直到代码变更样本对的集合中代码变更比较子模型输出的相似度与相似度标签一致的比率超过预定比率。代码变更比较子模型训练成功后,将任意两个代码变更输入该子模型,该子模型就能够输出判定的该两个代码变更的相似度。
106.生成模型102和检索模型103不一定各自生成一个候选注释信息,可能生成多个候选注释信息,例如n个,n为大于等于2的正整数。对于生成模型102来说,其输出注释信息的
过程中,实际上对很多可能的注释信息给出了置信概率,一般选择置信概率最大的一个作为输出结果。本公开实施例中,如果生成模型102生成一个候选注释信息,就是选择了其中置信概率最大的候选注释信息。如果生成模型102生成n个候选注释信息,就是选择了其中置信概率前n名的候选注释信息。如果检索模型生成一个候选注释信息,就说明只选取了代码变更比较子模型判定的相似度最大的那个代码变更,在代码变更与注释信息对应关系库中找到其对应的注释信息。如果检索模型生成n个(n为大于等于2的正整数)候选注释信息,就说明选取了代码变更比较子模型判定的相似度前n名的那个代码变更,在代码变更与注释信息对应关系库中找到其对应的注释信息。
107.在步骤230中,从所述生成模型和所述检索模型分别输出的候选注释信息中,确定生成的注释信息。
108.在一个实施例中,步骤230包括:确定所述生成模型和所述检索模型分别输出的候选注释信息与所述代码变更的关联度;根据所述关联度选择候选注释信息,作为生成的注释信息。
109.关联度是候选注释信息与代码变更关联的程度。
110.在一个实施例中,确定所述生成模型和所述检索模型分别输出的候选注释信息与所述代码变更的关联度是由关联度模型实现的,其中,所述关联度模型通过以下方式预先生成:预先设置由大量代码变更与注释信息样本对构成的代码变更与注释信息样本对集合,由专家事先为该集合中的每个大量代码变更与注释信息样本对贴上关联度标签。针对代码变更与注释信息样本对集合中的代码变更与注释信息样本对,将该代码变更与注释信息样本对输入关联度模型,由所述关联度模型输出该代码变更与注释信息样本对的关联度,与其关联度标签比较,如果输出的关联度与关联度标签一致的比率大于预定比率,则所述关联度模型训练成功。如果输出的关联度与关联度标签一致的比率不大于预定比率,则调整关联度模型中的参数,直到输出的关联度与关联度标签一致的比率大于预定比率。
111.在一个实施例中,所述关联度模型是卷积神经网络(cnn),它是一种挖掘高层次抽象表征的深度学习模型。关联度模型采用cnn,采用cnn评估来自生成模型102和检索模型103输出的候选信息和代码变更的关联度,根据需要输出给候选注释信息供选择,从而提升注释信息生成的精确度。
112.在一个实施例中,可以先将所述生成模型输出的候选注释信息和所述检索模型输出的候选注释信息按照词在文档中的出现频率和在语料库中出现的频率的比(tf-idf,term frequency-inverse document frequency)进行过滤,将过滤结果输入到关联度模型,确定关联度。
113.tf-idf是一种针对关键词的统计分析方法,用于评估一个词对一个文件集或者一个语料库的重要程度。一个词的重要程度跟它在文档中出现的次数成正比,跟它在语料库出现的次数成反比。这种计算方式能有效避免常用词对关键词的影响,提高了关键词与文档之间的相关性。
114.在过滤时,可以计算生成模型输出的候选注释信息和检索模型输出的候选注释信息中各个词在文档中的出现频率、以及在语料库中出现的频率,并将两个频率相除,将相除的结果小于预定比率的词滤除,将过滤结果输入到关联度模型。由于tf-idf剔除了常用词对关键词的影响,提高了生成的注释信息的精确度。
115.在训练关联度模型时,也可以针对代码变更与注释信息样本对集合中的代码变更与注释信息样本对,将该代码变更与注释信息样本对的注释信息样本经tf-idf剔除在文档中的出现频率和在语料库中出现的频率的比低于预定阈值的词,输入关联度模型,由所述关联度模型输出该代码变更与注释信息样本对的关联度,与其关联度标签比较,如果输出的关联度与关联度标签一致的比率大于预定比率,则所述关联度模型训练成功。如果输出的关联度与关联度标签一致的比率不大于预定比率,则调整关联度模型中的参数,直到输出的关联度与关联度标签一致的比率大于预定比率。
116.在一个实施例中,根据所述关联度选择候选注释信息,作为生成的注释信息,包括:将所述关联度最大的候选注释信息,作为生成的注释信息。如果所述生成模型102输出n个候选注释信息,检索模型103输出n个候选注释信息,其中n为大于等于2的正整数,可以计算2n个候选注释信息各自与代码变更的关联度,将其中最大的一个作为生成的注释信息。
117.在另一个实施例中,根据所述关联度选择候选注释信息,作为生成的注释信息,包括:将所述候选注释信息按照关联度排序显示,并将用户选择的候选注释信息,作为生成的注释信息。如果所述生成模型102输出n个候选注释信息,检索模型103输出n个候选注释信息,其中n为大于等于2的正整数,可以计算2n个候选注释信息各自与代码变更的关联度,按照关联度从高到低的顺序显示这2n个候选注释信息,如图2a所示,并将用户选择的候选注释信息,作为生成的注释信息,如图2b所示。图3中示出了对生成模型102生成的候选注释信息和检索模型103生成的候选注释信息排序的模块104。
118.在一个实施例中,如果用户对显示出的候选注释信息都不满意,可以输入自己希望的候选注释信息的开头部分,如第一个词或第一个词的首字母,让生成模型102和检索模型103重新按照该开头部分生成符合该开头部分的候选注释信息。即,在候选注释信息生成中,融入前置人工输入105作为排序前置条件,达成输入信息自动补全的效果,提升结果可用性。用户没有前置人工输入105时,直接将结果列表输出给用户选择。当用户有前置人工输入105时,将用户输入作为候选注释信息的开头部分重新让生成模型102和检索模型103生成候选注释信息,重新评估各候选注释信息与代码变更的关联度,按照关联度将候选注释信息排序104,让用户选择,以生成最后的注释信息106。
119.在该实施例中,计算机设备800接收用户输入的注释信息的第一部分。生成模型102和检索模型103按照所述代码变更,重新输出以所述第一部分开头的候选注释信息。例如,用户希望的注释信息第一个词是“插入”。这时,生成模型102会在以“插入”开头的那些注释信息中寻找置信概率最大的若干候选注释信息重新输出给关联度模型。关联度模型会确定所述生成模型重新输出的候选注释信息和所述检索模型重新输出的候选注释信息各自与所述代码变更的关联度,并根据所述关联度选择重新输出的候选注释信息(例如选择关联度最大的候选注释信息或将候选注释信息按照关联度从高到低排序,让用户选择),作为生成的注释信息。
120.该实施例中,在进行候选注释信息推荐的基础上,增加了提交注释补全的能力。可以在数据样本比较少的情况下不采用补全,在数据样本足够多的情况下考虑补全,优化补全效果,进一步提升结果可用性。
121.本公开实施例同时采用生成模型和检索模型融合排序候选注释信息,可以优化生成模型结果可读性较低以及检索模型无法处理新变更的问题。同时,通过采用ast路径作为
输入,可以解决传统生成模型丢失代码结构化含义的问题,并能表达更长的代码变更序列。
122.根据本公开的另一个实施例,如图6所示,还提供了一种为代码变更生成注释信息的方法,包括:
123.步骤310、显示变更前代码和变更后代码;
124.步骤320、基于所述变更前代码和变更后代码,确定并显示代码变更;
125.步骤330、显示由生成模型和检索模型分别针对所述代码变更得到的候选注释信息;
126.步骤340、基于用户对候选注释信息的选择,确定生成的注释信息。
127.在步骤310中,用户在需要变更代码时,在界面上显示的变更前代码的基础上进行修改。如图2a所示,git客户端8206会自动记录变更后代码,在变更前代码框199中显示变更前代码,在变更后代码框198中显示变更后代码。
128.在步骤320中,如图2a所示,git客户端8206会自动识别变更后代码与原代码的区别,即代码变更197,并显示代码变更197。代码变更197包括代码行删除和代码行增加。图2a中,代码行删除用虚线框表示,代码行增加用实线框表示。
129.在步骤330中,类似于步骤220,由生成模型和检索模型分别针对所述代码变更197得到候选注释信息196,并显示出来,如图2a所示。
130.在步骤340中,用户通过勾选显示的候选注释信息196旁边的勾选框,选择最终生成的注释信息106。最后生成的注释信息106如图2b所示。
131.在一个实施例中,步骤330包括:按照所述候选注释信息与所述代码变更的关联度,排序显示所述候选注释信息。确定关联度的过程已经在结合图5的描述中详细讨论,故不赘述。
132.步骤310-340只是从界面的角度描述,其实现细节在图5的步骤210-230中已经详细描述,为节约篇幅,不再赘述。
133.本公开的商业价值
134.本公开实施例通过采用排序来同时运用生成模型102和检索模型103,将两种方法的优势结合在一起,准确度可以得到很大提升。实验证明,其相比于现有技术,准确度提升30.72%,具有广阔的市场前景。
135.目前注释信息自动化生成尚处于学术阶段,目前其结果距离真实场景使用还有一定偏差,本公开实施例通过融合考虑生成模型102和检索模型103,并可以以用户输入作为前置条件,将学习任务变成提交信息补全,可以进一步提升模型可用性和准确度,具有很好的商业前景。
136.如图7所示,根据本公开的一个实施例,提供了一种为代码变更生成注释信息的装置,包括:
137.代码变更获取单元610,用于获取代码变更;
138.候选注释信息生成单元620,用于将所述代码变更分别输入生成模型和检索模型,由所述生成模型和检索模型分别输出候选注释信息;
139.注释信息确定单元630,用于从所述生成模型和所述检索模型分别输出的候选注释信息中,确定生成的注释信息。
140.可选地,注释信息确定单元630进一步用于:确定所述生成模型和所述检索模型分
别输出的候选注释信息与所述代码变更的关联度;根据所述关联度选择候选注释信息,作为生成的注释信息。
141.可选地,所述候选注释信息生成单元620进一步用于生成所述代码变更的代码抽象语法树ast路径,输入所述生成模型,并将所述代码变更输入所述检索模型。
142.可选地,所述生成模型通过以下方式预先训练:针对代码变更片段样本集中的代码变更片段样本,生成该代码变更片段样本的ast路径,将生成的ast路径输入生成模型,由所述生成模型输出注释信息,将所述生成模型输出的注释信息与该代码变更片段样本预先对应的注释信息比较,如果代码变更片段样本集中所述注释信息一致的比率大于预定比率,则所述生成模型训练成功。
143.可选地,所述检索模型包括代码变更与注释信息对应关系库和代码变更比较子模型,所述代码变更与注释信息对应关系库包括事先设置的代码变更与注释信息的对应关系,所述代码变更比较子模型确定输入的代码变更与所述注释信息对应关系库中的代码变更的相似度,根据所述相似度从注释信息对应关系库中确定注释信息,作为所述检索模型输出的候选注释信息。
144.可选地,所述关联度确定单元630由关联度模型实现,其中,所述关联度模型通过以下方式预先生成:针对代码变更与注释信息样本对集合中的代码变更与注释信息样本对,将该代码变更与注释信息样本对输入关联度模型,由所述关联度模型输出该代码变更与注释信息样本对的关联度,与该该代码变更与注释信息样本对的预定的关联度比较,如果所述代码变更与注释信息样本对集合中关联度一致的比率大于预定比率,则所述关联度模型训练成功。
145.可选地,所述关联度模型是卷积神经网络。
146.可选地,所述注释信息确定单元630进一步用于:将所述关联度最大的候选注释信息,作为生成的注释信息。
147.可选地,所述注释信息确定单元630进一步用于:将所述候选注释信息按照关联度排序显示,并将用户选择的候选注释信息,作为生成的注释信息。
148.可选地,所述注释信息确定单元630进一步用于:
149.接收用户输入的注释信息的第一部分;
150.使生成模型和检索模型按照所述代码变更,重新输出以所述第一部分开头的候选注释信息;
151.确定所述生成模型重新输出的候选注释信息和所述检索模型重新输出的候选注释信息与所述代码变更的关联度;
152.根据所述关联度选择重新输出的候选注释信息,作为生成的注释信息。
153.图7所示的为代码变更生成注释信息的装置的各单元的实现细节与图5的方法实施例中相同,因此,为节约篇幅,不再赘述。
154.如图8所示,根据本公开的一个实施例,提供了一种为代码变更生成注释信息的装置,包括:
155.变更前后代码显示单元310,用于显示变更前代码和变更后代码;
156.代码变更显示单元320,用于基于所述变更前代码和变更后代码,确定并显示代码变更;
157.候选注释信息显示单元330,用于显示由生成模型和检索模型分别针对所述代码变更得到的候选注释信息;
158.注释信息确定单元340,用于基于用户对候选注释信息的选择,确定生成的注释信息。
159.可选地,所述候选注释信息显示单元330进一步用于:按照所述候选注释信息与所述代码变更的关联度,排序显示所述候选注释信息。
160.图8所示的为代码变更生成注释信息的装置的各单元的实现细节与图6的方法实施例中相同,因此,为节约篇幅,不再赘述。
161.需要领会,以上所述仅为本公开的优选实施例,并不用于限制本发明的范围,对于本领域技术人员而言,本说明书的实施例存在许多变型。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
162.应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
163.应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
164.应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
165.还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献