国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

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

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

關鍵詞:代碼遷移;代碼語句;機器翻譯;注意力機制

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

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

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

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

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

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

1 相關技術

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

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

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

本文把源代碼遷移任務轉換為源代碼語句到目標代碼語句的翻譯任務,即在不改變源代碼語義情況下把源代碼語句序列轉換成目標代碼語句序列。

該任務包括三個子任務:

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2 層次編碼器

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

2.2.1 詞符編碼器

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

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

2.2.2 語句編碼器

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

2.3 層次譯碼器

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

2.3.1 語句譯碼器

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

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

2.3.2 詞符譯碼器

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

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

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

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

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

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

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

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

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

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

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

3 實驗設置

3.1 研究問題

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

RQ1的目標是評估基于層次注意力機制的源代碼遷移模型HPGN在兩個遷移任務(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的目標是為了探究2.4節(jié)所描述的狀態(tài)傳遞機制對HPGN性能的影響。為此,實驗對比了無狀態(tài)傳遞機制的HPGN(表示為Base-HPGN)與ResNet-HPGN以及Gate-HPGN的代碼遷移精度。

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

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

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ù)流清除長度短、無內容以及無數(shù)據(jù)流形式的函數(shù),最終整理劃分獲得的訓練集、驗證集和測試集大小分別是10 300、500和1 000。數(shù)據(jù)集中的C#和Java的代碼在函數(shù)聲明語句、函數(shù)調用語句、變量聲明語句、分值控制語句上相似,但是在標識符名稱、匿名數(shù)據(jù)類型關鍵字、函數(shù)體異常處理語句、父類構造函數(shù)調用語句、增強for循環(huán)語句以及內置函數(shù)調用語句等內容存在較大的文本差異。因此神經機器翻譯模型需要理解源代碼的語法和語義特征,將其轉換為語義一致的目標代碼。

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

3.3 評測指標

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

3.4 對比模型

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

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

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

3.5 實驗參數(shù)設置

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

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

4 結果分析

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

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

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

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

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

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

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

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

表7展示了Base-HPGN與Gate-HPGN以及ResNet-HPGN的對比結果。Gate-HPGN的結果在三個指標的分值優(yōu)于其他模型,而ResNet-HPGN在Java到C#代碼遷移任務中三個指標的分值均低于Base-HPGN。這樣的結果表明狀態(tài)傳遞機制是有助于層次譯碼器捕獲相鄰語句上下文特征,而門控狀態(tài)傳遞機制性能更好。從模型角度分析,這是因為門控狀態(tài)傳遞機制能細致地更新語句隱藏狀態(tài)向量的每個元素,使得門控網絡生成的隱藏狀態(tài)比殘差網絡融合成的隱藏狀態(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].自動化學報,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].計算機學報,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基金項目:國家自然科學基金資助項目(61872026,61902015)

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

猜你喜歡
機器翻譯注意力機制
面向短文本的網絡輿情話題
基于自注意力與動態(tài)路由的文本建模方法
軟件導刊(2019年1期)2019-06-07 15:08:13
基于深度學習的問題回答技術研究
基于LSTM?Attention神經網絡的文本特征提取方法
基于注意力機制的雙向LSTM模型在中文商品評論情感分類中的研究
軟件工程(2017年11期)2018-01-05 08:06:09
InsunKBQA:一個基于知識庫的問答系統(tǒng)
互聯(lián)網+新時代下人機翻譯模式研究
考試周刊(2017年2期)2017-01-19 09:13:50
“語聯(lián)網+行業(yè)” 助力中國偉大復興
考試周刊(2017年2期)2017-01-19 09:12:54
大數(shù)據(jù)背景下石油科技翻譯
智富時代(2016年12期)2016-12-01 17:03:10
機器翻譯不可盲取
金秀| 兴城市| 汕头市| 沅江市| 长乐市| 应用必备| 儋州市| 旌德县| 博客| 汪清县| 新乐市| 佛坪县| 南汇区| 新津县| 神木县| 承德市| 闻喜县| 神池县| 佛学| 平遥县| 乌恰县| 宽城| 英吉沙县| 拉萨市| 札达县| 重庆市| 万盛区| 滁州市| 安康市| 平阴县| 江城| 宜城市| 和田县| 宁阳县| 桓仁| 芜湖市| 巫溪县| 礼泉县| 松桃| 田东县| 安庆市|