?

融合語法和語義的代碼注釋生成方法

2023-11-10 15:11王瀚森陳鐵明季白楊
小型微型計算機系統 2023年11期
關鍵詞:語法結構源代碼代碼

王瀚森,王 婷,陳鐵明,季白楊

(浙江工業大學 計算機科學與技術學院,杭州 310023)

1 引 言

伴隨互聯網的發展,軟件數量、規模都急劇增大,代碼開發和維護工作中的程序理解問題已成為一大難題.據統計,在軟件開發周期中,有59%的工作用于理解和維護相關軟件源代碼[1],相當耗時耗力,影響工作效率.代碼的維護和復用往往需要對代碼有透徹的理解,程序理解是任何代碼復用和修改的先決條件,代碼注釋對于輔助程序員理解代碼含義是十分重要的[2].現如今,開源代碼倉庫的實際項目中存在大量代碼沒有含義清晰明確的注釋,這導致軟件開發人員在瀏覽代碼時,不得不耗費大量時間去理解代碼的功能,極大影響了開源資源的復用.因此,代碼注釋生成技術需要更加深入的研究.通過深度學習構建編程語言到自然語言注釋的映射模型,在大規模數據庫上學習代碼的抽象特征表示,自動生成含義清晰準確的代碼注釋,不僅可以省去開發人員寫注釋的時間,同時可以用來幫助理解代碼,具有相當大的應用價值.

早期方法是通過預定義人工模板生成注釋.基于預定義的啟發式規則從給定源代碼中提取關鍵字,添加到人工模板中,合成基于自然語言描述的注釋[3-6].此外,基于信息檢索的方法也廣泛應用于代碼注釋生成技術[7-13].這類方法基于信息檢索模型,通過識別出目標模塊內的關鍵單詞,嘗試從軟件倉庫中尋找與目標模塊相似的代碼段,并利用這些相似代碼片段的摘要、注釋或討論生成代碼注釋.深度學習的最新進展催生了新一代數據驅動的代碼注釋生成技術.這種技術很大程度上是受到神經機器翻譯(Neural Machine Translation,NMT)領域的啟發,使用端到端的神經網絡生成注釋.

相較于結構化較弱的自然語言,編程語言是形式化語言,用它們編寫的源代碼具有明確的語法結構[14].源代碼具有語法結構信息和順序語義信息.將結構化的代碼應用到自然語言的神經機器翻譯方法中,難免會丟失編程語言結構特性包含的信息.要理解代碼內容并生成含義準確且可讀性強的代碼注釋,這兩部分信息是必不可少的.過往研究大多只利用其中一種信息,如何將編程語言的語義信息與語法結構信息進行結合,還需要更深入的研究.

針對上述問題,本文提出一種融合語法結構信息和順序語義信息的代碼注釋生成方法,通過將代碼片段轉化為AST,并對AST節點類型進行控制,簡化AST結構.應用多路樹-LSTM[15]以獲得樹形結構的節點表示.再結合源代碼序列表示的語義信息,輸入Transformer[16],以兩種類型的代碼信息為指導訓練注釋生成模型.為了評估本文方法的有效性,本文在大型Java數據集上進行了實驗[17].實驗結果表明,本文方法生成的代碼注釋在BLEU[18]、METEOR[19]和ROUGE[20]評價指標上的得分高于對照模型.

2 相關工作

隨著深度學習技術的發展,基于端到端神經網絡模型的代碼注釋生成研究不斷深入.這一類方法將代碼注釋自動生成任務建模為神經機器翻譯問題.Iyer等[21]首次將深度學習應用到代碼摘要研究中,并提出CODE-NN方法,使用LSTM和注意力機制,生成C#代碼片段和SQL查詢語句的描述.Allamanis等[22]使用CNN和注意力機制作為編碼器,解碼器使用GRU,通過卷積操作將源代碼總結為簡短的、描述性的函數名稱.Wei等[23]提出一種對偶學習的方法,通過代碼摘要和代碼生成兩個任務之間的對偶性訓練模型.針對RNN模型對于長代碼序列進行建模時難以捕獲長距離依賴問題,Ahmad等[24]利用Transformer模型來生成代碼注釋,并利用復制注意力機制和相對位置編碼,有效捕獲長距離依賴(long-range dependencies).

