[發(fā)明專(zhuān)利]基于深度學(xué)習(xí)的Java程序內(nèi)部注釋的生成方法及系統(tǒng)有效
| 申請(qǐng)?zhí)枺?/td> | 202110449761.5 | 申請(qǐng)日: | 2021-04-25 |
| 公開(kāi)(公告)號(hào): | CN113076133B | 公開(kāi)(公告)日: | 2023-09-26 |
| 發(fā)明(設(shè)計(jì))人: | 陳林;汪值;李言輝 | 申請(qǐng)(專(zhuān)利權(quán))人: | 南京大學(xué) |
| 主分類(lèi)號(hào): | G06F8/73 | 分類(lèi)號(hào): | G06F8/73;G06F16/33;G06F40/289 |
| 代理公司: | 南京華鑫君輝專(zhuān)利代理有限公司 32544 | 代理人: | 王方超 |
| 地址: | 210000 江蘇*** | 國(guó)省代碼: | 江蘇;32 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 深度 學(xué)習(xí) java 程序 內(nèi)部 注釋 生成 方法 系統(tǒng) | ||
本發(fā)明公開(kāi)基于深度學(xué)習(xí)的Java程序內(nèi)部注釋的生成方法及系統(tǒng),所述方法包括如下步驟:獲取Stars數(shù)排名靠前的項(xiàng)目,提取出對(duì)應(yīng)的內(nèi)部注釋和方法語(yǔ)句列表;得到:注釋?zhuān)繕?biāo)代碼對(duì);選擇Verb?dobj形式的注釋?zhuān)坏玫胶湍繕?biāo)代碼段相關(guān)聯(lián)的代碼上下文;對(duì)注釋、目標(biāo)代碼以及上下文進(jìn)行預(yù)處理,得到:注釋?zhuān)繕?biāo)代碼,代碼上下文組成的三元組數(shù)據(jù)集;對(duì)構(gòu)建的數(shù)據(jù)集隨機(jī)劃分成訓(xùn)練集、驗(yàn)證集和測(cè)試集,同時(shí)構(gòu)建編碼器解碼器網(wǎng)絡(luò);劃分中的訓(xùn)練集用于模型訓(xùn)練,并且通過(guò)在驗(yàn)證集上進(jìn)行評(píng)估,得到在驗(yàn)證集上效果最好的模型作為目標(biāo)模型;用獲得的目標(biāo)模型對(duì)測(cè)試集中的數(shù)據(jù)進(jìn)行預(yù)測(cè),生成預(yù)測(cè)的注釋。
技術(shù)領(lǐng)域
本發(fā)明涉及一種基于深度學(xué)習(xí)的Java程序內(nèi)部注釋的生成方法及系統(tǒng),屬于互聯(lián)網(wǎng)技術(shù)領(lǐng)域。
背景技術(shù)
在軟件開(kāi)發(fā)和維護(hù)中,開(kāi)發(fā)人員將大約59%的時(shí)間用于程序理解活動(dòng)。源代碼注釋是軟件的重要組成部分,它可以幫助開(kāi)發(fā)人員理解代碼并減少代碼審查的難度。代碼注釋以自然語(yǔ)言描述的形式對(duì)代碼操作或者程序語(yǔ)義進(jìn)行描述。研究表明,帶注釋的代碼比沒(méi)有注釋的代碼更易于理解,并且代碼注釋也被視為評(píng)估代碼質(zhì)量的關(guān)鍵因素。
但是在軟件開(kāi)發(fā)活動(dòng)中,由于時(shí)間壓力和開(kāi)發(fā)過(guò)程中的疏忽,開(kāi)發(fā)人員并不總是有機(jī)會(huì)對(duì)新寫(xiě)的代碼進(jìn)行仔細(xì)注釋或在更改代碼時(shí)更新注釋。在忽略代碼注釋的重要性和其他原因的同時(shí),代碼注釋在代碼更改期間通常會(huì)丟失或變得過(guò)時(shí)不匹配,并且在許多項(xiàng)目中存在已過(guò)時(shí)的注釋。因此,自動(dòng)生成代碼注釋可以幫助開(kāi)發(fā)人員節(jié)省編寫(xiě)注釋和理解其程序的時(shí)間。更多的情況下,開(kāi)發(fā)者往往不會(huì)注釋他們的代碼,大約只有20%的方法中存在內(nèi)部注釋。針對(duì)這些問(wèn)題的一種解決方法是通過(guò)學(xué)習(xí)的代碼特征,自動(dòng)的為這些沒(méi)有注釋的代碼生成對(duì)應(yīng)的描述注釋。隨著今年來(lái)深度學(xué)習(xí)方法的快速發(fā)展,受到神經(jīng)機(jī)器翻譯和序列生成方法的啟發(fā),可以通過(guò)從大規(guī)模的開(kāi)源項(xiàng)目中提取代碼和注釋對(duì),在大量數(shù)據(jù)的訓(xùn)練下優(yōu)化模型性能,最終將代碼輸入到訓(xùn)練好的模型中即可輸出需要的可描述性的注釋信息。
現(xiàn)有的工作主要集中于研究方法摘要注釋?zhuān)⑽搓P(guān)注方法內(nèi)部注釋的自動(dòng)生成,將這些方法遷移到內(nèi)部注釋生成任務(wù)的效果并不明確,并且存在三個(gè)問(wèn)題。首先,生成方法摘要注釋更加容易,因?yàn)榉椒ㄕ呛瘮?shù)Javadoc中使用自然語(yǔ)言描述的第一個(gè)句子,明確地描述了整個(gè)方法的功能。然而相對(duì)于半結(jié)構(gòu)化的Javadoc,Java的方法內(nèi)部注釋卻表達(dá)的語(yǔ)義更加多樣和復(fù)雜,部分注釋和代碼并不是直接相關(guān),生成內(nèi)部注釋的難度相比于生成方法摘要更加困難。其次,在方法摘要注釋生成任務(wù)中,方法摘要有明確的目標(biāo)代碼,也就是整個(gè)方法體,但是識(shí)別內(nèi)部注釋和對(duì)應(yīng)的目標(biāo)代碼并不直接可以確定。第三,無(wú)法直接將摘要注釋生成的方法遷移到內(nèi)部注釋上,因?yàn)橹焕玫膶?duì)應(yīng)的目標(biāo)代碼通常不足以生成內(nèi)部注釋?zhuān)诓煌?xiàng)目中不同注釋對(duì)應(yīng)的目標(biāo)代碼可能是相似的除源代碼片段外還應(yīng)考慮更多信息,例如方法體中的其他代碼。
發(fā)明內(nèi)容
為克服現(xiàn)有技術(shù)存在的缺陷,解決上述技術(shù)問(wèn)題,提出一種基于深度學(xué)習(xí)的Java程序內(nèi)部注釋的生成方法及系統(tǒng)。本發(fā)明的目的在于,為Java程序體內(nèi)的代碼片段自動(dòng)生成內(nèi)部注釋?zhuān)⑶彝ㄟ^(guò)結(jié)合兩種類(lèi)型的信息(目標(biāo)代碼和上下文代碼信息),通過(guò)采用深度學(xué)習(xí)的領(lǐng)域的編碼器解碼器網(wǎng)絡(luò)來(lái)構(gòu)建模型,并且采用預(yù)訓(xùn)練的語(yǔ)言模型CodeBERT來(lái)作為編碼器,從而提高生成注釋的質(zhì)量,輔助開(kāi)發(fā)者進(jìn)行代碼理解和閱讀,提升代碼的可維護(hù)性
本發(fā)明具體采用如下技術(shù)方案:基于深度學(xué)習(xí)的Java程序內(nèi)部注釋的生成方法,包括如下步驟:
步驟SS1:通過(guò)從GitHub中獲取Stars數(shù)排名靠前的項(xiàng)目,然后通過(guò)靜態(tài)分析工具JDT提取Java源碼中的方法信息,然后識(shí)別出對(duì)應(yīng)的方法信息,提取出對(duì)應(yīng)的內(nèi)部注釋和方法語(yǔ)句列表;
步驟SS2:根據(jù)注釋的位置,遍歷方法信息中的語(yǔ)句,通過(guò)位置信息和數(shù)據(jù)流信息得到注釋對(duì)應(yīng)的語(yǔ)句列表,得到:注釋?zhuān)繕?biāo)代碼對(duì);
步驟SS3:根據(jù)注釋的類(lèi)型進(jìn)行過(guò)濾,選擇Verb-dobj形式的注釋?zhuān)?/p>
該專(zhuān)利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專(zhuān)利權(quán)人授權(quán)。該專(zhuān)利全部權(quán)利屬于南京大學(xué),未經(jīng)南京大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專(zhuān)利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110449761.5/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專(zhuān)利網(wǎng)。
- 根據(jù)用戶(hù)學(xué)習(xí)效果動(dòng)態(tài)變化下載學(xué)習(xí)數(shù)據(jù)的系統(tǒng)及方法
- 用于智能個(gè)人化學(xué)習(xí)服務(wù)的方法
- 漸進(jìn)式學(xué)習(xí)管理方法及漸進(jìn)式學(xué)習(xí)系統(tǒng)
- 輔助學(xué)習(xí)的方法及裝置
- 基于人工智能的課程推薦方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 基于強(qiáng)化學(xué)習(xí)的自適應(yīng)移動(dòng)學(xué)習(xí)路徑生成方法
- 一種線(xiàn)上視頻學(xué)習(xí)系統(tǒng)
- 一種基于校園大數(shù)據(jù)的自適應(yīng)學(xué)習(xí)方法、裝置及設(shè)備
- 一種學(xué)習(xí)方案推薦方法、裝置、設(shè)備和存儲(chǔ)介質(zhì)
- 游戲?qū)W習(xí)效果評(píng)測(cè)方法及系統(tǒng)
- 基于支持類(lèi)的標(biāo)識(shí)來(lái)下載Java應(yīng)用的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品
- 啟動(dòng)JAVA應(yīng)用的方法及裝置
- Java虛擬機(jī)的管理方法、監(jiān)控系統(tǒng)和監(jiān)控代理模塊
- 一種運(yùn)行Java程序的方法和裝置
- 一種保護(hù)java程序的方法
- Java卡的Java代碼補(bǔ)丁方法
- 一種基于中間件架構(gòu)下java棧的多線(xiàn)程實(shí)現(xiàn)方法
- 一種支持JAVA卡補(bǔ)丁函數(shù)的智能卡
- 一種改進(jìn)的Java卡初始化方法和Java卡
- JavaEE平臺(tái)構(gòu)建方法、JavaEE平臺(tái)及云端系統(tǒng)





