亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于神經(jīng)網(wǎng)絡(luò)融合模型的源代碼注釋自動(dòng)生成

        2021-04-22 07:25:04周其林劉旭東
        關(guān)鍵詞:模型

        周其林, 王 旭, 劉旭東

        1. 中國(guó)人民大學(xué)新聞傳播實(shí)驗(yàn)中心, 北京 100872 2. 北京航空航天大學(xué)計(jì)算機(jī)學(xué)院, 北京 100191 3. 北京航空航天大學(xué)大數(shù)據(jù)科學(xué)與腦機(jī)智能高精尖創(chuàng)新中心, 北京 100191

        0 引 言

        研究發(fā)現(xiàn),在軟件維護(hù)和演化過(guò)程中,開發(fā)者會(huì)耗費(fèi)大量的時(shí)間來(lái)閱讀和理解源代碼片段,為了節(jié)省時(shí)間,開發(fā)者通常采用閱讀功能性注釋或僅閱讀關(guān)鍵代碼兩種策略[1]. 但這兩種方法并不總是高效,SourceForge、GitHub、Google Code等超大規(guī)模的軟件庫(kù)上包含海量的軟件和信息[2],里面眾多代碼片段缺少相應(yīng)的功能注釋,自動(dòng)生成源代碼的注釋可以幫助開發(fā)者了解代碼功能,實(shí)現(xiàn)關(guān)鍵代碼的快速定位.

        代碼注釋自動(dòng)生成是一種面向軟件代碼的自然語(yǔ)言生成系統(tǒng) (natural language generation),使用程序語(yǔ)言片段作為輸入,生成該代碼片段相應(yīng)的功能注釋. 傳統(tǒng)的代碼注釋生成遵循自然語(yǔ)言生成的一般模式,工作流程包括兩個(gè)部分:內(nèi)容選擇與文本生成. 內(nèi)容選擇部分檢索當(dāng)前代碼片段最相關(guān)的文本,注釋生成部分使用檢索到的文本內(nèi)容生成代碼注釋[3]. 內(nèi)容選擇常采用關(guān)鍵詞抽取[4]、主題模型[5-7]等方法,這個(gè)階段的文本生成并不過(guò)分強(qiáng)調(diào)生成注釋的流暢性,對(duì)代碼功能的準(zhǔn)確表達(dá)是更重要的目標(biāo),注釋的表示形式有以關(guān)鍵詞組合[4],以主題詞和關(guān)鍵詞作為代碼注釋描述[6]等方式.該類注釋生成方法存在較大缺陷,一是生成的文本注釋可讀性不好、流暢度差,二是缺少對(duì)代碼詞法、語(yǔ)法等深層信息的利用.

        隨著深度學(xué)習(xí)的興起,基于神經(jīng)網(wǎng)絡(luò)的代碼注釋生成模型得到快速發(fā)展,性能全面超過(guò)傳統(tǒng)注釋生成方法. IYER等[8]在 2016年第一個(gè)提出將添加注意力的循環(huán)神經(jīng)網(wǎng)絡(luò)模型CODENN用于注釋生成. CODENN將代碼視作單詞 (Token) 序列挖掘詞法語(yǔ)義,通過(guò)順序生成目標(biāo)單詞得到相應(yīng)注釋文本. ALLAMANIS等[9]在2016年使用基于注意力的卷積模型生成平均長(zhǎng)度為3個(gè)詞的短注釋,該方法生成的文本注釋太短不能全面表達(dá)給定代碼片段的功能語(yǔ)義. 在代碼的語(yǔ)法信息利用方面,HU等[10]于2017年將抽象語(yǔ)法樹遍歷得到語(yǔ)法序列,再使用基于注意力的Seq2Seq模型生成注釋,該模型在利用語(yǔ)法信息生成注釋方面進(jìn)行了嘗試.

        相比傳統(tǒng)方法,上述基于神經(jīng)網(wǎng)絡(luò)的代碼注釋自動(dòng)生成方法取得了較好的結(jié)果,但它們?nèi)鄙賹?duì)源代碼詞法和語(yǔ)法信息的深度挖掘,包括源代碼中標(biāo)識(shí)符的特殊構(gòu)成方式以及兩者的融合表征等. 因此,如何更有效利用源代碼的詞法和語(yǔ)法信息指導(dǎo)注釋的自動(dòng)生成是本文的研究重點(diǎn).

        針對(duì)源代碼注釋自動(dòng)生成任務(wù),本文基于編碼器(Encoder)-解碼器(Decoder)框架開展研究,Encoder是針對(duì)輸入代碼片段的功能語(yǔ)義編碼器,學(xué)到的語(yǔ)義編碼向量需要能夠更加全面準(zhǔn)確的表達(dá)代碼片段的功能;Decoder是生成功能注釋的自然語(yǔ)言解碼器,利用編碼器學(xué)到的功能語(yǔ)義編碼向量,使用循環(huán)神經(jīng)網(wǎng)絡(luò)序列生成符合功能語(yǔ)義的自然語(yǔ)言注釋,在編碼器和解碼器中,通過(guò)維護(hù)源代碼單詞字典和自然語(yǔ)言單詞詞表,并對(duì)其中的每個(gè)Token進(jìn)行Embedding計(jì)算得到詞向量,Embedding得到詞向量的過(guò)程參與模型訓(xùn)練.

        1 基于詞法信息的注釋生成模型

        通過(guò)利用編碼器-解碼器神經(jīng)網(wǎng)絡(luò)架構(gòu),注釋生成模型將源代碼片段視作Token序列,并進(jìn)一步將標(biāo)識(shí)符拆分為SubToken,然后將源代碼序列進(jìn)行詞嵌入表征(Embedding)后得到編碼向量序列X=(x1,x2,…,xm).經(jīng)過(guò)LSTM循環(huán)編碼得到編碼向量序列H=(h1,h2,…,hm),Encoder循環(huán)編碼得到語(yǔ)義編碼向量序列C=(c1,c2,…,cm),ct=ht+1,C是學(xué)習(xí)到的語(yǔ)義功能編碼,是對(duì)代碼片段詞法語(yǔ)義的向量表達(dá). 最后,考慮到不同單詞對(duì)語(yǔ)義貢獻(xiàn)的權(quán)重差異,采用注意力機(jī)制進(jìn)行解碼從而生成注釋.

        1.1 標(biāo)識(shí)符切割

        標(biāo)識(shí)符切割算法:蛇形命名法直接基于下劃線分割即可,對(duì)于匈牙利命名法和駝峰命名法基于命名法規(guī)則設(shè)計(jì)正則表達(dá)式進(jìn)行切割,通過(guò)命名法規(guī)則將標(biāo)識(shí)符Tokeni切割為(Ti1,Ti2,…,Tit),最后將切割后的Token序列按照原有位置組合得到SubToken序列,在輸入代碼片段中使用SubToken序列替換掉原有Token,將新的子標(biāo)識(shí)符代碼序列輸入編碼器-解碼器序列生成框架,用于訓(xùn)練生成代碼注釋.

        1.2 基于注意力機(jī)制的注釋生成

        解碼器采用循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM進(jìn)行序列解碼得到注釋文本. 注釋生成從開始標(biāo)識(shí)符的編碼向量y0開始,y0=emb(′′),然后解碼器通過(guò)循環(huán)解碼生成注釋的語(yǔ)義向量h′t,h′t=LSTM(yt-1,h′t-1),最后使用注意力模塊解碼得到y(tǒng)t,直至解碼得到終結(jié)符為止,yt計(jì)算方法如下:

        yt=Attention(context,h′t)

        (1)

        得到注釋文本序列Y=(y1,y2,…,yn),基于詞表檢索yt得到相應(yīng)單詞從而組合生成注釋.

        為了考慮解決長(zhǎng)距離依賴問(wèn)題,同時(shí)照顧到源代碼單詞對(duì)語(yǔ)義貢獻(xiàn)的權(quán)重差異,本模型添加了注意力機(jī)制,注意力機(jī)制計(jì)算LSTM編碼器中間狀態(tài)序列(h1,h2,…,hm)的向量加權(quán)和ct,計(jì)算公式如下:

        (2)

        (3)

        (4)

        以團(tuán)隊(duì)為基礎(chǔ)的學(xué)習(xí)(team-based learning,TBL)的教學(xué)模式是由美國(guó)Oklahoma大學(xué)Michaelsen教授于70年代創(chuàng)立[5],與傳統(tǒng)以授課為基礎(chǔ)的學(xué)習(xí)有著明顯的不同,TBL不再以教學(xué)為主體,而是以學(xué)生為中心,是一種以團(tuán)隊(duì)為基礎(chǔ),提倡學(xué)生自主學(xué)習(xí),著重提高學(xué)生分析和解決問(wèn)題的能力,更好地激發(fā)學(xué)生的學(xué)習(xí)潛能,將學(xué)生培養(yǎng)成終身學(xué)習(xí)者為目標(biāo)的新型教學(xué)模式,這種教學(xué)模式,尤其適合進(jìn)行分組的病理實(shí)習(xí)課。

        (5)

        2 基于語(yǔ)法信息的注釋生成模型

        上一節(jié)基于詞法信息的序列生成模型,將源代碼視為Token序列,序列生成的假設(shè)是有限前序依賴,認(rèn)為當(dāng)前的Token只受到位于其前面位置Token的影響. 實(shí)際上對(duì)代碼而言,不同Token之間的相互依賴關(guān)系與語(yǔ)法結(jié)構(gòu)相關(guān). 從語(yǔ)法分析角度看,代碼片段的抽象語(yǔ)法樹AST(abstract syntax tree)體現(xiàn)了Token在語(yǔ)法層面的依賴關(guān)系,這種依賴關(guān)系是程序功能的重要依據(jù). 因此,可以基于抽象語(yǔ)法樹AST進(jìn)行語(yǔ)法信息的捕捉并生成相應(yīng)的注釋.

        本節(jié)在編碼器階段利用AST的依賴關(guān)系構(gòu)建得到堆棧序列,接著對(duì)堆棧序列使用循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行編碼,從而得到源代碼的語(yǔ)法結(jié)構(gòu)信息.

        為了利用源代碼語(yǔ)法信息,使用ANTLR4[11]得到源代碼片段的語(yǔ)法樹AST,為了將其轉(zhuǎn)化為堆棧序列,本文基于深度優(yōu)先遍歷設(shè)計(jì)了AST堆棧序列生成算法AST_LDR. 首先,使用詞法解析程序得到對(duì)應(yīng)代碼片段的Token序列,然后遞歸下降遍歷語(yǔ)法樹AST,在每條文法規(guī)則子程序前后加入括號(hào)輸出和節(jié)點(diǎn)輸出,即可解析得到該語(yǔ)法片段對(duì)應(yīng)的堆棧序列.

        算法1:AST堆棧序列生成算法AST_LDR輸入:AST樹Tree輸出:對(duì)應(yīng)的遞歸系列Rs1: Initialize: Set Rs = [ ]2: if(tree!=NULL)3: Rs+=tree.data4: if(tree -> left):5: Rs+=‘(’6: Rs+=AST_LDR(tree)7: Rs+=‘)’8: if(tree->right):9: Rs+=‘(’10: Rs+=AST_LDR(tree)11: Rs+=‘)’12: Return Rs

        圖1 抽象語(yǔ)法樹序列生成Fig.1 Token sequence generation using AST

        圖1所示的語(yǔ)法樹AST利用AST堆棧序列生成算法AST_LDR得到的堆棧序列Rs.

        Rs:h0(h1(x1h3(x2x3x4))x5h2(x6x7)).

        在編碼器階段,使用LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)對(duì)上述代碼堆棧序列進(jìn)行編碼. 由于堆棧序列利用抽象語(yǔ)法樹的依賴關(guān)系進(jìn)行構(gòu)建,因此可以有效捕捉源代碼的語(yǔ)法信息. 接著,使用全局注意力機(jī)制和LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行注釋的解碼生成.

        3 詞法語(yǔ)法融合模型

        本文3.1和3.2節(jié)中設(shè)計(jì)的模型分別從詞法、語(yǔ)法的角度挖掘了代碼片段的功能語(yǔ)義,均在一定程度上挖掘了代碼片段的功能,本節(jié)設(shè)計(jì)一個(gè)詞法、語(yǔ)法功能語(yǔ)義融合的功能語(yǔ)義編碼器,學(xué)到更全面的功能語(yǔ)義編碼向量,然后利用融合得到的編碼向量進(jìn)行注釋文本的序列生成.

        3.1 語(yǔ)義融合框架

        利用3.1和3.2節(jié)中的詞法和語(yǔ)法編碼器Lexical Encoder(code)和Syntax Encoder(AST),可以分別得到兩種編碼向量,結(jié)果如下:

        Hcode,Ccode=Encodercode(Code)

        (6)

        Hast,Cast=Encoderast(Ast)

        (7)

        Cmulti=lstm(Ccode,Cast)

        (8)

        如圖2所示,兩個(gè)編碼器得到的語(yǔ)義編碼向量Ccode、Cast通過(guò)LSTM門控記憶單元融合得到功能語(yǔ)義編碼向量Cmulti. 然后,針對(duì)得到的融合編碼向量Cmulti,使用LSTM循環(huán)解碼生成注釋序列.

        ht=LSTM(ht-1,yt-1,Attn)

        (9)

        式中h0=Cmulti,y0=emb(′′).

        圖2 融合注釋生成模型網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Neural network fusion model architecture

        3.2 融合注意力機(jī)制

        本模型使用注意力機(jī)制對(duì)兩個(gè)解碼器的各個(gè)狀態(tài)進(jìn)行加權(quán)求和,計(jì)算方法如下:

        (10)

        (11)

        (12)

        (13)

        其中,分別計(jì)算詞法編碼器的注意力編碼和語(yǔ)法編碼器的注意力編碼,然后將兩者的注意力編碼向量和隱藏層進(jìn)行拼接,再使用一個(gè)線性層變換維度,從而得到注釋生成階段的隱藏層編碼. 最后使用LSTM 循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行注釋的解碼生成.

        4 數(shù)據(jù)獲取

        在基于神經(jīng)網(wǎng)絡(luò)的源代碼注釋自動(dòng)生成方法中,訓(xùn)練數(shù)據(jù)的有效獲取是研究工作的基礎(chǔ). 由于開源社區(qū)GitHub等擁有大量真實(shí)的項(xiàng)目源代碼,這些代碼和其對(duì)應(yīng)的注釋可以用于構(gòu)造數(shù)據(jù)集,圖3是一則選自GitHub的真實(shí)Java代碼片段,該方法上方的注釋描述了代碼功能,其中注釋的第一條語(yǔ)句描述可以作為本段代碼的功能注釋標(biāo)注.

        圖3 Java代碼片段及其注釋Fig.3 one Java code fragment and its comment

        在已有工作中,HU等提出的模型TL-CodeSum[12]使用了GitHub中2015—2016年創(chuàng)建且Star數(shù)至少為20的Java項(xiàng)目代碼構(gòu)建數(shù)據(jù)集. 該數(shù)據(jù)集共計(jì)87136條數(shù)據(jù). 由于該數(shù)據(jù)集重復(fù)度較高,本文將TL-CodeSum數(shù)據(jù)集去重后再按照8∶1∶1劃分訓(xùn)練集、驗(yàn)證集、測(cè)試集,去重后的數(shù)據(jù)集命名為MiniTL,MiniTL共有數(shù)據(jù)71494條.

        5 模型訓(xùn)練

        本文在數(shù)據(jù)集MiniTL對(duì)模型進(jìn)行訓(xùn)練,損失函數(shù)使用負(fù)對(duì)數(shù)似然函數(shù).所有模型中代碼和注釋的Embedding維度均設(shè)為400,詞法和語(yǔ)法兩個(gè)編碼器的功能語(yǔ)義編碼向量維度設(shè)為400,語(yǔ)義編碼融合向量維度設(shè)為400,輸入序列長(zhǎng)度設(shè)為1000,注釋文本序列長(zhǎng)度設(shè)為30,編碼器Encoder的詞表大小設(shè)為50000,解碼器Decoder的詞表大小設(shè)為30000. 優(yōu)化算法使用隨機(jī)梯度下降算法SGD進(jìn)行訓(xùn)練使得損失函數(shù)盡量小,學(xué)習(xí)率設(shè)為0.95,將Batch大小設(shè)為64,最終訓(xùn)練50輪次.使用Titan XP進(jìn)行訓(xùn)練,比較不同方法的性能.

        6 評(píng)測(cè)指標(biāo)

        為了評(píng)估源代碼注釋的生成質(zhì)量,本文使用自動(dòng)測(cè)評(píng)指標(biāo)BLEU、METEOR、召回率、準(zhǔn)確率、F1-Score測(cè)評(píng)注釋生成質(zhì)量. 其中,BLEU (bilingual evaluation understudy) 是IBM在2002年提出的一種基于n-gram共現(xiàn)的機(jī)器翻譯自動(dòng)評(píng)測(cè)方法[13]. METEOR是2005年由LAVIE提出的基于召回率的自然語(yǔ)言評(píng)測(cè)指標(biāo)[14].同時(shí)計(jì)算最優(yōu)候選注釋與人工注釋之間的召回率、準(zhǔn)確率、F1-Score,綜合這些指標(biāo)評(píng)估自動(dòng)生成的注釋和人工注釋之間的相似性、度量模型的注釋生成質(zhì)量.

        7 實(shí)驗(yàn)結(jié)果

        表1顯示了3段代碼通過(guò)不同的注釋生成模型生成的質(zhì)量對(duì)比,與真實(shí)注釋文本比較可以看出,基于神經(jīng)網(wǎng)絡(luò)的注釋生成模型都具有較好的可讀性. 同時(shí)直觀看出本文提出的融合模型Multi-NN對(duì)代碼片段功能的描述更準(zhǔn)確,驗(yàn)證了融合詞法和語(yǔ)法信息對(duì)代碼功能語(yǔ)義表征起到的重要作用.

        本文使用指標(biāo)BLEU4、METEOR、準(zhǔn)確率、召回率、F1-Score進(jìn)行評(píng)測(cè),這些指標(biāo)從不同角度體現(xiàn)了注釋的生成質(zhì)量,值越高表示注釋生成的質(zhì)量越好,評(píng)測(cè)結(jié)果如表2所示.

        從表2中可以看出應(yīng)用了命名法切割算法的SubCode2NL模型注釋生成效果有較大提升,在各個(gè)指標(biāo)上均優(yōu)于直接使用Token序列的Code2NL模型,同時(shí)SubCode2NL優(yōu)于CODENN模型,并且在多個(gè)指標(biāo)上優(yōu)于TL-CodeSum模型,驗(yàn)證了命名法切割算法的有效性. 同時(shí)對(duì)比Code2NL和基于詞法信息的注釋生成模型AST2NL得知,僅利用抽象語(yǔ)法樹捕捉語(yǔ)法信息生成注釋的質(zhì)量相對(duì)較差,和CODENN模型生成質(zhì)量相當(dāng). 對(duì)比本文提出的Multi-NN融合模型可知,融合了詞法和語(yǔ)法信息的神經(jīng)網(wǎng)絡(luò)融合模型在各個(gè)性能指標(biāo)上表現(xiàn)最優(yōu).

        表1 不同模型的注釋生成結(jié)果對(duì)比Tab.1 Comments generation results comparison

        表2 不同模型的評(píng)測(cè)結(jié)果(百分?jǐn)?shù))Table 2 Evaluation results %

        8 結(jié) 論

        源代碼注釋自動(dòng)生成是一個(gè)非常具有挑戰(zhàn)性的任務(wù),當(dāng)前的研究在詞法信息挖掘、融合詞法和語(yǔ)法信息這兩個(gè)方面都存在較大局限. 本文設(shè)計(jì)的命名法切割算法可以有效捕捉詞法信息,同時(shí)基于抽象語(yǔ)法樹的依賴關(guān)系編碼實(shí)現(xiàn)了對(duì)語(yǔ)法結(jié)構(gòu)信息的挖掘,本文設(shè)計(jì)了基于神經(jīng)網(wǎng)絡(luò)融合生成模型,實(shí)現(xiàn)了對(duì)詞法和語(yǔ)法信息的混合編碼,通過(guò)實(shí)驗(yàn)驗(yàn)證發(fā)現(xiàn),合適的融合機(jī)制確實(shí)能夠獲得質(zhì)量更高的混合編碼向量,生成的注釋在BLEU4、METEOR等測(cè)評(píng)指標(biāo)上均實(shí)現(xiàn)了顯著提升.

        猜你喜歡
        模型
        一半模型
        一種去中心化的域名服務(wù)本地化模型
        適用于BDS-3 PPP的隨機(jī)模型
        提煉模型 突破難點(diǎn)
        函數(shù)模型及應(yīng)用
        p150Glued在帕金森病模型中的表達(dá)及分布
        函數(shù)模型及應(yīng)用
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
        3D打印中的模型分割與打包
        视频女同久久久一区二区三区| 四虎影视成人永久免费观看视频| 97人人模人人爽人人喊电影 | 四虎精品免费永久在线| 5级做人爱c视版免费视频| 欧美日韩不卡中文字幕在线| 国产精品三级在线专区1| 亚洲国产精品一区二区第一 | 日韩av二区三区一区| 高潮av一区二区三区| 亚洲激情综合中文字幕| 国产人妻鲁鲁一区二区| 国产啪亚洲国产精品无码| aaa级久久久精品无码片| 麻豆国产av尤物网站尤物| 在线观看视频日本一区二区三区 | 日本熟女精品一区二区三区| 欧美一性一乱一交一视频| 欧美粗大无套gay| 精品久久久久88久久久| 国产自拍视频免费在线观看| 麻豆蜜桃av蜜臀av色欲av| 人妻中文字幕无码系列| 国产成人av一区二区三区无码| 一区二区三区在线视频免费观看| 免费看黄片的视频在线观看| 人妻少妇精品中文字幕av| 日韩乱码视频| 亚洲一区视频中文字幕| 蜜桃av人妻精品一区二区三区| 成 人片 黄 色 大 片| 最近中文字幕在线mv视频在线| 国产亚洲精久久久久久无码苍井空 | 天美传媒一区二区| 在线视频中文字幕乱人伦| 一区二区三区四区日韩亚洲| 激情综合五月婷婷久久| 国产精品久久久久aaaa| 精品午夜久久网成年网| 高清国产精品一区二区| 精品国产偷窥一区二区|