除以上方法外,近期研究人員越發關注代碼的語法結構信息,開始將研究重心轉移到利用AST表示源代碼.其中最具代表性的方法是Hu等[25]提出的DeepCom.通過AST表示源代碼,以保留源代碼的語法結構信息,并提出一種AST遍歷方法SBT(Structure-base Traversal),將AST遍歷成序列結構.隨后,他們基于DeepCom,進一步提出Hybrid-DeepCom[17]方法,結合了源代碼語義信息和AST提供的語法結構信息,并通過使用分隔標識符的方法緩解OOV(out of vocabulary,即需要生成的注釋可能含有未在代碼中出現的單詞)問題.然而這種將AST轉化為序列進行編碼的方式不可避免地丟失了源代碼的語法結構信息.因此,一些工作嘗試使用樹形結構編碼輸入.包括Mou等[26]設計的基于樹的卷積神經網絡(TBCNNs)、Shido等[15]提出的Tree-LSTM,以及Harer等[27]提出的Tree-Transformer.

由于AST節點數量多,導致訓練開銷大,加重模型訓練負擔.為了平衡語法結構信息的保留和降低訓練難度,Chen等[28]提出了一種將長代碼段分割為短AST路徑的方法,從而縮短輸入長度.Wan等[29]將AST轉換為二叉樹,以丟失部分信息為代價減少訓練開銷.Alon等[30]將代碼片段表示為AST中的組合路徑集.Zhang等[31]將抽象語法樹拆分成多個規模更小的語句樹,每次只關注一條語句,降低訓練難度.

總體來看,AST在代碼注釋自動生成技術中的應用為這一方向的研究提供了新的技術途徑.其優勢在于可以保留源代碼的語法結構信息,將源代碼的語法結構信息和語義信息結合,生成高質量的代碼注釋.

3 源代碼的結構化表示

本節將著重介紹源代碼的抽象語法結構化表示.編程語言相較于自然語言,不僅包含語義信息,還有其獨特的語法結構信息.通常情況下,可以采用抽象語法樹(AST)捕捉源代碼的語法結構信息.AST是一種用于表示源代碼語法的抽象樹形結構.AST的葉節點表示代碼中的標識符或變量值,非葉節點表示語言的語法和層次結構.圖1顯示了一個Java代碼片段及其AST的示例.

圖1 Java代碼片段和對應的AST示例Fig.1 Example of Java code snippet and the abstract syntax tree

3.1 簡化AST

現有研究在利用抽象語法樹提取源代碼語法結構信息時,通常將AST經過特殊的遍歷方法轉化為順序序列,旨在提取語法過程中盡可能地保留源代碼的結構信息.由于完整的AST深度大且結構復雜,通過此類基于結構的遍歷方式生成的序列通常包含冗余語義信息,導致訓練困難.為了更有效地捕獲代碼的結構信息,本文提出一種依據節點類型的AST簡化方法,目的是簡化AST結構,減小其編碼難度,提供簡潔的語法結構關系來指導訓練.然后通過Tree-LSTM模型提取語法結構信息.

控制流圖(Control Flow Gragh,CFG)[32]使用圖的表示方式,記錄代碼的結構和執行路徑.控制流圖中的每個頂點對應一個代碼區塊.本文希望從AST中刪除不影響控制流圖結構的節點.由源代碼轉化成的AST,節點類型大致包括4類:基本語句節點、調用式節點、表達式節點、和不包含在上述類型中的其他類型節點(主要包括聲明式節點等).其中,基本語句節點定義了代碼段的層次結構,例如分支結構,循環結構等.調用式節點通常決定程序流程走向,屬于影響代碼結構的部分.而表達式節點,聲明式節點和其他類型節點通常不會單獨構成控制流圖中的頂點,本文認為其不對代碼結構起決定性影響,屬于冗余的語義信息,此類型往往位于AST的葉子節點處.

圖2給出了兩個源代碼及其注釋的示例.其中陰影部分是生成注釋時重點關注的部分.可以看出,在樣例1中,其關注點在分支結構和調用式節點paths.add(s)上.樣例2中,生成注釋的關注點主要在方法名和參數上,方法體中大量聲明式節點和表達式節點是被忽略的.

圖2 源代碼及其注釋示例Fig.2 Example of the source code and comment

