本發(fā)明屬于文本生成,具體涉及一種基于語言模型和檢索增強的提交信息生成方法(retrieval-augmented?commit?message?generation?framework,簡稱react框架)及系統(tǒng)。
背景技術(shù):
1、提交信息(commit?message)是在版本控制系統(tǒng)中,用于描述每次代碼更改內(nèi)容的一段簡要文本。它通常用于記錄代碼變更的原因和具體修改的內(nèi)容,幫助開發(fā)者理解代碼歷史、追蹤錯誤、以及協(xié)作開發(fā)。因此,提交信息在軟件開發(fā)和維護過程中扮演著關(guān)鍵角色,可以提高代碼的可讀性和項目的可維護性。一個清晰且信息豐富的提交信息可以使其他開發(fā)者快速了解更改的目的,從而減少溝通成本,提升協(xié)作效率。然而,編寫優(yōu)質(zhì)的提交信息往往耗時且具有主觀性,因而自動化生成提交信息逐漸成為研究關(guān)注的方向。
2、提交信息自動生成(commit?message?generation,cmg)是指利用技術(shù)手段自動生成提交信息,以描述代碼更改的內(nèi)容和目的。隨著版本控制系統(tǒng)在軟件開發(fā)中的廣泛應(yīng)用,提交信息的重要性愈加凸顯。然而,手動編寫高質(zhì)量的提交信息通常耗時費力且具有主觀性,許多開發(fā)者可能不愿花時間去詳細記錄或僅提供簡單、缺乏信息的描述,這可能導(dǎo)致后續(xù)維護和協(xié)作的困難。為解決這一問題,提交信息自動生成技術(shù)應(yīng)運而生。近年來,研究人員提出了許多方法進行提交信息的自動生成,其中包括三大類,基于檢索的生成方法,基于機器學(xué)習(xí)的生成方法以及兩者混合的生成方法。在提交信息生成領(lǐng)域的研究中,buse等人提出了一種基于規(guī)則的程序更改自動文檔生成方法。shen等人提出了一種源代碼變更中what和why信息的自動總結(jié)方法。linares-vásquez等人開發(fā)了一個名為changescribe的自動生成提交消息的工具。在基于檢索的方法中,liu等人提出了nngen,利用信息檢索技術(shù)從相似代碼差異中推薦提交消息。hoang等人提出了cc2vec,通過學(xué)習(xí)代碼差異的表示來生成提交消息。在基于學(xué)習(xí)的方法中,jiang等人首次提出了commitgen,使用循環(huán)神經(jīng)網(wǎng)絡(luò)的編碼器-解碼器模型進行提交消息生成。xu等人提出了codisum,使用多層雙向門控循環(huán)單元作為編碼器來更好地學(xué)習(xí)代碼更改的表示。liu等人提出了ptrgncmsg,基于改進的序列到序列模型和指針生成網(wǎng)絡(luò)。dong等人提出了fira,首次使用細粒度圖表示代碼差異。在混合方法中,liu等人提出了atom,結(jié)合抽象語法樹和混合排序進行提交消息生成。wang等人提出了corec,利用信息檢索和神經(jīng)機器翻譯技術(shù)解決低頻詞和曝光偏差問題。shi等人提出了race,將檢索和生成技術(shù)以更集成的方式結(jié)合起來。
3、在預(yù)訓(xùn)練語言模型方面,ahmad等人提出了plbart用于程序理解和生成的統(tǒng)一預(yù)訓(xùn)練模型。feng等人提出了codebert,這是一個面向編程和自然語言的預(yù)訓(xùn)練模型。guo等人提出了unixcoder,用于代碼表示的統(tǒng)一跨模態(tài)預(yù)訓(xùn)練。wang等人提出了codet5,這是一個具有標(biāo)識符感知預(yù)訓(xùn)練目標(biāo)的統(tǒng)一預(yù)訓(xùn)練編碼器-解碼器模型。
4、然而現(xiàn)有技術(shù)的方法至少存在如下技術(shù)問題:基于規(guī)則的方法如buse等人提出的自動文檔生成方法,以及l(fā)inares-vásquez等人開發(fā)的changescribe工具,這類方法過于依賴預(yù)定義規(guī)則,生成結(jié)果缺乏靈活性?;跈z索的方法如liu等人提出的nngen和hoang等人提出的cc2vec,這類方法嚴重依賴已有的提交信息庫,對于新穎的代碼變更難以生成恰當(dāng)?shù)拿枋??;趯W(xué)習(xí)的方法如jiang等人提出的commitgen和xu等人提出的codisum,雖然引入了深度學(xué)習(xí)技術(shù),但由于從頭訓(xùn)練模型,未能充分利用預(yù)訓(xùn)練模型中蘊含的豐富知識,生成質(zhì)量仍有提升空間。此外,現(xiàn)有方法往往將提交信息生成視為單一的序列到序列轉(zhuǎn)換任務(wù),忽視了檢索增強對生成質(zhì)量的提升作用。
5、因此,針對上述問題設(shè)計一種基于語言模型和檢索增強的提交信息生成方法及系統(tǒng)很有必要。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的是為了解決現(xiàn)有提交信息生成方法中普遍存在的生成質(zhì)量不足、可解釋性差等問題,提供了一種基于語言模型及檢索增強的提交信息自動生成方法及系統(tǒng),通過混合檢索技術(shù)從大規(guī)模源數(shù)據(jù)庫中獲取最相關(guān)的代碼差異-提交信息對,并與待生成提交信息的代碼差異組合成一個序列進行增強,結(jié)合預(yù)訓(xùn)練語言模型或大型語言模型構(gòu)建生成器生成提交信息,顯著提升了提交信息的生成質(zhì)量。
2、根據(jù)本說明書的一方面,提供一種基于語言模型和檢索增強的提交信息生成方法,包括:
3、根據(jù)獲得的待生成提交信息的代碼差異在源數(shù)據(jù)庫中進行檢索,得到與待生成提交信息的代碼差異最相關(guān)的代碼差異-提交信息對;
4、基于所述最相關(guān)的代碼差異-提交信息對,與待生成提交信息的代碼差異組合成一個序列,采用特定標(biāo)記或提示模板對組合序列進行增強;
5、將增強后的序列輸入基于語言模型構(gòu)建的生成器,生成提交信息。
6、進一步地,所述得到與待生成提交信息的最相關(guān)的代碼差異-提交信息對,還包括:
7、采用bm25(best?match25,最佳匹配25)計算代碼差異的文本相關(guān)性,采用深度編碼器計算代碼差異的語義相似度;
8、將bm25和深度編碼器的計算結(jié)果進行加權(quán)融合,選取融合分數(shù)最高的差異-提交信息對作為最相關(guān)的代碼差異-提交信息對;所述加權(quán)融合的公式為:
9、
10、其中,為bm25得分權(quán)重,為編碼器相似度權(quán)重,為余弦相似度。
11、進一步地,所述生成器的構(gòu)建,包括:
12、基于預(yù)訓(xùn)練代碼語言模型或通用大型語言模型進行訓(xùn)練,得到訓(xùn)練好的生成器。
13、進一步地,所述生成器的訓(xùn)練,還包括:
14、對預(yù)訓(xùn)練代碼語言模型或通用大型語言模型進行微調(diào),采用優(yōu)化器對語言模型的參數(shù)進行優(yōu)化。
15、進一步地,所述方法還包括:采用自回歸生成方法生成提交信息。
16、根據(jù)本說明書的一方面,提供一種基于語言模型和檢索增強方法的提交信息生成系統(tǒng),包括:
17、檢索模塊,用于根據(jù)獲得的待生成提交信息的代碼差異在源數(shù)據(jù)庫中進行檢索,得到與待生成提交信息的代碼差異最相關(guān)的代碼差異-提交信息對;
18、增強模塊,用于基于所述最相關(guān)的代碼差異-提交信息對,與待生成提交信息的代碼差異組合成一個序列,采用特定標(biāo)記或提示模板對組合序列進行增強;
19、生成模塊,用于將增強后的序列輸入基于語言模型構(gòu)建的生成器,生成提交信息。
20、根據(jù)本說明書的一方面,提供一種電子設(shè)備,包括存儲器和處理器,所述存儲器存儲有計算機程序,其特征在于,所述處理器執(zhí)行所述計算機程序時實現(xiàn)所述的基于語言模型和檢索增強方法的提交信息生成方法的步驟。
21、根據(jù)本說明書的一方面,提供一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,其特征在于,所述計算機程序被處理器執(zhí)行時實現(xiàn)所述的基于語言模型和檢索增強方法的提交信息生成方法的步驟。
22、與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
23、1、本發(fā)明通過混合檢索技術(shù),加強了檢索增強對生成質(zhì)量的提升作用,實驗結(jié)果表明react框架采用的混合檢索方法取得了顯著的提升效果,驗證了檢索增強方法在提交信息生成任務(wù)中的可行性。
24、2、本發(fā)明針對現(xiàn)有提交信息生成方法性能不足的問題,通過結(jié)合預(yù)訓(xùn)練語言模型或大型語言模型的強大生成能力,顯著提升了提交信息生成的準確性和一致性。
25、3、本發(fā)明通過將現(xiàn)有語言模型集成入react框架,使codet5在測試集上的bleu分數(shù)提升了55%,llama3的bleu分數(shù)提升了102%,大幅增強了語言模型在提交信息生成任務(wù)上的表現(xiàn),超越了現(xiàn)有基準方法,具有適用性和通用性。