摘 要:代碼注釋生成方法通?;诮Y(jié)構(gòu)-序列(Structure-Sequence,Struct2Seq)框架,但忽略了代碼注釋的類型信息,例如操作符、字符串等。由于類型信息之間的層次具有依賴性,將類型信息引入已有的Struct2Seq 框架并不適用。為了解決上述問題,提出一種基于類型輔助引導(dǎo)的代碼注釋生成(Code Comment Generation based on Type-assisted Guid-ance,CCG-TG)模型,將源代碼視為帶有類型信息的n 元樹。該模型包含一個關(guān)聯(lián)類型編碼器和一個限制類型解碼器,可以對源代碼進(jìn)行自適應(yīng)總結(jié)。此外,提出一種多級強(qiáng)化學(xué)習(xí)(Multi-level Reinforcement Learning,MRL)方法來優(yōu)化所提模型的訓(xùn)練過程。在多個數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),與多種基準(zhǔn)模型對比,證明所提CCG-TG 模型在所有評價指標(biāo)上的性能最優(yōu)。
關(guān)鍵詞:代碼注釋生成;類型信息;結(jié)構(gòu)序列框架;類型輔助引導(dǎo);強(qiáng)化學(xué)習(xí)
中圖分類號:TP311 文獻(xiàn)標(biāo)志碼:A 開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
文章編號:1003-3114(2024)04-0807-08
0 引言
程序員對代碼進(jìn)行注釋對維護(hù)軟件項(xiàng)目代碼庫以及顯著提高可讀性至關(guān)重要。代碼注釋生成旨在借助深度學(xué)習(xí)技術(shù)將程序代碼自動轉(zhuǎn)換為自然語言,以提高代碼開發(fā)和維護(hù)的效率[1]。
現(xiàn)有方法利用代碼固有的結(jié)構(gòu)特征,以編碼器- 解碼器的方式解決結(jié)構(gòu)- 序列(Structure-Sequence,Struct2Seq)的編碼生成任務(wù)。充分利用抽象語法樹(Abstract Syntax Trees,AST)的語法結(jié)構(gòu)或源代碼的解析樹,可以顯著提升注釋生成的質(zhì)量[2-3]。另外,通過提取代碼的結(jié)構(gòu)信息,使用圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)更新各節(jié)點(diǎn)信息也可以提高注釋生成的質(zhì)量[3-5]。文獻(xiàn)[6]構(gòu)建了一種結(jié)構(gòu)感知的混合編碼模型,兼顧程序代碼的序列表示和結(jié)構(gòu)表示,并利用聚合編碼過程將兩類信息融合至解碼器。
代碼注釋生成框架可以從源代碼片段,例如結(jié)構(gòu)化查詢語言(Structed Query Language,SQL)、lambda 表達(dá)式等,生成自然語言。作為一種特定的自然語言生成任務(wù)[7-8],主流的方法可分為文本驅(qū)動方法和結(jié)構(gòu)驅(qū)動方法。
文本驅(qū)動方法:該類方法僅考慮源代碼的順序文本信息。文獻(xiàn)[9]使用主題模型和n-gram 來預(yù)測源代碼片段的注釋。Iyer 等[10]提出一種帶有注意力的長短期記憶網(wǎng)絡(luò)(Long Short Term Memory,LSTM)語言模型,用于生成關(guān)于C#和SQL 的注釋。文獻(xiàn)[11 ]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的自動化代碼注釋生成方法來緩解長期依賴問題,以生成更準(zhǔn)確的注釋信息。文獻(xiàn)[12]研究了14 個不同的Java 軟件項(xiàng)目使用代碼注釋的風(fēng)格,提出一種機(jī)器學(xué)習(xí)方法將行級Java 代碼注釋自動分類。
結(jié)構(gòu)驅(qū)動方法:該方法考慮了不同程序語言的結(jié)構(gòu)信息,優(yōu)于文本驅(qū)動方法。Alon 等[13]在AST中將代碼片段處理為組合路徑集,并在解碼過程中使用注意力機(jī)制選擇相關(guān)路徑。Hu 等[14]提出一種基于神經(jīng)機(jī)器翻譯的模型,該模型將AST 節(jié)點(diǎn)序列作為輸入,并捕獲Java 代碼的結(jié)構(gòu)和語義。Haque等[15]提出使用三類編碼器分別對給定子程序的代碼/ 文本、AST 和文件上下文進(jìn)行編碼,其中文件上下文是子程序的代碼/ 文本嵌入矢量。
復(fù)制機(jī)制:通過重用部分輸入而不是從目標(biāo)詞匯表中選擇單詞來解決生成任務(wù)中的域外詞(Outof Vocabulary,OOV)問題。文獻(xiàn)[16]提出一種混合指針生成器網(wǎng)絡(luò),將指針網(wǎng)絡(luò)[17]用于抽象文本摘要的標(biāo)準(zhǔn)序列-序列(Sequence-Sequence,Seq2Seq)模型。Gu 等[18]提出使用COPYNET 將傳統(tǒng)的復(fù)制機(jī)制融入到Seq2Seq 模型中,并有選擇地將輸入片段復(fù)制到輸出序列中。文獻(xiàn)[19]提出一種指針生成網(wǎng)絡(luò)模型,該模型結(jié)合了抽取式和生成式兩種文本摘要方法,能夠選擇從源文本中復(fù)制單詞或利用詞匯表來生成新的摘要信息。
為了解決上述問題,提出一種基于類型輔助引導(dǎo)的代碼注釋生成(Code Comment Generation basedon Type-assisted Guidance,CCGTG)模型,將源代碼視為帶有類型信息的n 元樹。該模型包含一個關(guān)聯(lián)類型編碼器和一個限制類型解碼器,可以對源代碼進(jìn)行自適應(yīng)總結(jié)。此外,提出一種多級強(qiáng)化學(xué)習(xí)(Multi-level Reinforcement Learning,MRL)方法來優(yōu)化所提模型的訓(xùn)練過程。
1 相關(guān)定義
定義1(令牌類型樹)令牌類型樹Tx,τ 是一棵n 元樹,表示節(jié)點(diǎn)集V 的源代碼。V = {v1,v2,…,v V }表示偏序節(jié)點(diǎn)集,令節(jié)點(diǎn)vi = {xi,τi },xi 表示令牌序列,τi 表示語法類型集T 中的類型??梢詮脑创a的令牌信息及其AST 的類型信息構(gòu)造令牌類型樹。
定義2(代碼注釋生成任務(wù))設(shè)S 為訓(xùn)練數(shù)據(jù)集,標(biāo)記樣本(Tx ,τ,y)∈S,其中Tx,τ 為輸入的令牌類型樹,y =(y1,y2,…,yM)為帶有M 個詞的真實(shí)注釋。代碼注釋生成的任務(wù)是設(shè)計一種模型,該模型將未標(biāo)記的樣本Tx,τ 作為輸入,并預(yù)測輸出y 作為注釋。
2 CCGTG 模型
圖1(a)展示了使用樹型結(jié)構(gòu)的長短期記憶網(wǎng)絡(luò)(Tree-Long Short Term Memory,Tree-LSTM)編碼器提?。樱眩?結(jié)構(gòu)信息,關(guān)鍵字SELECT 的子樹和WHERE 子句的子樹具有相同的結(jié)構(gòu),但類型不同。如果忽略了類型信息,傳統(tǒng)編碼器使用相同的神經(jīng)網(wǎng)絡(luò)參數(shù)對結(jié)構(gòu)樹進(jìn)行編碼,會導(dǎo)致注釋生成不準(zhǔn)確。因此,充分利用類型信息,提出基于類型輔助引導(dǎo)的代碼注釋生成模型。
在圖1(a)的解碼器中,缺少TOM 節(jié)點(diǎn)的類型通常會導(dǎo)致生成的注釋中出現(xiàn)未知符號或詞語(記作UNK)。因此,解決局限性的關(guān)鍵是有效利用節(jié)點(diǎn)類型信息。
如圖1(b)所示,在編碼階段,包含一個關(guān)聯(lián)類型編碼器,對n 元樹的節(jié)點(diǎn)類型信息進(jìn)行編碼;在解碼階段,利用類型信息輔助注釋生成,并通過操作選擇階段和詞語選擇階段來減少搜索空間大小,避免出現(xiàn)OOV 的情況??紤]到解碼過程中的操作選擇結(jié)果沒有真實(shí)標(biāo)簽,進(jìn)一步設(shè)計一種MRL 方法來優(yōu)化訓(xùn)練過程。
所提CCG-TG 模型遵循編碼器-解碼器架構(gòu),主要由關(guān)聯(lián)類型編碼器和限制類型解碼器組成。如圖2 左側(cè)所示,關(guān)聯(lián)類型編碼器循環(huán)地將令牌類型樹Tx,τ 作為輸入,并使用隱藏狀態(tài)保持源代碼的語義信息。關(guān)聯(lián)類型編碼器使用多組參數(shù)集來學(xué)習(xí)不同類型的節(jié)點(diǎn)。在處理輸入令牌類型樹時,根據(jù)當(dāng)前節(jié)點(diǎn)的類型自適應(yīng)地調(diào)用相應(yīng)單元的參數(shù),使結(jié)構(gòu)化語義表示能夠包含源代碼的類型信息。
如圖2 右側(cè)所示,限制類型解碼器以關(guān)聯(lián)類型編碼器的原始令牌類型樹Tx,τ 及其語義表示作為輸入,并生成相應(yīng)的注釋。采用注意力機(jī)制計算注意力向量,通過兩階段解碼過程生成輸出詞:
① 根據(jù)操作的分布決定是從原始的令牌類型樹復(fù)制輸出詞還是從當(dāng)前的隱藏狀態(tài)生成輸出詞。
② 如果選擇復(fù)制操作,則從Tx,τ 中選擇的節(jié)點(diǎn)復(fù)制具有類型限制的單詞;否則,將從目標(biāo)字典中選擇候選詞。
兩階段解碼過程均由注意力機(jī)制從編碼器的隱藏狀態(tài)中提取類型來引導(dǎo),實(shí)現(xiàn)了復(fù)制和生成過程之間的自適應(yīng)切換,不僅減少了生成過程的搜索空間,而且復(fù)制機(jī)制解決了OOV 問題。
盡管所提CCG-TG 利用代碼中的類型信息提供了有效的解決方案,但其訓(xùn)練過程面臨如下困難:① 沒有為操作選擇階段提供訓(xùn)練標(biāo)簽;② 評價指標(biāo)與目標(biāo)函數(shù)無法適配。因此,進(jìn)一步設(shè)計一個MRL 方法來訓(xùn)練CCG-TG 模型。在MRL 訓(xùn)練中,CCG-TG 模型不依賴于操作選擇階段的真實(shí)標(biāo)簽,將評價指標(biāo)作為學(xué)習(xí)獎勵反饋到訓(xùn)練過程。
2. 1 關(guān)聯(lián)類型編碼器
關(guān)聯(lián)類型編碼器用于學(xué)習(xí)輸入源代碼的語義表示,為具有相同結(jié)構(gòu)但不同語義的子樹進(jìn)行信息總結(jié)。關(guān)聯(lián)類型編碼器的本質(zhì)是n 元Tree-LSTM[20]。將類型信息作為編碼器網(wǎng)絡(luò)學(xué)習(xí)參數(shù)集的索引進(jìn)行集成,而不是直接將類型信息作為特征輸入到編碼器中進(jìn)行學(xué)習(xí)。換句話說,通過不同的類型定義不同的參數(shù)集,提供了更詳細(xì)的輸入信息。令牌類型樹包含N 個有序子節(jié)點(diǎn),索引1 ~ N。對于第j 個節(jié)點(diǎn),其第k 個子節(jié)點(diǎn)的隱藏狀態(tài)和存儲單元分別表示為hjk 和cjk。為了有效地捕獲類型信息,設(shè)置和為第j 個節(jié)點(diǎn)的權(quán)重和偏置,為第j 個節(jié)點(diǎn)的第k 個子節(jié)點(diǎn)權(quán)重,n 元Tree-LSTM 的形式化表示如式(1)~ 式(6)所示。
式中:fjk 表示第j 個節(jié)點(diǎn)的第k 個子節(jié)點(diǎn)參數(shù)向量,Uτjl,k 表示第k 個遺忘門中第j 個節(jié)點(diǎn)的第l 個子節(jié)點(diǎn)的類型權(quán)重。
2. 2 限制類型解碼器
本節(jié)介紹解碼階段的限制類型解碼器,將類型信息合并到兩階段解碼過程中。解碼時,使用高速LSTM(Highway LSTM,HLSTM)[21]作為基本解碼單元。采用注意力機(jī)制,將編碼器的隱藏狀態(tài)作為輸入,生成注意力向量。得到的注意力向量作為兩階段解碼過程的輸入,分別稱為操作選擇階段和詞語選擇階段。操作選擇階段在生成操作和復(fù)制操作之間進(jìn)行選擇。如果選擇生成操作,將從目標(biāo)字典中生成預(yù)測的單詞。如果選擇復(fù)制操作,則啟用類型限制復(fù)制機(jī)制,通過屏蔽非法語法類型來限制搜索空間。此外,使用復(fù)制衰減策略解決由注意力機(jī)制引起的對特定節(jié)點(diǎn)的重復(fù)關(guān)注問題。
HLSTM 重復(fù)利用記憶單元堆疊層之間的空間域連接。HLSTM 僅在細(xì)胞狀態(tài)的計算方式上與傳統(tǒng)LSTM 不同,如式(7)~ 式(8)所示:
clt=dlt·cl-1t +f lt·clt-1 +ilt·tanh(Wlxc·xlt+Wlhc·hlt-1 +blc),(7)
dlt=σ(Wlxd xlt+Wlcd clt-1 +Wlcd cl-1t +bld), (8)
式中:dlt表示連接第l-1 層的細(xì)胞狀態(tài)cl-1t 和第l 層細(xì)胞狀態(tài)clt的深度門,f lt表示第l 層遺忘門,ilt表示輸入門。
編碼器中根節(jié)點(diǎn)的隱藏狀態(tài)記為hr,初始化解碼器的隱藏狀態(tài)z0 ←hr。在時間步長為m 時,給定輸出ym -1 和時間步長m-1 時解碼器的隱藏狀態(tài)zm -1,由解碼器中的HLSTM 單元計算隱藏狀態(tài)zm,如式(9)所示:
zm = HLSTM(zm -1,ym -1)。(9)
注意力向量qm 的計算方法如式(10)~ 式(11)所示:
式中:Wq 為注意力機(jī)制的權(quán)重參數(shù),αmj 為注意力分?jǐn)?shù),|Vx| 為節(jié)點(diǎn)數(shù)。注意力向量包含標(biāo)記和類型信息。
操作選擇階段根據(jù)編碼器的注意力向量和隱藏狀態(tài)決定使用復(fù)制操作還是生成操作來選擇單詞。給定時間步長m 的注意力向量qm,操作選擇階段估計條件概率計算方法如式(12)所示:
p(am |y*<m;Tx,τ)= softmax(Ws·qm), (12)
式中:am∈{0,1},0 和1 分別表示復(fù)制和生成操作,Ws 表示可訓(xùn)練參數(shù)。式(12)由一個全連接層和一個softmax 激活函數(shù)實(shí)現(xiàn)。由于沒有操作選擇的真值標(biāo)簽,采用多級MRL 方法訓(xùn)練操作選擇階段,詳細(xì)內(nèi)容見2. 3 節(jié)。
詞語選擇階段也包括兩個分支,如果在操作選擇階段選擇了生成操作,注意力向量將被輸入softmax 層來預(yù)測目標(biāo)詞分布式:
p(ym| am =1,y*<m;Tx,τ)= softmax(Wg·qm), (13)
式中:Wg 表示輸出層的可訓(xùn)練參數(shù)。
如果選擇復(fù)制操作,使用點(diǎn)積(Dot-product)得分函數(shù)計算節(jié)點(diǎn)隱藏狀態(tài)和注意力向量的得分向量sm。得分向量將被輸入到softmax 層來預(yù)測輸入詞的分布,計算方法如式(14)~ 式(15)所示:
sm =[h1,h2,…,h |Vx| ] T ·qm, (14)
p(ym| am =0;y*<m;Tx,τ)= softmax(sm)。(15)
為了過濾非法復(fù)制的候選項(xiàng),在每個解碼步驟m 中使用基于語法類型的掩碼向量dm,其每個維度對應(yīng)于令牌類型樹的每個節(jié)點(diǎn)。如果令牌類型樹中節(jié)點(diǎn)的掩碼表明該節(jié)點(diǎn)需要被過濾掉,則設(shè)置為負(fù)無窮。否則,設(shè)置為0。受限復(fù)制階段如式(16)所示:
p(ym |am =0;y*<m;Tx,τ)= softmax(sm +dm)。(16)
在式(13)和式(16)中,詞語概率分布用輸入單詞或目標(biāo)字典單詞的softmax 輸出表示。在每個時間步驟中,將選擇概率最高的詞語。
使用注意力向量作為指針來引導(dǎo)復(fù)制過程。帶有類型限制的復(fù)制機(jī)制可能關(guān)注特定節(jié)點(diǎn),忽略其他可用節(jié)點(diǎn),使得某些復(fù)制的令牌在單個生成的文本中重復(fù)出現(xiàn),導(dǎo)致內(nèi)容大量冗余。因此,引入復(fù)制衰減策略來微調(diào)某些未被復(fù)制節(jié)點(diǎn)的概率。定義第i 個樹節(jié)點(diǎn)在第m 個解碼步驟中的衰減率為λm,i。如果在時間步長中復(fù)制一個節(jié)點(diǎn),則將其衰減率初始化為1。在下一個時間步m+1 中,衰減率通過系數(shù)γ∈(0,1)縮放,如式(17)所示:
λm +1,i =γ*λm,i。(17)
限制類型解碼器的完整公式如下:
p(ym |am =0;y*<m;Tx,τ)= softmax(sm +dm)⊙(1-λm)。(18)
2. 3 多級強(qiáng)化學(xué)習(xí)
訓(xùn)練所提CCGTG 存在2 個挑戰(zhàn):① 缺乏操作選擇階段的基礎(chǔ)真值標(biāo)簽;② 評估指標(biāo)與目標(biāo)函數(shù)之間不兼容。為了解決上述問題,提出一種MRL 方法來訓(xùn)練操作選擇階段和詞語選擇階段。
將MRL 的目標(biāo)設(shè)置為最大化預(yù)測序列y*和真值序列y 之間獎勵R(y*,y)的期望值記為Lr,可以表示為輸入元組{Tx,τ,y}的函數(shù):
式中:Y 表示候選注釋序列的集合。獎勵R(y*,y)是不可微的評價指標(biāo)。通過從分布p(y* Tx,τ)中采樣y*來近似期望值。預(yù)測序列y*依賴于詞語選擇階段和操作選擇階段,令a 表示操作選擇階段的動作。將動作am 引入時間步長m 中,兩個階段的聯(lián)合分布如式(20)所示:
式中:模型從y*< m,am,Tx ,τ 為條件的詞語分布中選擇詞語y*m ,而操作選擇的動作am 需要單獨(dú)計算,在詞語選擇階段和操作選擇階段之間存在多級依賴關(guān)系。Y 表示所有候選注釋的搜索空間,利用該搜索空間最大化Lr 的計算代價巨大。解碼過程可近似于從概率分布中采樣,采樣方法采用Gumbel-Max 算法[22]。經(jīng)過最大采樣步長M 時,Lr 可近似于:
3 實(shí)驗(yàn)與分析
3. 1 數(shù)據(jù)集描述
本文在3 個通用的基準(zhǔn)數(shù)據(jù)集上評估CCGTG框架的性能,分別是WikiSQL[23]、ATIS[24]和CoNaLa[25]。WikiSQL 是一個數(shù)據(jù)集,包含了80 654 個手工標(biāo)注的SQL 查詢和自然語言注釋對示例,分布在維基百科的2 424 個表中。SQL 查詢進(jìn)一步分為訓(xùn)練集(5 635 個)、開發(fā)集(8 421 個)和測試集(1 587 個)。ATIS 以lambdacalculus 的形式存在,是一個包含4 434 個訓(xùn)練實(shí)例、491 個開發(fā)實(shí)例和448 個測試實(shí)例的5 373 個飛行信息查詢集合。CoNaLa 是一個與python 相關(guān)的數(shù)據(jù)集,使用其原始版本,其中包括從Stack Overflow 抓取的2 879 個片段對,分為2 379 個訓(xùn)練實(shí)例和500 個測試實(shí)例。從其訓(xùn)練集中提取了200 個隨機(jī)樣本作為開發(fā)集。
根據(jù)抽象語法描述語言(Abstract Syntax De-scription Language,ASDL)語法,將WikiSQL 的SQL查詢轉(zhuǎn)換成具有6 種類型的AST,其中SQL 查詢的ASDL 語法在文獻(xiàn)[25]提出。根據(jù)文獻(xiàn)[24]提出的方法,將ATIS 的lambda-calculus 邏輯形式轉(zhuǎn)換為7 種類型的樹結(jié)構(gòu)。CoNaLa 的python 代碼段則按照python 的官方ASDL 語法轉(zhuǎn)化為20 種類型的AST。這些數(shù)據(jù)集的AST 數(shù)據(jù)如表1 所示,其中顯示了AST 的最大深度(Max-Tree-Depth)、AST 中的最大子節(jié)點(diǎn)數(shù)(Max-ChildCount)和AST 中的平均樹節(jié)點(diǎn)數(shù)(Avg-Tree-NodeCount)。
3. 2 基準(zhǔn)模型
選擇具有代表性的代碼注釋生成設(shè)計作為比較基準(zhǔn)。選擇Code-NN[10]的原因在于其第一個將源代碼轉(zhuǎn)化為句子的模型;指針生成器(PG)是一種基于Seq2Seq 的模型,具有標(biāo)準(zhǔn)的復(fù)制機(jī)制。此外,選擇了Tree-to-Sequence (Tree2Seq)模型[26]。在Tree2Seq 模型中加入了復(fù)制機(jī)制,作為基準(zhǔn)模型(T2S+CP)。Graph-to-Sequence(Graph2Seq)[27]作為基于圖的基準(zhǔn)模型進(jìn)行比較,因?yàn)闆]有發(fā)布數(shù)據(jù)預(yù)處理的代碼,于是將SQL 數(shù)據(jù)源代碼的樹狀結(jié)構(gòu)表示轉(zhuǎn)換成有向圖,用于復(fù)制。
3. 3 超參數(shù)設(shè)置
Code-NN 的嵌入大小和隱藏大小均為400,使用隨機(jī)均勻初始化器進(jìn)行初始化,初始化權(quán)重為0. 35,并采用隨機(jī)梯度下降算法訓(xùn)練模型,學(xué)習(xí)率為0. 5。P-G 采用128 嵌入大小、256 隱藏大小,并使用0. 02 初始化權(quán)重的隨機(jī)均勻初始化器進(jìn)行初始化,采用Adam 優(yōu)化器訓(xùn)練模型,學(xué)習(xí)率為0. 001。Graph2Seq 采用100 嵌入大小、200 隱藏大小,并使用截斷正態(tài)初始化器進(jìn)行初始化。使用Adam 優(yōu)化器以0. 001 的學(xué)習(xí)率訓(xùn)練模型。
使用Xavier 初始化器[28]初始化提出的CCG-TG框架的參數(shù)。嵌入的大小與LSTM 狀態(tài)和隱藏層的維度相當(dāng),ATIS 和CoNaLa 的維度為64,WikiSQL 的維度為128。CCG-TG 使用學(xué)習(xí)率為0. 001 的Adam優(yōu)化器進(jìn)行訓(xùn)練。為了縮小詞匯量,源代碼詞匯和目標(biāo)注釋詞匯中都不保留低頻詞。WikiSQL 和ATIS 的最小閾值頻率設(shè)為4,而CoNaLa 的最小閾值頻率設(shè)為2。所有基準(zhǔn)模型和所提出模型的最小批大小都設(shè)為32。
3. 4 評估標(biāo)準(zhǔn)
使用基于n-gram 的BLEU[29]和ROUGE 評價來評估生成評論的質(zhì)量,并在基于MRL 的訓(xùn)練中使用上述評價指標(biāo)來設(shè)置獎勵。BLEU-4、ROUGE-2 和ROUGE-L 被用來評估模型的性能,因?yàn)槠錇榛谏舷挛牡奈谋旧芍凶罹叽硇缘脑u估指標(biāo)。
3. 5 不同基準(zhǔn)模型對比
圖3 給出了基準(zhǔn)框架和所提出的框架的評估結(jié)果。由MRL 可以切換到不同的獎勵函數(shù),因此同時評估了框架的BLEU 定向訓(xùn)練和ROUGE 定向訓(xùn)練,分別稱為CCG-TG(B)和CCG-TG(R)。相比之下,CCG-TG(B)和CCG-TG(R)的結(jié)果略有不同。不過,這兩個結(jié)果都明顯高于所有選定的同類結(jié)果,表明所提出的框架在所有使用不同編程語言的數(shù)據(jù)集上都具有最佳的生成質(zhì)量。
具體而言,與T2S+CP 相比,CCG-TG 在WikiSQL上的BLEU-4 指標(biāo)提高了4%,ROUGE-2 指標(biāo)提高了4. 1%,ROUGE-L 指標(biāo)提高了2. 8%。對于與lambda計算相關(guān)的語料庫,CCG-TG 在ATIS 上的BLEU-4 提高了3. 5%、ROUGE-2 提高了3. 7%、ROUGE-L 提高了3. 6%。由于ATIS 中lambda-calculus 邏輯形式的子樹差異很大,因此其性能比其他兩個語料庫更難提高。在與python 相關(guān)的語料庫中,與基準(zhǔn)中最好的語料庫相比,CCG-TG 在CoNaLa 上的BLEU-4 提高了1. 2% ,ROUGE-2 提高了1. 8% ,ROUGE-L 提高了0. 7% 。CoNaLa 的評估得分和改進(jìn)幅度較低的原因在于語法結(jié)構(gòu)復(fù)雜和缺乏足夠的訓(xùn)練樣本,即僅有2 174 個訓(xùn)練樣本中的20 種類型,導(dǎo)致所提方法沒有充分發(fā)揮其優(yōu)勢。在這兩個數(shù)據(jù)集上,CCG-TG 模型仍然優(yōu)于對比算法。
3. 6 消融實(shí)驗(yàn)
為了研究模型中每個組件的性能,對開發(fā)集進(jìn)行了消融實(shí)驗(yàn)。由于所有實(shí)驗(yàn)結(jié)果趨勢相同,因此省略了其他數(shù)據(jù)集上的結(jié)果,僅介紹WikiSQL 數(shù)據(jù)集上的結(jié)果。模型的變體如下:
① CCG-TA:移除類型相關(guān)編碼器,改用樹狀LSTM。
② CCG-MV:移除掩碼向量dm。
③ CCG-CD:刪除復(fù)制衰減策略。
④ CCG-RL:用MLE 替換,將操作選擇的動作邊緣化。
圖4 給出了消融實(shí)驗(yàn)的結(jié)果。總體而言,所有組件都是CCG-TG 框架必需的,并對最終輸出做出了重要貢獻(xiàn)。與CCG-TA 相比,標(biāo)準(zhǔn)CCG-TG 的高性能得益于關(guān)聯(lián)類型編碼器,它能自適應(yīng)地處理不同類型的節(jié)點(diǎn),并提取出更好的源代碼摘要。CCG-MV 和CCG-CD 的性能下降表明了類型限制掩碼向量和復(fù)制衰減策略的優(yōu)勢。共同確保了復(fù)制和選詞的準(zhǔn)確執(zhí)行。CCG-TG 和CCG-RL 的比較表明了對所提出的框架訓(xùn)練的必要性。
4 結(jié)束語
本文所提模型通過關(guān)聯(lián)類型編碼器和限制類型解碼器,充分利用了與代碼相關(guān)的類型信息,為模型的訓(xùn)練提供了分層強(qiáng)化學(xué)習(xí)方法。實(shí)驗(yàn)結(jié)果表明,與其他方法相比,本文所提模型有了顯著的改進(jìn),在軟件開發(fā)中具有很強(qiáng)的應(yīng)用潛力。在未來的工作中,將通過設(shè)計高效的學(xué)習(xí)算法,將所提出模型擴(kuò)展到更復(fù)雜的環(huán)境中。
參考文獻(xiàn)
[1] CAI R C,LIANG Z H,XU B Y,et al. TAG:TypeAuxiliary Guiding for Code Comment Generation[C]∥58th Annual Meeting of the Association for ComputationalLinguistics. Stroudsburg:ACL,2020:291-301.
[2] 王瀚森,王婷,陳鐵明,等. 融合語法和語義的代碼注釋生成方法[J]. 小型微型計算機(jī)系統(tǒng),2023,44(11):2457-2463.
[3] 陳翔,于池,楊光,等. 基于雙重信息檢索的Bash 代碼注釋生成方法[J]. 軟件學(xué)報,2023,34(3):1310-1329.
[4] XU K,WU L F,WANG Z G,et al. SQLtoText Generationwith GraphtoSequence Model [C]∥2018 Conference onEmpirical Methods in Natural Language Processing.Brussels:ACL,2018:931-936.
[5] FERNANDES P,ALLAMANIS M,BROCKS M. StructuredNeural Summarization[C]∥7th International Conferenceon Learning Representations. New Orleans:ICLR,2019:1-18.
[6] 蔡瑞初,張盛強(qiáng),許柏炎. 基于結(jié)構(gòu)感知混合編碼模型的代碼注釋生成方法[J]. 計算機(jī)工程,2023,49(2):61-69.
[7] 段瑞雪,劉鑫,張仰森. 融合依存關(guān)系的對話關(guān)系抽?。郏剩荩?重慶理工大學(xué)學(xué)報(自然科學(xué)),2023,37 (7):217-226.
[8] 王素芳,吳晨,陳志成. 智能節(jié)目輔助主持機(jī)器人系統(tǒng)與推薦算法[J]. 重慶理工大學(xué)學(xué)報(自然科學(xué)),2022,36(12):102-109.
[9] ATTIAS D M,COHEN W W. Natural Language Modelsfor Predicting Programming Comments[C]∥51st AnnualMeeting of the Association for Computational Linguistics.Sofia:ACL,2013:35-40.
[10]IYER S,IOANNIS K,CHEUNG A,et al. SummarizingSource Code Using a Neural Attention Model[C]∥54thAnnual Meeting of the Association for Computational Linguistics. Berlin:ACL,2016:2073-2083.
[11]彭斌,李征,劉勇,等. 基于卷積神經(jīng)網(wǎng)絡(luò)的代碼注釋自動生成方法[J]. 計算機(jī)科學(xué),2021,48 (12 ):117-124.
[12] PASCAR L,BRUNTINK M,BACCHELLI A. ClassifyingCode Comments in Java Software Systems[J]. EmpiricalSoftware Engineering,2019,24(3):1499-1537.
[13]ALON U,BRODY S,LEVY O,et al. Code2Seq:GeneratingSequences from Structured Representations of Code[C]∥7th International Conference on Learning Representations.New Orleans:ICLR,2019:1-22.
[14]HU X,LI G,XIA X,et al. Deep Code Comment Generation[C]∥26th Conference on Program Comprehension. NewYork:ACM,2018:200-210.
[15]HAQUE S,LECLAIR A,WU L F,et al. Improved AutomaticSummarization of Subroutines via Attention to File Context[C]∥17th International Conference on Mining Software Repositories. Seoul:ACM,2020:300-310.
[16]SEE A,LIU P J,MANNING C D. Get to the Point:Summarization with Pointergenerator Networks[C]∥55th AnnualMeeting of the Association for Computational Linguistics.Vancouver:ACL,2017:1073-1083.
[17]VINYALS O,FORTUNATO M,JAITLY N. Pointer Networks[C]∥Advances in Neural Information Processing Systems28:Annual Conference on Neural Information ProcessingSystems. Montreal:NIPS,2015:2692-2700.
[18]GU J T,LU Z D,LI H,et al. Incorporating Copying Mechanism in SequencetoSequence Learning[C]∥54th AnnualMeeting of the Association for Computational Linguistics.Berlin:ACL,2016:1631-1640.
[19]胡清豐,魏赟,鄔春學(xué). 基于指針生成網(wǎng)絡(luò)的中文對話文本摘要模型[J]. 計算機(jī)系統(tǒng)應(yīng)用,2023,32 (1):224-232.
[20]TAI K S,SOCHER R,MANNING C D. Improved SemanticRepresentations from Treestructured Long Short TermMemory Networks[C]∥53rd Annual Meeting of the Association for Computational Linguistics. Berlin:ACL,2015:1556-1566.
[21]ZHANG Y,CHEN G G,YU D,et al. Highway Long ShortTerm Memory RNNS for Distant Speech Recognition[C]∥2016 IEEE International Conference on Acoustics,Speech and Signal Processing. Shanghai:IEEE,2016:5755-5759.
[22]HUIJBEN I A,KOOL W,PAOLUS M B,et al. A Reviewof the Gumbelmax Trick and Its Extensions for DiscreteStochasticity in Machine Learning[J]. IEEE Transactionson Pattern Analysis and Machine Intelligence,2023,45(2):1353-1371.
[23]ZHONG V,XIONG C M,SOCHER R. Seq2SQL:GeneratingStructured Queries from Natural Language Using Reinforcement Learning[EB/ OL]. (2017-11-09)[2024-01-05].https:∥arxiv. org/ abs/1709. 00103.
[24]LI D,MIRELLA L. Language to Logical form with NeuralAttention[C]∥54th Annual Meeting of the Associationfor Computational Linguistics. Berlin:ACL,2016:33-43.
[25]PENGCHENG Y,GRAHAM N. A Syntactic Neural Modelfor Generalpurpose Code Generation[C]∥55th AnnualMeeting of the Association for Computational Linguistics.Berlin:ACL,2017:440- 450.
[26]AKIKO E,KAZUMA H,YOSHIMASA T. TreetoSequenceAttentional Neural Machine Translation[C]∥54th AnnualMeeting of the Association for Computational Linguistics.Berlin:ACL,2016:823-833.
[27]KUN X,LINGFEI W,ZHIGUO W,et al. Graph2Seq:Graph to Sequence Learning with Attentionbased NeuralNetworks[EB/ OL]. (2018 -12 -03)[2024 -01 -05].https:∥arxiv. org/ abs/1804. 00823.
[28]XAVIER G,YOSHUA B. Understanding the Difficulty ofTraining Deep Feedforward Neural Networks[C]∥13thInternational Conference on Artificial Intelligence and Statistics. Sardinia:JLMR,2010:249-256.
[29]KISHORE P,SALIM R,TODD W,et al. Bleu:A Methodfor Automatic Evaluation of Machine Translation[C]∥40th Annual Meeting of the Association for ComputationalLinguistics. Berlin:ACL,2002:311-318.
作者簡介:
劉 利 男,(1988—),碩士,講師。主要研究方向:數(shù)據(jù)挖掘、大數(shù)據(jù)技術(shù)、人工智能。
呂韋岑 男,(1987—)碩士,講師。主要研究方向:電子技術(shù)應(yīng)用、物聯(lián)網(wǎng)技術(shù)。
汪 洋 男,(1987—),碩士,講師。主要研究方向:人工智能、數(shù)據(jù)挖掘、軟件技術(shù)。
基金項(xiàng)目:瀘州市科技計劃項(xiàng)目(2021-JYJ-96)