通過移除聲明式,表達式和其他類型的節點,使樹編碼組件專注對源代碼層次結構的學習而不去關注語義細節.這些節點所包含的語義信息則通過源代碼序列的形式在Transformer中學習,在此刪除這些節點并不會帶來語義信息的缺失.形式化地,將某個ASTt的節點集合定義為V(t),G(t)?V(t)代表t中決定語法結構的節點,主要包括基本語句節點和調用式節點;S(t)?V(t)代表t中涵蓋語義信息的節點,主要包括聲明式節點和部分表達式節點.這部分節點在代碼庫中大量重復,直接影響了AST的規模并且干擾語法結構的訓練.通過算法1將這部分節點從AST中刪除獲得簡化的AST.

算法1.簡化AST

輸入:ASTtwith node setV(t)

輸出:G(t)

1.forv←V(t) do

2.if Children(v)inS(t) then

3. Children(v)←Children(Children(v));

4.returnt;

3.2 樹編碼組件

Tree-LSTM[33]是一種處理樹形結構數據的神經網絡框架,是對標準LSTM[34]在樹形結構上的泛化.相較于標準LSTM的每個時間步接受一個隱藏狀態向量,Tree-LSTM的每個父節點可以接受多個子節點隱藏狀態向量,并將信息從葉子傳播到根.考慮到多路樹-LSTM可以處理多分支且節點有序的樹形結構,符合AST的結構特點,保證在處理任意數量的子節點時,同時考慮子節點間的順序交互.本文通過多路樹-LSTM對AST進行編碼,將每個AST轉化為向量表示,用以表示源代碼的語法結構信息.

對于給定輸入AST的任意節點向量xj,C(j)表示其子節點集合,nj表示C(j)集合數量;其第k個子節點的隱藏狀態為hjk,cell狀態為cjk,多路樹-LSTM的隱藏狀態hj計算方式如公式(1)~公式(10)所示:

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(8)

cj=∑k∈C(j)ck⊙fjk+ij⊙uj

(9)

hj=oj⊙tanh(cj)

(10)

給定一個ASTt,t包含一組節點G(t).將G(t)中的每個節點轉化成type_value格式的唯一標記,作為輸入嵌入到固定維度的向量中.例如,節點類型為BasicType,節點值為int的節點表示為BasicType_int.對于所有非葉節點j,該節點輸出的隱藏向量hj由輸入xj和該節點的所有子節點的隱藏向量hC(j)通過多路樹-LSTM生成,如公式(11)所示:

hj=F(xj,hC(j))

(11)

對于不包含任何子節點的葉子節點,本文選擇創建虛擬的子節點并隨機初始化,方便計算其隱藏向量.最終,獲得根節點的輸出作為表示ASTt的語法結構向量.

4 基于Transformer的融合方法

本文通過Transformer神經網絡對源代碼的語法結構信息和順序語義信息進行融合.由于AST的深層特性,傳統的Seq2Seq模型在捕獲長距離依賴關系的表現上不如Transformer神經網絡[16].Transformer的自注意力機制是純數據驅動的,并且Transformer的位置編碼可以學習輸入令牌之間的依賴關系,因此可以將代碼的語法結構信息和順序語義信息融合到Transformer編碼器的輸入中.

圖3 模型框架Fig.3 Framework of model

(12)

此外,源代碼中標記的位置和排列順序是非常重要的信息,他們不僅是代碼語法結構的組成部分,同時表達重要的語義信息.由于Transformer完全采用注意力機制,丟失了詞序信息,因此需要為每個嵌入向量加入位置編碼(Positional Encoding).位置編碼遵循模型學習到的特定模式,將位置編碼加入到嵌入向量中,有助于捕獲長期依賴關系,更好地對標記間相對關系建模[35].

4.1 編碼器

Transformer遵循編碼器解碼器結構.編碼組件由一組堆疊的編碼器組成,所有編碼器結構相同,但不會共享參數.編碼器由兩個子層組成,即多頭自注意力層(Multi-Head Self Attention)和前饋神經網絡層.編碼器接收到的句子首先通過自注意力子層,隨著模型處理輸入序列中的每個標記,自注意力會關注整個輸入序列中的標記,幫助模型更好地理解當前標記和其他標記的對應關系.自注意力的計算方法如公式(13)所示:

(13)

其中Q,K,V分別由權重矩陣WQ,WK,WV和輸入向量X相乘獲得.此外,dk作為比例因子防止過大值通過softmax函數導致的梯度消失問題.

