• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于層次注意力機制的源代碼遷移模型

      2023-10-17 12:07:01李征徐明瑞吳永豪劉勇陳翔武淑美劉恒源
      計算機應(yīng)用研究 2023年10期
      關(guān)鍵詞:機器翻譯注意力機制

      李征 徐明瑞 吳永豪 劉勇 陳翔 武淑美 劉恒源

      摘 要:針對源代碼遷移模型存在的遷移代碼語義一致性問題,在詞符注意力機制的基礎(chǔ)上引入了語句注意力機制,提出了一種基于層次注意力機制的源代碼遷移模型HPGN(hierarchical pointer-generator network),設(shè)計了狀態(tài)傳遞機制。HPGN在遷移過程中,語句注意力機制對齊源代碼語句和遷移代碼語句的特征,詞符注意力機制從對齊的代碼語句中提取詞符,狀態(tài)傳遞機制傳遞相鄰遷移代碼語句的特征,從而提升了遷移代碼的語義一致性。在真實項目數(shù)據(jù)集的實驗結(jié)果表明,HPGN比最佳對比模型提高了3.4個總體分值,同時有著更少的模型參數(shù)量。此外,消融實驗驗證了狀態(tài)傳遞機制和HPGN層次架構(gòu)的有效性。

      關(guān)鍵詞:代碼遷移;代碼語句;機器翻譯;注意力機制

      中圖分類號:TP311.5 文獻標(biāo)志碼:A 文章編號:1001-3695(2023)10-031-3082-09

      doi:10.19734/j.issn.1001-3695.2023.03.0093

      Source code migration model based on hierarchical attention mechanism

      Li Zheng1,Xu Mingrui1,Wu Yonghao1,Liu Yong1,Chen Xiang2,Wu Shumei1,Liu Hengyuan1

      (1.College of Information Science & Technology,Beijing University of Chemical Technology,Beijing 100029,China;2.School of Information Science & Technology,Nantong University,Nantong Jiangsu 226019,China)

      Abstract:To address the semantic consistency problem of migrated code in the source code migration model,this paper introduced the statement-level attention mechanism based on the token-level attention mechanism,proposed a source code migration model HPGN based on the hierarchical attention mechanism,and designed state feeding mechanisms.During migration,the statement-level attention mechanism aligned the features of source code statements and migrated code statements,the token-level attention mechanism extracted tokens from the aligned code statements,and the state feeding mechanism passed the feature of adjacent migrated code statement,thus improving the semantic consistency of migrated code.Experimenting on a real project dataset,the results show that HPGN improves the overall score by 3.4 over the best comparison model while having fewer model parameters.In addition,ablation experiments validate the effectiveness of the state feeding mechanisms and HPGN hierarchical architecture.

      Key words:code migration;code statement;machine translation;attention mechanism

      0 引言

      隨著計算機軟硬件的快速更新,編程語言也在不斷發(fā)展與迭代。為了適應(yīng)新的軟硬件環(huán)境,傳統(tǒng)的業(yè)務(wù)系統(tǒng)需要采用新的編程語言重寫代碼,這一過程稱為代碼遷移。然而,現(xiàn)代工業(yè)項目的代碼規(guī)模龐大,實現(xiàn)代碼遷移既耗時又容易出錯[1]。因此,研究人員嘗試研究源代碼遷移技術(shù)來解決這一問題,期望在不改變程序語義的情況下,將源代碼轉(zhuǎn)換成目標(biāo)代碼,從而減輕開發(fā)人員的負擔(dān)。最初的研究采用基于規(guī)則的方法遷移源代碼[2]。這種方法需要開發(fā)人員為不同編程語言提供正確且完整的轉(zhuǎn)換規(guī)則,導(dǎo)致源代碼遷移模型的開發(fā)流程低效且容易出錯。為了自動構(gòu)建源代碼遷移模型,研究人員受到自然語言翻譯研究工作的啟發(fā),提出了基于統(tǒng)計機器翻譯(statistical machine translation,SMT)的源代碼遷移模型[3~5]。然而此類方法受限于模型的理解能力[3],需要人工定義語法規(guī)則或遷移模板的方式輔助模型生成遷移代碼[4,5]。隨著神經(jīng)機器翻譯(neural machine translation,NMT)模型的快速發(fā)展,研究人員開始采用NMT模型實現(xiàn)自動化的代碼遷移工作[1,6,7]。這些研究通常采用序列到序列模型,把代碼文本作為模型的輸入,讓模型學(xué)習(xí)不同編程語言的遷移規(guī)則。然而,一些研究表明此類模型忽略了代碼結(jié)構(gòu)特征,讓模型難以有效地理解源代碼的語義[8,9]。因此,當(dāng)前研究面臨的難點是如何使模型從源代碼中獲取特征,并將其轉(zhuǎn)換為語義更準(zhǔn)確的目標(biāo)代碼。

      為了解決該問題,有研究提出使用翻譯模型翻譯源代碼結(jié)構(gòu)特征實現(xiàn)源代碼遷移。例如,Chen等人[10]提出了一種基于解析樹的樹到樹(tree-to-tree)翻譯模型,通過注意力機制對齊源代碼的抽象語法樹(abstract syntax tree)并轉(zhuǎn)換為目標(biāo)代碼的抽象語法樹。該實驗證明注意力機制能對齊源代碼和目標(biāo)代碼抽象語法樹的節(jié)點,提升代碼遷移的準(zhǔn)確性。然而,該方法受限于解析樹本身存在的不足:a)抽象語法樹會忽略某些語義節(jié)點,例如“+”“>”“≤”和其他一些符號會被抽象化為BinOpSub節(jié)點[11],這樣的解析樹不適合用于代碼遷移;b)具體語法樹(concrete syntax tree)包含源代碼中每個詞的結(jié)構(gòu)特征,但其語義節(jié)點較多,增加了模型理解和生成代碼的難度。另一個可行的策略是對大量模型參數(shù)的注意力機制神經(jīng)網(wǎng)絡(luò)進行預(yù)訓(xùn)練,然后在代碼遷移任務(wù)上微調(diào)至最佳效果。這種方法的有效性得益于深度Transformer模型的理解和生成能力[12]。但許多研究[1,6,7,13]仍把代碼文本作為模型輸入,忽略了代碼結(jié)構(gòu)特征。除此之外,基于對已有源代碼遷移工作的分析可以發(fā)現(xiàn),這些工作通常從解析樹和模型的角度提升遷移代碼的精度,很少關(guān)注遷移代碼的語義一致性問題,導(dǎo)致遷移代碼和源代碼的語義存在差異。

      為了解決上述問題,本文提出在代碼遷移過程中,引導(dǎo)模型關(guān)注代碼語句的語法和語義特征,以提升代碼遷移的語義一致性。Hindle等人[14]證明了編程語言是重復(fù)性高、可預(yù)測性強的語言,并且比自然語言更有規(guī)則。Zhang等人[15]通過實驗證明代碼語句的語法具有規(guī)則性,并且代碼語句序列也具有順序依賴關(guān)系。這些研究說明了代碼語句的語法是可預(yù)測的,并且代碼語句間存在上下文聯(lián)系。此外,通過分析代碼遷移數(shù)據(jù)集可以發(fā)現(xiàn),許多語義相似的源代碼和目標(biāo)代碼的語句中有著相似的關(guān)鍵字、標(biāo)識符和運算符等詞符特征。因此,在源代碼轉(zhuǎn)換為目標(biāo)代碼的過程中,可以通過注意力機制對齊并轉(zhuǎn)換源代碼和目標(biāo)代碼語句級別的語法和語義特征,從而進一步提高代碼遷移的精度。

      基于上述研究的啟發(fā),本文在詞符(token)注意力機制的基礎(chǔ)上,引入語句(statement)注意力機制,提出了基于層次注意力機制的代碼遷移模型HPGN(hierarchical pointer-generator network)。該模型由層次編碼器(詞符編碼器和語句編碼器)和層次譯碼器(詞符譯碼器和語句譯碼器)組成。HPGN的源代碼遷移流程主要包括:首先,層次編碼器編碼源代碼語句序列,提取源代碼語句內(nèi)的語法和語義特征以及語句間上下文特征;其次,語句譯碼器通過語句注意力機制譯碼目標(biāo)代碼的語句特征,并對齊源代碼語句;最后,詞符譯碼器通過詞符注意力機制,從對齊的源代碼語句中提取詞符,并依據(jù)目標(biāo)代碼語句特征生成完整的目標(biāo)代碼語句。

      基于上述流程,本文為HPGN設(shè)計了殘差和門控兩種狀態(tài)傳遞機制,并用指針生成網(wǎng)絡(luò)(pointer-generator network)設(shè)計了新的損失函數(shù)。狀態(tài)傳遞機制讓層次譯碼器捕獲相鄰語句的上下文特征,提升譯碼質(zhì)量。損失函數(shù)采用新的懲罰機制,以懲罰不均衡的語句級別和詞符級別注意力分布。

      本文提出了基于層次注意力機制的源代碼遷移模型HPGN,該模型在詞符注意力機制的基礎(chǔ)上引入了語句注意力機制,從而更好地在代碼遷移過程中保持語義的一致性;設(shè)計了兩種狀態(tài)傳遞機制,使層次譯碼器在譯碼時能夠獲取更豐富的相鄰代碼語句上下文特征,進而提升譯碼質(zhì)量。

      1 相關(guān)技術(shù)

      1.1 門控循環(huán)單元

      綜上所述,指針生成網(wǎng)絡(luò)能用注意力機制生成或提取詞符。HPGN采用該網(wǎng)絡(luò)注意力機制,有助于對齊源代碼語句和提取語句中的關(guān)鍵字、標(biāo)識符和運算符等詞符,保持遷移代碼的語義一致性。

      2 基于層次注意力機制的源代碼遷移模型

      本文把源代碼遷移任務(wù)轉(zhuǎn)換為源代碼語句到目標(biāo)代碼語句的翻譯任務(wù),即在不改變源代碼語義情況下把源代碼語句序列轉(zhuǎn)換成目標(biāo)代碼語句序列。

      該任務(wù)包括三個子任務(wù):

      a)理解源代碼每條語句的語法和語義特征以及語句序列的上下文關(guān)系,進而提取源代碼特征;

      b)依據(jù)源代碼特征和源代碼每條語句的特征,通過對齊源代碼語句的方式預(yù)測目標(biāo)代碼的語句特征;

      c)從對齊的源代碼語句中提取詞符,并依據(jù)目標(biāo)代碼的語句特征生成符合目標(biāo)代碼語法的語句。

      為實現(xiàn)源代碼遷移,本文引入語句注意力機制,提出基于層次注意力機制的源代碼遷移模型HPGN,其架構(gòu)如圖2所示。該模型由層次編碼器和層次譯碼器組成。層次編碼器用于實現(xiàn)子任務(wù)a),層次譯碼器用于實現(xiàn)子任務(wù)b)和c)。

      此外,本文設(shè)計的狀態(tài)傳遞機制作用于層次譯碼器,以捕獲更豐富的相鄰語句的上下文特征。本章將詳細介紹數(shù)據(jù)預(yù)處理方法、層次編碼器、層次譯碼器以及狀態(tài)傳遞機制。

      2.1 數(shù)據(jù)預(yù)處理

      不同的編程語言的編程格式并不一樣,而神經(jīng)網(wǎng)絡(luò)從格式不統(tǒng)一的代碼中提取特征較為低效。為了解決該問題,本文設(shè)計了三個步驟,把代碼格式化為統(tǒng)一風(fēng)格的代碼語句序列:a)格式化并劃分代碼語句;b)訓(xùn)練分詞器,分割語句詞符;c)規(guī)范化語句的格式。

      為了劃分出統(tǒng)一格式的代碼語句,本文首先采用了格式化工具Astyle(http://astyle.sourceforge.net/)對所有代碼片段格式化。格式化后的代碼片段劃分成語句序列,使得代碼文本具有語句級別的順序關(guān)系。為了對源代碼分詞,本文采用了Tokenizers(https://huggingface.co/docs/tokenizers/index)工具訓(xùn)練了字節(jié)對編碼(Byte-pair encoding,BPE)分詞器。該分詞器能夠從數(shù)據(jù)集的代碼語句中學(xué)習(xí)詞符的合并規(guī)則,并建立子詞(subword)單詞表,使得代碼中不常見的標(biāo)識符能映射至多個詞符,而不是被替換為未知詞符〈unk〉。例如,標(biāo)識符“addAll”可能會被映射成詞符“add”和“All”。字節(jié)對編碼分詞器不僅保留了源代碼的語義,還解決了不常見的標(biāo)識符導(dǎo)致的OOV(out-of-vocabulary)問題。

      最后,規(guī)范化代碼語句的序列和格式。為了使詞符譯碼器能夠生成有限長度的代碼語句,輸入序列首尾分別插入詞符〈s〉和〈/s〉用于引導(dǎo)詞符開始預(yù)測和結(jié)束預(yù)測。同理,本文定義了語句序列[〈s〉,〈Sart〉,〈/s〉]和[〈s〉,〈/Sart〉,〈/s〉]用于引導(dǎo)語句開始預(yù)測和結(jié)束預(yù)測。為了讓層次譯碼器預(yù)測未來的輸出,語句序列和詞符序列向前移動一個位置作為層次譯碼器輸出的目標(biāo)。此外,為了將長度不一致的語句并行地輸入給網(wǎng)絡(luò),本文設(shè)計了兩種長度規(guī)范化操作:

      a)對于限制長度以內(nèi)的語句,使用詞符〈pad〉對序列進行填充,直至達到限制長度。

      b)對于超過限制長度的語句,則按照限制長度對語句進行截斷;隨后以詞符〈line-break〉為首,拼接上語句的剩余部分作為下一條語句。

      如圖3所示,本文對源代碼語句進行了如下操作。對于長度在限制范圍內(nèi)的原語句1、3和4,直接采用a)操作,即在末尾填充〈pad〉;對于長度超出限制的原語句2,先采用b)操作,即根據(jù)限制長度截斷該語句,并用〈line-break〉拼接剩余部分,然后再采用a)操作對剩余部分進行填充。

      數(shù)據(jù)預(yù)處理完成后,詞嵌入網(wǎng)絡(luò)將語句序列的每個詞符映射成可訓(xùn)練的h維表征向量。這些向量輸入到層次編碼器和層次譯碼器中,模型開始進行訓(xùn)練和更新。

      2.2 層次編碼器

      層次編碼器包含詞符編碼器和語句編碼器,用于編碼代碼詞符序列和代碼語句序列以獲得代碼的特征向量。為了更好地表征源代碼,該網(wǎng)絡(luò)旨在理解每條源代碼語句的語法和語義特征,以及語句間的結(jié)構(gòu)和上下文。具體而言,首先詞符編碼器將詞符表征向量編碼為語句上下文向量,然后語句編碼器將語句上下文向量編碼為源代碼上下文向量。

      2.2.1 詞符編碼器

      如圖2左下角所示,詞符編碼器是一個雙向的GRU神經(jīng)網(wǎng)絡(luò),用于理解源代碼語句的語法和語義特征。詞符編碼器編碼代碼語句S為上下文向量CS和隱藏狀態(tài)HS。其中,CS是由雙向GRU的兩個最終隱藏狀態(tài)經(jīng)全連接網(wǎng)絡(luò)映射得到的。對于一組詞符序列表征向量Xi=[Xi1,Xi2,…,Xim],語句上下文向量Cxi和隱藏狀態(tài)HXi的計算公式如下:

      其中:Concat是將多個維度相同的向量按元素級別拼接的操作;Dense是全連接網(wǎng)絡(luò),它將輸入向量映射為h維的向量。通過詞符編碼器對代碼語句進行表征,語句上下文向量CXi包含代碼語句Xi的語法和語義特征,隱藏狀態(tài)HXi包含代碼語句中每個詞符的上下文特征。

      2.2.2 語句編碼器

      語句編碼器與詞符編碼器具有相同的架構(gòu)和類似的功能,但它用于從代碼語句上下文向量的序列中獲取代碼語句間的結(jié)構(gòu)特征和上下文特征。具體而言,語句編碼器從一組代碼語句上下文CX=[CX1,CX2,…,CXn]獲取語句的隱藏狀態(tài)H和代碼上下文向量C,其公式表示為

      2.3 層次譯碼器

      層次譯碼器由語句譯碼器和詞符譯碼器組成,并結(jié)合了詞符編碼器。在這里,詞符編碼器協(xié)助層次譯碼器預(yù)測目標(biāo)語句特征的特征,而層次譯碼器通過對齊源代碼語句及其詞符來預(yù)測目標(biāo)語句。當(dāng)層次編碼器完成源代碼的表征,層次譯碼器利用層次編碼器的特征(代碼上下文向量C、語句隱藏狀態(tài)H和詞符隱藏狀態(tài)HXi)和來自詞符編碼器的語句上下文向量Yi預(yù)測目標(biāo)代碼語句。

      2.3.1 語句譯碼器

      語句譯碼器的架構(gòu)與指針生成網(wǎng)絡(luò)的譯碼器架構(gòu)類似,但它的目的是預(yù)測下一條目標(biāo)代碼語句的上下文向量,并用語句注意力機制來對齊源代碼語句。為了消除不相關(guān)語句的注意力分布,增強兩種語言相關(guān)語句的對應(yīng)關(guān)系,同時減少計算量和加快訓(xùn)練速度,本文設(shè)置了語句注意力機制,使其對齊源代碼中最相關(guān)的k條語句。為了進行預(yù)測和對齊操作,語句譯碼器使用語句編碼器的輸出(代碼上下文向量C、語句隱藏狀態(tài)H),并在詞符編碼器協(xié)助下進行預(yù)測:

      其中:S0是代碼上下文向量C;Ci+1是目標(biāo)代碼下一條語句的上下文向量;CoverageAttention是帶有覆蓋機制的注意力機制;TopK輸出注意力分布ai相同維度值最大的k個元素的索引;Gather是按索引聚集向量操作;Mi+1是與目標(biāo)語句相關(guān)的前k條源代碼語句的加權(quán)隱藏狀態(tài),包含了對齊語句的語法特征和語義特征。

      2.3.2 詞符譯碼器

      詞符譯碼器和指針生成網(wǎng)絡(luò)的譯碼器架構(gòu)相同。該譯碼器進一步理解目標(biāo)代碼語句上下文向量,同時通過詞符注意力機制從對齊的源代碼語句提取表示關(guān)鍵字、標(biāo)識符和運算符等詞符,生成符合目標(biāo)代碼語法的語句。詞符譯碼器獲取目標(biāo)代碼的語句上下文向量Ci+1后,通過Pointer和Generator預(yù)測目標(biāo)詞符yi,j+1:

      其中:SYi0是目標(biāo)語句上下文向量C*i+1;依據(jù)指針—生成器機制描述,Pointer是指針概率分布計算操作;Generator是生成器概率分布計算操作;Pgen合并以上兩者的概率分布。

      此外,本文還為HPGN設(shè)計了新的損失函數(shù)。由于層次譯碼器采用了帶有覆蓋機制的注意力機制CoverageAttention,所以需要對語句級別和詞符級別不均衡的注意力分布進行懲罰。本文在指針生成網(wǎng)絡(luò)損失函數(shù)的基礎(chǔ)上進行了改進,并引入超參數(shù)λ1和λ2來調(diào)整損失函數(shù)在語句級別和詞符級別的權(quán)重:

      2.4 狀態(tài)傳遞機制

      為了使語句譯碼器捕獲更豐富的上下文特征,本文提出了狀態(tài)傳遞機制,將相鄰語句的最終詞符隱藏狀態(tài)傳遞給語句譯碼器。本文設(shè)計了殘差和門控兩種不同狀態(tài)傳遞機制,使得相鄰語句的隱藏狀態(tài)CYi+1及其最終詞符隱藏狀態(tài)SYi+1m更新至語句譯碼器隱藏狀態(tài)Si中。

      2.4.1 殘差狀態(tài)傳遞機制

      殘差狀態(tài)傳遞機制的架構(gòu)如圖4所示。該機制基于殘差網(wǎng)絡(luò),能自動對詞符譯碼器隱藏狀態(tài)SYi+1m和語句譯碼器隱藏狀態(tài)Si做殘差運算,公式如下:

      其中:SY1m是零向量;式(32)的結(jié)果代替Si作為語句譯碼器第t時刻的隱藏狀態(tài)。

      2.4.2 門控狀態(tài)傳遞機制

      門控狀態(tài)傳遞機制架構(gòu)如圖5所示。該機制基于門控網(wǎng)絡(luò),能夠在向量元素級別上調(diào)整詞符譯碼器隱藏狀態(tài)SYi+1m和語句譯碼器隱藏狀態(tài)Si:

      其中:SY1m是零向量;Zfeedi是h維的權(quán)重向量;式(34)的結(jié)果代替Si作為語句譯碼器第t時刻的隱藏狀態(tài)。

      3 實驗設(shè)置

      3.1 研究問題

      RQ1:本文模型在代碼遷移任務(wù)中表現(xiàn)如何?

      RQ1的目標(biāo)是評估基于層次注意力機制的源代碼遷移模型HPGN在兩個遷移任務(wù)(Java到C#和C#到Java)中的表現(xiàn)。為了評估模型,實驗選擇具有狀態(tài)傳遞機制的HPGN和對比模型進行對比,其中對比模型在3.4節(jié)中進行了介紹。為了方便表示,具有殘差狀態(tài)傳遞機制(如2.4.1節(jié)所描述)的模型稱為ResNet-HPGN,具有門控狀態(tài)傳遞機制(如2.4.2節(jié)所描述)的模型稱為Gate-HPGN。

      RQ2:狀態(tài)傳遞機制對模型的性能有怎樣的影響?

      RQ2的目標(biāo)是為了探究2.4節(jié)所描述的狀態(tài)傳遞機制對HPGN性能的影響。為此,實驗對比了無狀態(tài)傳遞機制的HPGN(表示為Base-HPGN)與ResNet-HPGN以及Gate-HPGN的代碼遷移精度。

      RQ3:與基于詞符注意力機制的模型相比,基于層次注意力機制的模型有什么優(yōu)勢?

      RQ3是為了探究基于層次注意力機制的源代碼遷移模型HPGN在代碼遷移過程中的優(yōu)勢。如第2章所描述,HPGN拓展于基于詞符注意力機制的指針生成網(wǎng)絡(luò),引入了語句注意力機制。比較HPGN和指針生成網(wǎng)絡(luò)可以更好地評估層次架構(gòu)的有效性。

      3.2 數(shù)據(jù)集

      本文選擇源代碼遷移研究廣泛使用的C#-Java數(shù)據(jù)集CodeTrans[7]。該數(shù)據(jù)集來源于開源項目Lucene、POI、JGit以及Antlr。這些項目最初基于Java語言開發(fā),后遷移至C#語言。CodeTrans數(shù)據(jù)集通過挖掘遷移前后兩個版本中相似目錄下的相似函數(shù)代碼的方式完成收集,隨后基于抽象語法樹和數(shù)據(jù)流清除長度短、無內(nèi)容以及無數(shù)據(jù)流形式的函數(shù),最終整理劃分獲得的訓(xùn)練集、驗證集和測試集大小分別是10 300、500和1 000。數(shù)據(jù)集中的C#和Java的代碼在函數(shù)聲明語句、函數(shù)調(diào)用語句、變量聲明語句、分值控制語句上相似,但是在標(biāo)識符名稱、匿名數(shù)據(jù)類型關(guān)鍵字、函數(shù)體異常處理語句、父類構(gòu)造函數(shù)調(diào)用語句、增強for循環(huán)語句以及內(nèi)置函數(shù)調(diào)用語句等內(nèi)容存在較大的文本差異。因此神經(jīng)機器翻譯模型需要理解源代碼的語法和語義特征,將其轉(zhuǎn)換為語義一致的目標(biāo)代碼。

      本文采用字節(jié)對編碼分詞器和具體語法樹解析工具tree-sitter(https://tree-sitter.github.io/tree-sitter/)對代碼分詞,其中字節(jié)對編碼分詞器單詞表大小為4 176。代碼分詞后的統(tǒng)計結(jié)果如表1所示??梢园l(fā)現(xiàn)Java代碼中93.9%的語句詞符量少于20,94.0%的代碼語句數(shù)量少于15;C#代碼中94.4%的語句詞符量少于20,93.5%的代碼語句數(shù)量少于15。此外,C#代碼的平均長度長于Java代碼,并且具體語法樹的詞符量要遠多于代碼片段。為此,實驗設(shè)置C#和Java的最大語句長度為35,設(shè)置語句內(nèi)詞符最大數(shù)量為20。

      3.3 評測指標(biāo)

      實驗采用了已有研究廣泛使用的評測指標(biāo)[10,20,21]評估代碼遷移模型[6,7,13]。a)BLEU[12,22,23],用于計算生成的序列和參考序列的n-gram重疊率,并返回0~100%的分值,BLEU值越高,表示生成的序列越接近參考序列;b)精確匹配(exact match,EM)在早期的代碼遷移任務(wù)中用于評估生成的代碼是否與參考代碼相同;c)CodeBLEU[7]采用BLEU的n-gram匹配算法,并通過代碼解析工具引入了抽象語法樹和數(shù)據(jù)流匹配算法,CodeBLEU根據(jù)代碼的文本、語法和語義特征來評估代碼,給出0~100%的分數(shù),CodeBLEU值越高,代碼生成的質(zhì)量越高;d)總體分值是綜合性能評測指標(biāo),本文依據(jù)文獻[7]提供的模型對比方式,把兩個遷移任務(wù)平均CodeBLEU值作為總體分值,該指標(biāo)可用于評估單個代碼遷移技術(shù)在執(zhí)行多個遷移任務(wù)時的總體性能。

      3.4 對比模型

      本文實驗把具有不同架構(gòu)的模型作為對比模型。最新的基于Transformer模型的研究可以在代碼遷移任務(wù)中取得更好的實驗結(jié)果,但這些研究是從外部數(shù)據(jù)集預(yù)訓(xùn)練的模型[1,6,7,13]。為了消除預(yù)訓(xùn)練模型使用外部數(shù)據(jù)集的干擾,實驗選擇不同架構(gòu)的非預(yù)訓(xùn)練模型作為對比模型:

      a)Naive模型是常用的對比模型[6,7,13],該模型把輸入作為輸出;b)基于短語的統(tǒng)計機器翻譯模型PBSMT(phrase-based statistical machine translation)[3]將序列分解成短語,并經(jīng)統(tǒng)計模型選取由這些短語譯文組合成的最佳序列;c)解析樹翻譯模型tree-to-tree[10]首先把解析樹解析為“左孩子右兄弟”的二叉樹形式,然后經(jīng)二叉樹編碼器和二叉樹譯碼器翻譯源代碼的解析樹;d)Transformer模型是目前代碼遷移任務(wù)中非預(yù)訓(xùn)練的最佳模型[7]。有研究表明模型參數(shù)量越多效果越好[12]。

      本文復(fù)現(xiàn)了tree-to-tree和Transformer神經(jīng)網(wǎng)絡(luò)模型。依據(jù)文獻[7]描述,Transformer模型網(wǎng)絡(luò)層和隱藏層大小設(shè)置為12和768,并使用格式化后的數(shù)據(jù)集進行實驗。此外,tree-to-tree模型的輸入和輸出均采用具體語法樹,其輸出樹的葉子節(jié)點序列作為代碼文本,以排除無關(guān)因素的干擾。

      3.5 實驗參數(shù)設(shè)置

      本節(jié)將介紹訓(xùn)練策略和超參數(shù)設(shè)置。在訓(xùn)練階段,模型采用自回歸策略訓(xùn)練層次譯碼器。自回歸訓(xùn)練策略意味著譯碼器的第t個時刻的輸入來自第t-1個時刻預(yù)測的詞符,可以提高網(wǎng)絡(luò)的泛化能力[24]。

      超參數(shù)和實驗細節(jié)設(shè)置如下:a)epoch設(shè)置為20,batch大小設(shè)置為40;b)為了提升語句對齊質(zhì)量并加速訓(xùn)練,語句譯碼器指針top-K的k值設(shè)置為10;c)網(wǎng)絡(luò)嵌入層和隱藏層設(shè)置為64,編碼器譯碼器設(shè)置為1層;d)依據(jù)指針生成網(wǎng)絡(luò)實驗設(shè)置[19],損失函數(shù)的超參數(shù)λ1和λ2都設(shè)置為1;e)模型的梯度范數(shù)裁剪值設(shè)置為4,并應(yīng)用學(xué)習(xí)率為10-3的Adam優(yōu)化器更新模型參數(shù);f)為了復(fù)現(xiàn)tree-to-tree模型,本文依據(jù)設(shè)備規(guī)格設(shè)置了超參數(shù),其中隱藏層和嵌入層設(shè)置為128,epoch設(shè)置為50;g)實驗環(huán)境為Intel i9 9900k的CPU和RTX 2080Ti 的GPU服務(wù)器。每個實驗大約運行30 h。

      4 結(jié)果分析

      4.1 RQ1:本文模型在代碼遷移任務(wù)中表現(xiàn)如何?

      實驗?zāi)P秃蛯Ρ饶P驮贐LEU、精確匹配(EM)和CodeBLEU指標(biāo)上的評估結(jié)果如表2所示??梢钥闯?,Gate-HPGN總體表現(xiàn)優(yōu)于最佳的對比模型。雖然Transformer模型取得了最高的EM值,但是在BLEU和CodeBLEU指標(biāo)上,Gate-HPGN表現(xiàn)更好,在Java到C#任務(wù)分別提升了2.57和0.73,在C#到Java任務(wù)分別提升了8.08和6.06。在總體分值方面,Gate-HPGN的性能相比于最佳的對比模型提升了3.4。從譯碼器架構(gòu)角度分析EM結(jié)果,Transformer得益于模型參數(shù)量和自注意力機制,譯碼性能更優(yōu);而Gate-HPGN譯碼時受GRU長程依賴問題的影響,使得模型對譯碼器端代碼的理解存在性能損失[25]。此外,該實驗依據(jù)了Chen等人[10]的建議設(shè)置tree-to-tree模型超參數(shù),然而該模型性能表現(xiàn)不佳。從表1的數(shù)據(jù)集詞符統(tǒng)計可知,該模型輸入和輸出的具體語法樹的詞符數(shù)量遠多于代碼文本的詞符數(shù)量。這表明盡管具體語法樹包含了源代碼的結(jié)構(gòu)特征,但其過多的詞符使得模型難以理解并生成具有復(fù)雜結(jié)構(gòu)特征的代碼。

      此外,從評測指標(biāo)的角度對表2結(jié)果進行分析。在代碼遷移研究領(lǐng)域中,BLEU指標(biāo)評估了輸出代碼和目標(biāo)代碼的相似程度,沒有考慮代碼的語法和語義特征;EM指標(biāo)嚴(yán)格判斷輸出代碼和目標(biāo)代碼是否一致,卻忽略了相同語法和語義特征下的不同代碼;CodeBLEU指標(biāo)采用了代碼解析工具,通過對比輸出代碼和目標(biāo)代碼的解析樹特征,從文本、語法和語義方面評估輸出代碼。例如,一些代碼語句的功能相似,但詞符形式不相同,這導(dǎo)致EM指標(biāo)不能有效評估代碼語義特征。因此從結(jié)果表明,tree-to-tree模型性能與PBSMT相當(dāng),而HPGN在代碼語義遷移的性能優(yōu)于最佳的對比模型。

      為了深度分析HPGN和Transformer源代碼遷移性能,本文召集了五位有項目開發(fā)經(jīng)驗且未參與研究的志愿者對輸出結(jié)果進行人工評估。為了保證評估結(jié)果的公平性和準(zhǔn)確性,本文隨機抽取了與表2結(jié)果相近的100條數(shù)據(jù),并定制了評測的指標(biāo)和打分標(biāo)準(zhǔn),如表3所示?!罢Z法”指代碼語法完整度,“語義”則依據(jù)變量、類型、標(biāo)識符和表達式等角度評估輸出代碼和源代碼功能相似度。人工評估結(jié)果如表4所示,展示了每個模型在兩個指標(biāo)下的最大、最小的平均得分??梢园l(fā)現(xiàn),Gate-HPGN在語義上的性能優(yōu)于Transformer,在語法上和Transformer相當(dāng)。從模型架構(gòu)上分析,Transformer得益于模型參數(shù)量和自注意力機制,能減少輸出代碼的語法錯誤;HPGN得益于層次架構(gòu),能更準(zhǔn)確地關(guān)注到源代碼語句的語法和語義以及語句間的上下文特征,生成語義相關(guān)的代碼。

      表5給出了HPGN和對比模型輸出樣例。樣例1中源代碼包含簡短的函數(shù)調(diào)用語句。Transformer模型輸出的代碼在語義上發(fā)生了改變;tree-to-tree模型輸出的代碼不能準(zhǔn)確表達源代碼的語義;Gate-HPGN生成的代碼最接近參考代碼,但多出了額外的符號。在這里,Transformer模型不能有效地理解源代碼的標(biāo)識符和函數(shù)的實參列表;tree-to-tree模型沒有為源代碼中的詞符設(shè)計遷移架構(gòu),造成語義缺失;Gate-HPGN能理解源代碼的語法和語義特征。樣例2中源代碼有著復(fù)雜的代碼語句,所有模型的輸出存在語義偏差的問題。Transformer模型的輸出脫離了源代碼語義。通過對訓(xùn)練集的分析,本文認為這是因模型很少學(xué)習(xí)該遷移模式,使得模型憑借訓(xùn)練時的“記憶”背出最可能的代碼片段。tree-to-tree模型輸出的代碼中有兩條語句的語義也發(fā)生了改變,這是因為模型難以理解復(fù)雜代碼語句所對應(yīng)的具體語法樹。Gate-HPGN輸出代碼中第二條語句復(fù)制對應(yīng)源代碼語句的實參列表并自制了一個offsetmin函數(shù),最大程度地保留了源代碼語義。

      本文比較了HPGN和最佳對比模型Transformer的模型參數(shù)量。如表6所示,本文模型在參數(shù)量上顯著地少于最佳的對比模型,這意味著該HPGN可以以較少的計算資源實現(xiàn)較好的遷移性能。該結(jié)果反映了Transformer模型需要大量的模型參數(shù)來取得理想的遷移性能,而HPGN能更高效地遷移源代碼。

      RQ1總結(jié):在代碼遷移任務(wù)中,本文提出基于層次注意力機制的源代碼遷移模型HPGN相較于最佳的對比模型,在模型參數(shù)量較少的情況下具有最佳遷移性能。

      4.2 RQ2:狀態(tài)傳遞機制對模型的性能有怎樣的影響?

      表7展示了Base-HPGN與Gate-HPGN以及ResNet-HPGN的對比結(jié)果。Gate-HPGN的結(jié)果在三個指標(biāo)的分值優(yōu)于其他模型,而ResNet-HPGN在Java到C#代碼遷移任務(wù)中三個指標(biāo)的分值均低于Base-HPGN。這樣的結(jié)果表明狀態(tài)傳遞機制是有助于層次譯碼器捕獲相鄰語句上下文特征,而門控狀態(tài)傳遞機制性能更好。從模型角度分析,這是因為門控狀態(tài)傳遞機制能細致地更新語句隱藏狀態(tài)向量的每個元素,使得門控網(wǎng)絡(luò)生成的隱藏狀態(tài)比殘差網(wǎng)絡(luò)融合成的隱藏狀態(tài)所包含的特征更豐富。

      [14]Hindle A,Barr E T,Gabel M,et al.On the naturalness of software[J].Communications of the ACM,2016,59(5):122-131.

      [15]Zhang Jian,Wang Xu,Zhang Hongyu,et al.A novel neural source code representation based on abstract syntax tree[C]//Proc of the 41st International Conference on Software Engineering .Piscataway,NJ:IEEE Press,2019:783-794.

      [16]Cho K,Van Merriёnboer B,Gulcehre C,et al.Learning phrase representations using RNN encoder-decoder for statistical machine translation[C]//Proc of Conference on Empirical Methods in Natural Language Processing.Stroudsburg,PA:Association for Computational Linguistics,2014:1724-1734.

      [17]Schuster M,Paliwal K K.Bidirectional recurrent neural networks [J].IEEE Trans on Signal Processing,1997,45(11):2673-2681.

      [18]Bahdanau D,Cho K,Bengio Y.Neural machine translation by jointly learning to align and translate[C]//Proc of the 5th International Conference on Learning Representation.2015.

      [19]See A,Liu P J,Manning C D.Get to the point:summarization with pointer-generator networks [C]//Proc of the 55th Annual Meeting of Association for Computational Linguistics.Stroudsburg,PA:Association for Computational Linguistics,2017:1073-1083.

      [20]Li Zheng,Wu Yonghao,Peng Bin,et al.SeTransformer:a Transformer-based code semantic parser for code comment generation[J].IEEE Trans on Reliability,2023,72(1):258-273.

      [21]Yang Guang,Liu Ke,Chen Xiang,et al.CCGIR:information retrieval-based code comment generation method for smart contracts[J].Knowledge-Based Systems,2022,237:107858.

      [22]Cho K,Merrienboer B V,Bahdanau D,et al.On the properties of neural machine translation:encoder-decoder approaches[C]//Proc of the 8th Workshop on Syntax,Semantics and Structure in Statistical Translation.Stroudsburg,PA:Association for Computational Linguistics,2014:103-111.

      [23]Papineni K,Roukos S,Ward T,et al.BLEU:a method for automatic evaluation of machine translation[C]//Proc of the 40th annual meeting of the Association for Computational Linguistics.Stroudsburg,PA:Association for Computational Linguistics,2002:311-318.

      [24]Zhang Wen,F(xiàn)eng Yang,Meng Fandong,et al.Bridging the gap between training and inference for neural machine translation[C]//Proc of the 57th Annual Meeting of the Association for Computational Linguistics.Stroudsburg,PA:Association for Computational Linguistics,2019:4334-4343.

      [25]Bengio Y,Simard P,F(xiàn)rasconi P.Learning long-term dependencies with gradient descent is difficult [J].IEEE Trans on Neural Networks,1994,5(2):157-166.

      [26]Luong T,Pham H,Manning C D.Effective approaches to attention-based neural machine translation[C]//Proc of Conference on Empirical Methods in Natural Language Processing.Stroudsburg,PA:Association for Computational Linguistics,2015:1412-1421.

      [27]李洪政,馮沖,黃河燕.稀缺資源語言神經(jīng)網(wǎng)絡(luò)機器翻譯研究綜述 [J].自動化學(xué)報,2021,47(6):1217-1231.(Li Hongzheng,F(xiàn)eng Chong,Huang Heyan.A survey on low-resource neural machine translation[J].Acta Automatica Sinica,2021,47(6):1217-1231.)

      [28]Sennrich R,Haddow B,Birch A.Improving neural machine translation models with monolingual data[C]//Proc of the 54th Annual Meeting of the Association for Computational Linguistics.Stroudsburg,PA:Association for Computational Linguistics,2016:86-96.

      [29]李亞超,熊德意,張民.神經(jīng)機器翻譯綜述[J].計算機學(xué)報,2018,41(12):2734-2755.(Li Yachao,Xiong Deyi,Zhang Min.A survey of neural machine translation[J].Chinese Journal of Computers,2018,41(12):2734-2755.)

      收稿日期:2023-03-13;修回日期:2023-05-09基金項目:國家自然科學(xué)基金資助項目(61872026,61902015)

      作者簡介:李征(1974-),男,河北清苑人,教授,博導(dǎo),博士,CCF會員,主要研究方向為軟件測試、源代碼分析和維護;徐明瑞(1998-),男,重慶人,碩士,主要研究方向為代碼表征學(xué)習(xí)和代碼遷移;吳永豪(1995-),男,江西宜春人,博士研究生,主要研究方向為軟件測試和錯誤定位;劉勇(1984-),男(通信作者),湖南常德人,副教授,碩導(dǎo),博士,主要研究方向為源代碼分析、變異測試和錯誤定位(lyong@mail.buct.edu.cn);陳翔(1980-),男,江蘇南通人,副教授,碩導(dǎo),博士,主要研究方向為軟件維護和軟件測試;武淑美(1997-),女,山東濟寧人,博士研究生,主要研究方向為錯誤定位和Web測試;劉恒源(1997-),男,河南周口人,博士研究生,主要研究方向為軟件測試、代碼表征學(xué)習(xí)和錯誤定位.

      猜你喜歡
      機器翻譯注意力機制
      面向短文本的網(wǎng)絡(luò)輿情話題
      基于自注意力與動態(tài)路由的文本建模方法
      基于深度學(xué)習(xí)的問題回答技術(shù)研究
      基于LSTM?Attention神經(jīng)網(wǎng)絡(luò)的文本特征提取方法
      基于注意力機制的雙向LSTM模型在中文商品評論情感分類中的研究
      軟件工程(2017年11期)2018-01-05 08:06:09
      InsunKBQA:一個基于知識庫的問答系統(tǒng)
      互聯(lián)網(wǎng)+新時代下人機翻譯模式研究
      考試周刊(2017年2期)2017-01-19 09:13:50
      “語聯(lián)網(wǎng)+行業(yè)” 助力中國偉大復(fù)興
      考試周刊(2017年2期)2017-01-19 09:12:54
      大數(shù)據(jù)背景下石油科技翻譯
      智富時代(2016年12期)2016-12-01 17:03:10
      機器翻譯不可盲取
      丰原市| 安吉县| 青神县| 沂南县| 淮北市| 山丹县| 孙吴县| 马鞍山市| 亳州市| 峨山| 高密市| 怀远县| 泗阳县| 陇南市| 台南县| 怀来县| 靖州| 平邑县| 焉耆| 阿拉尔市| 杂多县| 玛多县| 平和县| 漠河县| 兴仁县| 兴义市| 买车| 鹤山市| 明星| 宾阳县| 蛟河市| 合阳县| 常德市| 时尚| 黎平县| 辽宁省| 阿瓦提县| 长宁县| 玉环县| 东平县| 武城县|