本公開涉及人工智能,尤其涉及一種類級代碼摘要的生成方法和裝置。
背景技術(shù):
1、代碼摘要是源代碼的自然語言解釋。高質(zhì)量的代碼摘要有助于提高軟件開發(fā)人員理解和維護程序的效率、更好地復(fù)用代碼。代碼摘要生成是指自動理解程序源代碼為其生成自然語言解釋,是軟件工程中常見的代碼理解型任務(wù)。傳統(tǒng)的代碼摘要生成方法主要基于規(guī)則和模式匹配,其適應(yīng)性和準確性有限。而且,現(xiàn)有的大多數(shù)代碼摘要生成技術(shù)主要集中在方法(method)或函數(shù)(function)級代碼摘要的自動生成,針對類(class)級代碼摘要生成的卻很少。
2、類作為面向?qū)ο蟪绦虻幕窘M成單元,抽象程度更高,往往封裝了重要的功能和邏輯,將函數(shù)或方法級的摘要生成方法直接應(yīng)用于類級代碼,生成效果很差。但在實際的軟件開發(fā)過程中,類代碼的理解和復(fù)用經(jīng)常遇到,類代碼摘要生成技術(shù)的突破顯得更為迫切。
3、背景技術(shù)部分的內(nèi)容僅僅是發(fā)明人個人所知曉的信息,并不代表上述信息在本公開申請日之前已經(jīng)進入公共領(lǐng)域,也不代表其可以成為本公開的現(xiàn)有技術(shù)。
技術(shù)實現(xiàn)思路
1、本公開提供一種類級代碼摘要的生成方法和裝置,用以解決上述技術(shù)問題。
2、第一方面,本公開提供一種類級代碼摘要的生成方法,包括:
3、獲得類級源代碼文件;
4、從所述類級源代碼文件中,分別獲得類級源代碼序列、以及每個成員方法的方法代碼片段;
5、分別生成所述類級源代碼序列的表示向量、以及所述方法代碼片段的摘要的表示向量;
6、將所述表示向量和所述表示向量輸入至預(yù)先訓(xùn)練好的類級代碼摘要的生成模型,預(yù)測得到與所述類級源代碼文件對應(yīng)的類級代碼摘要;
7、其中,所述生成模型的基礎(chǔ)模型為transformer模型,所述生成模型包括共享編碼器和聯(lián)合解碼器,所述共享編碼器通過兩階段共享參數(shù)的方式學(xué)習(xí)編碼能力而訓(xùn)練得到,所述聯(lián)合解碼器通過將所述共享編碼器的兩階段的輸出共同作為輸入學(xué)習(xí)解碼能力而訓(xùn)練得到,所述兩階段包括學(xué)習(xí)得到基于所述表示向量編碼得到類級源代碼特征向量的編碼能力的階段、以及基于所述表示向量編碼得到方法摘要特征向量的編碼能力的階段。
8、在一些實施例中,所述分別生成所述類級源代碼序列的表示向量、以及所述方法代碼片段的摘要的表示向量,包括:
9、基于類級代碼文本精簡算法對所述類級源代碼序列進行精簡,并對精簡后的類級源代碼序列進行詞嵌入,生成所述表示向量;
10、基于codet5生成所述方法代碼片段的摘要,并采用詞嵌入生成所述表示向量。
11、在一些實施例中,所述共享編碼器包括多個相同的編碼器層,且所述多個相同的編碼器層疊加;每個編碼器層包括多頭注意力、殘差連接、前饋神經(jīng)網(wǎng)絡(luò)。
12、在一些實施例中,第一層編碼器中的多頭注意力的輸入序列包括所述表示向量和表示向量;
13、所述第一層編碼器中的多頭注意力中的每個頭以不同的權(quán)重關(guān)注所述輸入序列的不同位置,并通過拼接和線性變換,將所述每個頭對應(yīng)的輸出融合得到自注意力輸出;
14、所述第一層編碼器中的殘差連接將所述輸入序列與所述自注意力輸出相加,并進行歸一化處理;
15、前饋神經(jīng)網(wǎng)絡(luò)的輸入為殘差連接的輸出,前饋神經(jīng)網(wǎng)絡(luò)包括兩個線性變換和一個非線性激活函數(shù),最后一層編碼器中前饋神經(jīng)網(wǎng)絡(luò)的輸出包括所述特征向量和所述特征向量。
16、在一些實施例中,所述生成模型是基于類級源代碼文本樣本對所述transformer模型進行訓(xùn)練得到的;
17、所述兩階段共享參數(shù)的學(xué)習(xí)方式包括:
18、第一階段:基于所述類級源代碼文本樣本的類級源代碼序列的表示向量,更新所述transformer模型中共享編碼器的參數(shù);
19、第二階段:基于所述類級源代碼文本樣本的方法代碼片段的摘要的表示向量,更新所述第一階段所述transformer模型中共享編碼器更新后的參數(shù)。
20、在一些實施例中,所述聯(lián)合解碼器包括多個相同的解碼器層,且所述多個相同的解碼器層堆疊;每個解碼器層依次包括:類摘要自注意力層、源代碼注意力層、方法摘要注意力層和前饋神經(jīng)網(wǎng)絡(luò)層;
21、其中,所述類摘要自注意力層用于為生成所述類級代碼摘要提供上下文信息,所述源代碼注意力層用于融合所述特征向量,所述方法摘要注意力層用于融合所述特征向量。
22、在一些實施例中,第一層解碼器中類摘要自注意力層的輸入包括所述類級源代碼文件的類摘要表示向量;
23、所述第一層解碼器中源代碼注意力層的輸入包括所述特征向量和所述第一層解碼器中類摘要自注意力層的輸出;
24、所述第一層解碼器中方法摘要注意力層的輸入包括所述特征向量和所述第一層解碼器中源代碼注意力層的輸出;
25、最后一層編碼器中前饋神經(jīng)網(wǎng)絡(luò)層的輸出包括所述類級代碼摘要。
26、第二方面,本公開提供一種類級代碼摘要的生成裝置,包括:
27、獲取單元,用于獲得類級源代碼文件;
28、所述獲取單元還用于,從所述類級源代碼文件中,分別獲得類級源代碼序列、以及每個成員方法的方法代碼片段;
29、生成單元,用于分別生成所述類級源代碼序列的表示向量、以及所述方法代碼片段的摘要的表示向量;
30、預(yù)測單元,用于將所述表示向量和所述表示向量輸入至預(yù)先訓(xùn)練好的類級代碼摘要的生成模型,預(yù)測得到與所述類級源代碼文件對應(yīng)的類級代碼摘要;
31、其中,所述生成模型的基礎(chǔ)模型為transformer模型,所述生成模型包括共享編碼器和聯(lián)合解碼器,所述共享編碼器通過兩階段共享參數(shù)的方式學(xué)習(xí)編碼能力而訓(xùn)練得到,所述聯(lián)合解碼器通過將所述共享編碼器的兩階段的輸出共同作為輸入學(xué)習(xí)解碼能力而訓(xùn)練得到,所述兩階段包括學(xué)習(xí)得到基于所述表示向量編碼得到類級源代碼特征向量的編碼能力的階段、以及基于所述表示向量編碼得到方法摘要特征向量的編碼能力的階段。
32、在一些實施例中,所述生成單元用于,基于類級代碼文本精簡算法對所述類級源代碼序列進行精簡,并對精簡后的類級源代碼序列進行詞嵌入,生成所述表示向量,并基于codet5生成所述方法代碼片段的摘要,并采用詞嵌入生成所述表示向量。
33、在一些實施例中,所述共享編碼器包括多個相同的編碼器層,且所述多個相同的編碼器層疊加;每個編碼器層包括多頭注意力、殘差連接、前饋神經(jīng)網(wǎng)絡(luò)。
34、在一些實施例中,第一層編碼器中的多頭注意力的輸入序列包括所述表示向量和表示向量;
35、所述第一層編碼器中的多頭注意力中的每個頭以不同的權(quán)重關(guān)注所述輸入序列的不同位置,并通過拼接和線性變換,將所述每個頭對應(yīng)的輸出融合得到自注意力輸出;
36、所述第一層編碼器中的殘差連接將所述輸入序列與所述自注意力輸出相加,并進行歸一化處理;
37、前饋神經(jīng)網(wǎng)絡(luò)的輸入為殘差連接的輸出,前饋神經(jīng)網(wǎng)絡(luò)包括兩個線性變換和一個非線性激活函數(shù),最后一層編碼器中前饋神經(jīng)網(wǎng)絡(luò)的輸出包括所述特征向量和所述特征向量。
38、在一些實施例中,所述生成模型是基于類級源代碼文本樣本對所述transformer模型進行訓(xùn)練得到的;
39、所述兩階段共享參數(shù)的學(xué)習(xí)方式包括:
40、第一階段:基于所述類級源代碼文本樣本的類級源代碼序列的表示向量,更新所述transformer模型中共享編碼器的參數(shù);
41、第二階段:基于所述類級源代碼文本樣本的方法代碼片段的摘要的表示向量,更新所述第一階段所述transformer模型中共享編碼器更新后的參數(shù)。
42、在一些實施例中,所述聯(lián)合解碼器包括多個相同的解碼器層,且所述多個相同的解碼器層堆疊;每個解碼器層依次包括:類摘要自注意力層、源代碼注意力層、方法摘要注意力層和前饋神經(jīng)網(wǎng)絡(luò)層;
43、其中,所述類摘要自注意力層用于為生成所述類級代碼摘要提供上下文信息,所述源代碼注意力層用于融合所述特征向量,所述方法摘要注意力層用于融合所述特征向量。
44、在一些實施例中,第一層解碼器中類摘要自注意力層的輸入包括所述類級源代碼文件的類摘要表示向量;
45、所述第一層解碼器中源代碼注意力層的輸入包括所述特征向量和所述第一層解碼器中類摘要自注意力層的輸出;
46、所述第一層解碼器中方法摘要注意力層的輸入包括所述特征向量和所述第一層解碼器中源代碼注意力層的輸出;
47、最后一層編碼器中前饋神經(jīng)網(wǎng)絡(luò)層的輸出包括所述類級代碼摘要。
48、第三方面,本公開提供一種處理器可讀存儲介質(zhì),所述處理器可讀存儲介質(zhì)存儲有計算機程序,所述計算機程序用于使所述處理器執(zhí)行如上第一方面所述的方法。
49、第四方面,本公開提供一種計算機程序產(chǎn)品,包括計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如上第一方面所述的方法。
50、本公開提供的類級代碼摘要的生成方法和裝置,包括:獲得類級源代碼文件,從類級源代碼文件中,分別獲得類級源代碼序列、以及每個成員方法的方法代碼片段,分別生成類級源代碼序列的表示向量、以及方法代碼片段的摘要的表示向量,將表示向量和表示向量輸入至預(yù)先訓(xùn)練好的類級代碼摘要的生成模型,預(yù)測得到與類級源代碼文件對應(yīng)的類級代碼摘要,其中,生成模型的基礎(chǔ)模型為transformer模型,生成模型包括共享編碼器和聯(lián)合解碼器,共享編碼器通過兩階段共享參數(shù)的方式學(xué)習(xí)編碼能力而訓(xùn)練得到,聯(lián)合解碼器通過將共享編碼器的兩階段的輸出共同作為輸入學(xué)習(xí)解碼能力而訓(xùn)練得到,兩階段包括學(xué)習(xí)得到基于表示向量編碼得到類級源代碼特征向量的編碼能力的階段、以及基于表示向量編碼得到方法摘要特征向量的編碼能力的階段。
51、也就是說,在本實施例中,生成模型為使用共享參數(shù)的方式分兩階段學(xué)習(xí)得到的。通過生成模型從代碼序列維度和方法摘要維度生成類級代碼摘要生成,不僅在源代碼的語法結(jié)構(gòu)上發(fā)揮出色的表達能力,也能夠充分利用方法摘要提供的語義信息。相對而言,這種兩階段共享參數(shù)的訓(xùn)練學(xué)習(xí)方式有助于提高模型的效率和泛化能力,更好地捕捉代碼和摘要之間的語義和功能,同時減少了模型的參數(shù)數(shù)量,以支持高效高質(zhì)量的類代碼摘要生成。因此,本實施例基于生成模型確定與類級源代碼文件對應(yīng)的類級代碼摘要,可以提高確定出的類級代碼摘要的準確性和可靠性。