Transformer的自注意力是多頭的,多頭自注意力機制允許模型在不同的表示子空間里學習相關的信息.每個自注意力頭定義為headi=Attention(Qi,Ki,Vi),然后將h個自注意力頭拼接,再經過一次線性變換獲得多頭自注意力的輸出,如公式(14)所示:

MultiHead(Q,K,V)=Concat(head1,…,headh)Wo

(14)

每個自注意力子層的輸出會傳遞到前饋神經網絡層.此外,在編碼器的每個子層后都應用了殘差連接并伴隨層歸一化步驟[36],用于消除隨著層數加深帶來的信息損失問題.

4.2 解碼器

Transformer解碼器負責根據先前編碼器的輸出和當前編碼狀態生成代碼注釋.解碼器結構與編碼器相似,包含兩個多頭自注意力層.第1層的自注意力機制采用了Masked操作,使自注意力層只被允許處理輸出序列中更靠前的那些位置.第2層為編碼-解碼自注意力層,根據先前編碼器輸出的一個包含鍵向量K,值向量V的注意力向量集C,從上層解碼器得到的查詢向量Q,幫助解碼器關注輸入序列.隨后,解碼器組輸出的向量通過一個全連接層,投射到單詞表維度的向量中.最終通過Softmax層生成對應位置注釋單詞的概率.

5 實 驗

本節將從實驗設置、評價方法以及實驗結果分析3方面展開論述.

5.1 實驗設置

本文使用大規模Java數據集進行實驗[17].該數據集搜集自GitHub,是目前代碼注釋生成方向使用最為頻繁的數據集[37].該數據集由一對Java語言編寫的方法源代碼和JavaDoc文檔注釋組成.以90∶5∶5的比例將數據集劃分為訓練集,驗證集和測試集.本文從驗證集和測試集中刪除了出現在訓練集中的數據.將單詞表大小限制在30000個,超過限制的低頻標記采用代替.

將數據集源代碼中的數字和字符串替換為特殊標記.為了減少OOV問題的影響,將源代碼中大量出現的標識符通過駝峰命名法或下劃線命名法分割為多個標記.通過工具Javalang解析源代碼數據生成AST.最終數據集的統計數據如表1所示.

表1 數據集統計Table 1 Statistics of datasets

本文將數據集中源代碼長度上限設置為100,摘要的最大長度設置為30.使用特殊標記填充短序列,將較長序列剪切.使用Adam優化器訓練模型參數,并將學習率設為10-4,批處理大小設置為128.詞嵌入維度和隱藏狀態維度設為512;對于涉及到Transformer的部分,將多頭數設置為8.使用Adam優化器訓練模型參數,對模型進行100個epoch的訓練.在測試階段,使用beam_size大小為5的集束搜索.

本文實驗基于pyhton3.6和TensorFlow框架實現,在Linux服務器(Ubuntu16.04,Intel?CoreTM i9-10900X CPU @ 3.70GHz,GeForce RTX 2080 Ti×4 GPU)上運行.

5.2 實驗評價指標

為了驗證代碼注釋生成方法的有效性,文本使用在神經機器翻譯領域內應用最廣泛的評價指標BLEU[18]、METEOR[19]和ROUGE[20]指導實驗.這些指標可以評估預測文本(即代碼注釋生成方法生成的文本)和參考文本(即源數據集中手工方式生成的文本)的相似程度.

BLEU指標用于比較預測文本和參考文本中n元詞組的重合程度,隨著n增大,BLEU指標可以進一步衡量文本流暢性,本文使用BLEU-4作為實驗指標.BLEU計算公式如式(15)所示:

(15)

其中BP代表預測文本較短的懲罰因子,wn是正權重,Pn是修改后的n-gram精度的幾何平均值.雖然有短文本懲罰因子,但從整體上來看,BLEU指標更偏向于較短的候選文本[19].因此本文還使用了METEOR和ROUGE作為評價指標,以彌補BLEU指標的不足.

METEOR指標引入了同義詞匹配,通過句子級別的相似度來評估翻譯效果.METEOR可通過公式(16)計算:

METEOR=(1-Pen)Fmean

(16)

其中Pen是懲罰系數,Fmean是精確率和召回率的加權調和平均.分別由公式(17)、公式(18)計算:

(17)

(18)

其中γ、θ和α均為用于評價的默認參數.ch是塊(候選文本和參考文本能對齊,并且在排列上連續的單詞稱作一個塊)的數量,m是匹配項的數量.Pm和Rm分別代表精確率和召回率.

ROUGE是一種基于召回率的相似性度量指標,可以考察候選文本的充分性.本文選用ROUGE-L作為評價指標,通過公式(19)~公式(22)計算.

(19)

(20)

(21)

(22)

其中,LCS(X,Y)代表預測文本和參考文本的最大長度公共子序列,m和n分別是候選文本和參考文本的長度.

5.3 實驗結果分析

本小節將全面評估本文所提出模型的實驗結果,分別從兩個方面評價模型性能:1)通過與以往先進的代碼注釋生成模型在相同數據集上進行的對比實驗;2)探究了本文提出的AST簡化方法和樹編碼組件對模型的影響.最后,本文從數據集中選取了3個樣例說明本文模型的有效性.

5.3.1 對比實驗

本文選取了其他3種以往先進的基于神經機器翻譯的基線方法與本文模型進行對比實驗,實驗結果如表2所示.表2中所涉及的對比模型如下.

表2 對比實驗結果Table 2 Comparison of experimental results

CodeNN[21]:在編碼和解碼時均基于LSTM和注意力機制.

Hybrid-DeepCom[17]:通過將AST序列化,使用GRU構建了一個抽象語法樹編碼器,另一個GRU構建了源代碼標記編碼器,使用注意力機制融合兩部分信息.考慮了源代碼的部分結構信息.

Multi-way Tree-LSTM[15]:提出擴展的Tree-LSTM直接對AST編碼,通過Tree2Seq結構的模型生成注釋.

根據表2,可以發現本文方法優于3種對照方法.本文提出的融合源代碼語法結構信息和順序語義信息的方法相較于Hybrid-DeepCom,在BLEU-4指標上提高了6.86,METEOR指標提高了6.76,ROUGLE-L指標提高了9.92.Hybrid-DeepCom使用兩個編碼器,一個對源代碼序列編碼,另一個對抽象語法樹經由SBT方法轉化的序列編碼.他們的方法優于單純使用源代碼序列的CodeNN,證明了源代碼中這兩部分信息對于模型理解源代碼的重要性.但由于代碼結構的復雜性,這種融合源代碼語法結構和順序語義的方式可能會丟失部分結構信息.此外,本文方法在3項指標上的得分均高于Multi-way Tree-LSTM.上述實驗結果表明,本文所提出的融合源代碼結構信息和語義信息的方法是有效的,優于其他對照方法,相較于只使用語義信息的方法提升巨大.本文模型在代碼注釋生成方向上有著更好的性能,在生成注釋的質量上有明顯提高.

本文還分析了代碼注釋生成模型的性能受源代碼長度的影響.實驗結果如圖4所示.可以看到3種模型隨著源代碼序列變長,模型性能會逐漸下降,尤其是對于Seq2Seq結構的Hybrid-DeepCom,在源代碼序列長度超過100后,BLEU-4評分顯著降低.這是由于Seq2Seq模型將源代碼信息編碼為固定長度的向量,從而導致越長的序列會丟失越多的信息.Tree2Seq結構的Multi-way Tree-LSTM模型隨著代碼序列長度變長,波動同樣劇烈,因為Tree2Seq對抽象語法樹建模,而源代碼序列的長度通常決定抽象語法樹規模.由于本文所提出的AST簡化方法可以縮小AST規模,且Transformer模型可以捕獲長距離依賴信息,所以文本方法相對于Hybrid-DeepCom模型和Multi-way Tree-LSTM模型受源代碼序列長度影響最小,并且即便在長序列下,BLEU-4的得分仍要高于另外兩種模型.

圖4 3種模型在不同代碼長度下的性能表現Fig.4 Performance of the three models at different code lengths

5.3.2 消融實驗

為了更細致地分析本文模型各組件的有效性,本文進行了相應的消融實驗,以了解不同子模塊對完整模型效果的影響.消融實驗結果展示在表3.可以發現,樹編碼組件和簡化AST都有助于模型效果的提升,但程度各不相同.具體地,刪除樹編碼組件后,僅通過Transformer對源代碼序列進行語義建模,在Transformer有效捕獲長距離依賴的強大加持下,性能優于表2的CodeNN和Hybrid-DeepCom.這表明Transformer比LSTM或GRU更適合代碼注釋生成任務.加入樹編碼組件后,BLEU-4提升了3.66,METEOR和ROUGE-L分別提高了3.93和3.52.這表明融入源代碼語法結構信息對于學習代碼特征的重要性,缺乏這部分信息會對代碼注釋生成任務帶來巨大影響.

表3 消融實驗結果Table 3 Ablation study results

進一步地,本文發現將源代碼序列轉化為AST后,樹深度相對較大,會導致編碼困難,削弱了神經網絡捕獲復雜語義的能力.簡化AST結構后,模型性能優于對完整AST進行編碼,分別在BLEU-4、METEOR和ROUGE-L指標上提升了1.45,1.22,1.83.這表明由于AST結構過于復雜,某些冗余節點的存在對模型學習起阻礙效果.簡化AST可以減少語法結構編碼中和語義信息冗余的部分,簡化訓練.

為了探究為何簡化AST對模型性能起到提升作用,以更直觀地分析不同粒度下AST對模型性能的影響,本文探究了不同程度簡化AST下的實驗結果并進行了詳細對比.將AST節點類型按照對代碼的層次結構影響從高到低劃分為基本語句節點,調用式節點,表達式節點和聲明式節點.最簡約版本只包含基本語句節點,其余3個版本根據節點類型優先級依次疊加.4個版本AST平均節點數分別為4.8,13.6,19.1,21.6.

圖5給出了不同程度下簡化AST的4個版本在BLUE-4、METEOR和ROUGE-L指標上度量方面的性能變化.橫坐標中的a,b,c和d分別代表平均節點數為4.8,13.6,19.1和21.6的4個簡化程度不同的版本.結果發現,模型性能隨著AST平均長度的增加先升高后降低;過于簡略的AST和過于復雜的AST都不會生成最佳的結果.在刪除聲明式節點和表達式節點后,平均長度為13.6的AST獲得最高的BLEU-4和METEOR分數.實驗結果表明,本文所提出的簡化AST方法有效縮小了AST規模,簡化AST可以提煉更加準確的語法結構信息,增大內容結構的層次性,從而提升注釋質量.

圖5 簡化AST對模型性能的影響Fig.5 Impact of simplified AST on model performace

5.3.3 模型樣例分析

圖6給出了3個數據集中的實際例子.其中Reference表示相應源代碼由人工標注的真實注釋.陰影部分是生成注釋重點關注的部分.可以看出,樣例1中本文方法生成的注釋可以清晰表示源代碼的含義,其關注點在基本語句節點return和調用式節點_stream.read()上.樣例2中可以看到注釋的關注點在方法名以及分支結構中,并且本文方法生成的注釋和參考注釋含義一樣.樣例3中,生成注釋的關注點主要在方法名和參數上,方法體中大量聲明式節點和表達式節點在語法結構編碼階段是被忽略的,但仍可以在語義編碼階段被捕捉,生成幾乎和參考注釋相同的文本.此外,本文分析生成的注釋在部分數據中得分較低的情況(如樣例1),這是因為實際項目中編寫注釋時開發人員會參考方法上下文或加入自己的主觀意識,但這在方法級別的注釋生成任務中是難以實現的.不難看出,如果只關注獨立存在的方法,本文方法生成的注釋可以清晰地表達源代碼含義.

圖6 源代碼,參考注釋和生成注釋示例Fig.6 Example of the source code,reference and the generated comments

6 結束語

本文提出一種同時學習源代碼語法結構特征和順序語義特征的代碼注釋生成方.本文設計了一種AST簡化方法,縮小AST規模,通過基于AST的樹編碼組件學習代碼結構信息,并在Transformer中將語法結構信息和語義信息融合.本文在大規模Java數據集上進行了全面實驗.實驗結果表明,本文方法在BLEU-4、METEOR和ROUGE-L指標上的得分均高于3種對照方法.

未來研究可以集成更大的語料庫,并結合其他基于深度學習的方法,探索對語法結構信息和順序語義信息更高效的融合方法,進而提高自動生成代碼注釋的質量.

猜你喜歡
語法結構源代碼代碼
人工智能下復雜軟件源代碼缺陷精準校正
基于TXL的源代碼插樁技術研究
創世代碼
創世代碼
創世代碼
創世代碼
軟件源代碼非公知性司法鑒定方法探析
長沙方言中的特色詞尾
淺析古代漢語的名詞動用
培養閱讀技巧,提高閱讀能力
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合