阅读笔记|Retrieve and Refine: Exemplar-based Neural Comment Generation
原文鏈接: Retrieve and Refine: Exemplar-based Neural Comment Generation
Abstract
代碼注釋生成是軟件自動(dòng)化開發(fā)領(lǐng)域的一項(xiàng)重要任務(wù),它旨在為源代碼自動(dòng)生成一種自然的語言描述。傳統(tǒng)的注釋生成方法使用手工制作的模板或信息檢索(IR)技術(shù)為源代碼生成摘要。近年來,基于神經(jīng)網(wǎng)絡(luò)的方法利用著名的編碼器-解碼器深度學(xué)習(xí)框架,從大規(guī)模的并行代碼語料庫中學(xué)習(xí)評(píng)論生成模式,取得了令人印象深刻的結(jié)果。但是,這些新出現(xiàn)的方法只接受與代碼相關(guān)的信息作為輸入。軟件重用在軟件開發(fā)過程中是常見的,這意味著類似代碼片段的注釋有助于注釋的生成。在本文中,受基于IR和基于模板的方法的啟發(fā),我們提出了一種神經(jīng)網(wǎng)絡(luò)注釋生成方法,使用類似代碼片段的現(xiàn)有注釋作為范例來指導(dǎo)注釋生成。具體來說,給定一段代碼,我們首先使用IR技術(shù)檢索類似的代碼片段,并將其注釋作為范例。然后,我們?cè)O(shè)計(jì)了一個(gè)新穎的seq2seq神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)以給定的代碼、其AST、類似的代碼及其范例作為輸入,并利用來自范例的信息,根據(jù)源代碼和類似代碼之間的語義相似性來協(xié)助生成目標(biāo)注釋。我們?cè)谝粋€(gè)包含約2M個(gè)樣本的大規(guī)模Java語料庫上評(píng)估了我們的方法,實(shí)驗(yàn)結(jié)果表明,我們的模型在很大程度上超過了SOTA。
Introduction
做代碼注釋生成的三種方法:
雖然基于神經(jīng)網(wǎng)絡(luò)的方法取得了最好的性能[14,16,25],但它往往會(huì)在評(píng)論中傾向于產(chǎn)生高頻詞,或者有時(shí)會(huì)“失控”。例如,根據(jù)LeClair等人的研究[25],測(cè)試集中21%的評(píng)論包含頻率低于100的標(biāo)記。相反,他們提出的方法預(yù)測(cè)的評(píng)論只有7%包含頻率低于100的符號(hào)。此外,超過兩千條生成的評(píng)論甚至沒有正常的序列結(jié)束標(biāo)記。具體地說,由神經(jīng)模型生成的注釋在可讀性和信息性方面是有損失的。這種現(xiàn)象也在其他領(lǐng)域的NMT模型中出現(xiàn),因此如果只用source code作為生成摘要的信息源是有損失的。
受方法(1)和(2)的啟發(fā),我們假設(shè)相似代碼段的摘要可以提供生成注釋的參考示例,還可能包含與源碼有關(guān)的低頻詞信息以增強(qiáng)模型輸出低頻詞的能力。同時(shí)由于神經(jīng)網(wǎng)絡(luò)具有很強(qiáng)的模式識(shí)別能力[2],我們認(rèn)為編解碼器神經(jīng)網(wǎng)絡(luò)可以與傳統(tǒng)的基于模板的方法和基于IR的方法相結(jié)合。所以作者提出了一個(gè)名為Re2Com的模型,具有Retrieve模塊和Refine模塊。Retrieve模塊使用IR技術(shù)抽取最相似的代碼段,將其摘要作為exemplar。Refine模塊使用seq2seq神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)生成摘要的patterns。
Motivation
鑒于近年來軟件工程領(lǐng)域?qū)ι疃葘W(xué)習(xí)方法有效性的許多討論[17,27],我們認(rèn)為我們的研究可能是一個(gè)很好的起點(diǎn),將傳統(tǒng)的具體任務(wù)方法與深度學(xué)習(xí)方法相結(jié)合。以往的方法是將神經(jīng)網(wǎng)絡(luò)應(yīng)用于軟件工程中的任務(wù)求解。雖然已經(jīng)提出了針對(duì)特定任務(wù)的具體輸入,如AST和控制流程圖,但以前的研究人員沒有分析深度學(xué)習(xí)方法存在的問題,如過擬合(往往會(huì)產(chǎn)生高頻項(xiàng))。因此,我們認(rèn)為可以將傳統(tǒng)方法建模為神經(jīng)網(wǎng)絡(luò)來提高性能。
Proposed Approach
數(shù)據(jù)預(yù)處理:從代碼倉庫中抽取<java method, comment>,然后把它們按項(xiàng)目劃分為訓(xùn)練、測(cè)試和驗(yàn)證集(即相同項(xiàng)目的代碼段一定全分在一個(gè)集合里)。
training and test:
Experiment
使用每個(gè)段代碼的配套文檔的第一句話作為對(duì)應(yīng)的摘要。考慮到自動(dòng)生成和重復(fù)的代碼(由于名稱更改、代碼克隆等)為了避免對(duì)神經(jīng)模型評(píng)估產(chǎn)生負(fù)面影響,作者使用啟發(fā)式規(guī)則[36]移除了這些樣本,并向訓(xùn)練集添加了唯一的、自動(dòng)生成的代碼,以確保沒有對(duì)這些樣本執(zhí)行任何測(cè)試。在拆分camel case和下劃線符號(hào)、去掉非字母字符并設(shè)置為小寫字符之后,作者按項(xiàng)目將數(shù)據(jù)集分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,這意味著一個(gè)項(xiàng)目中的所有方法都?xì)w為一類。他們認(rèn)為,為了評(píng)估神經(jīng)模型的性能,數(shù)據(jù)集的預(yù)處理是必要的。** 如果沒有這些預(yù)處理,神經(jīng)模型的評(píng)價(jià)結(jié)果會(huì)被夸大。 **例如,在ICPC‘18論文[14]中,DeepCom報(bào)告的BLEU得分約為38分,而在該數(shù)據(jù)集上的結(jié)果僅為約19分。
數(shù)據(jù)集用的是LeClair等人在《A neural model for generating natural language summaries of program subroutines》文中提供的數(shù)據(jù)集,基本信息如下:
本文作者將數(shù)據(jù)集劃分為標(biāo)準(zhǔn)數(shù)據(jù)集和挑戰(zhàn)數(shù)據(jù)集:
- 標(biāo)準(zhǔn)數(shù)據(jù)集包括Java method(source code), an SBT-AO sequence of Java method, and a comment
- 挑戰(zhàn)數(shù)據(jù)集僅有SBT-AO sequence and comment
SBT-AO把SBT序列里的每個(gè)token都用<Other>替換了,僅保留了結(jié)構(gòu)信息。
Result
Re2Com vs neural baseline
Re2Com vs IR baseline
Exemplar信息源的有效性證明
在低頻詞生成上的表現(xiàn)
Tab 5相當(dāng)于Recall,Fig 6相當(dāng)于Precision。
總結(jié)
以上是生活随笔為你收集整理的阅读笔记|Retrieve and Refine: Exemplar-based Neural Comment Generation的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Azure案例:迈阿密市
- 下一篇: 网易平台服务器修改魔兽,魔兽世界怀旧服: