• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    融合語(yǔ)法和語(yǔ)義的代碼注釋生成方法

    2023-11-10 15:11:04王瀚森陳鐵明季白楊
    關(guān)鍵詞:語(yǔ)義信息方法

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

    (浙江工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,杭州 310023)

    1 引 言

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

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

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

    針對(duì)上述問(wèn)題,本文提出一種融合語(yǔ)法結(jié)構(gòu)信息和順序語(yǔ)義信息的代碼注釋生成方法,通過(guò)將代碼片段轉(zhuǎn)化為AST,并對(duì)AST節(jié)點(diǎn)類(lèi)型進(jìn)行控制,簡(jiǎn)化AST結(jié)構(gòu).應(yīng)用多路樹(shù)-LSTM[15]以獲得樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)表示.再結(jié)合源代碼序列表示的語(yǔ)義信息,輸入Transformer[16],以?xún)煞N類(lèi)型的代碼信息為指導(dǎo)訓(xùn)練注釋生成模型.為了評(píng)估本文方法的有效性,本文在大型Java數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn)[17].實(shí)驗(yàn)結(jié)果表明,本文方法生成的代碼注釋在BLEU[18]、METEOR[19]和ROUGE[20]評(píng)價(jià)指標(biāo)上的得分高于對(duì)照模型.

    2 相關(guān)工作

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

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

    由于AST節(jié)點(diǎn)數(shù)量多,導(dǎo)致訓(xùn)練開(kāi)銷(xiāo)大,加重模型訓(xùn)練負(fù)擔(dān).為了平衡語(yǔ)法結(jié)構(gòu)信息的保留和降低訓(xùn)練難度,Chen等[28]提出了一種將長(zhǎng)代碼段分割為短AST路徑的方法,從而縮短輸入長(zhǎng)度.Wan等[29]將AST轉(zhuǎn)換為二叉樹(shù),以丟失部分信息為代價(jià)減少訓(xùn)練開(kāi)銷(xiāo).Alon等[30]將代碼片段表示為AST中的組合路徑集.Zhang等[31]將抽象語(yǔ)法樹(shù)拆分成多個(gè)規(guī)模更小的語(yǔ)句樹(shù),每次只關(guān)注一條語(yǔ)句,降低訓(xùn)練難度.

    總體來(lái)看,AST在代碼注釋自動(dòng)生成技術(shù)中的應(yīng)用為這一方向的研究提供了新的技術(shù)途徑.其優(yōu)勢(shì)在于可以保留源代碼的語(yǔ)法結(jié)構(gòu)信息,將源代碼的語(yǔ)法結(jié)構(gòu)信息和語(yǔ)義信息結(jié)合,生成高質(zhì)量的代碼注釋.

    3 源代碼的結(jié)構(gòu)化表示

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

    圖1 Java代碼片段和對(duì)應(yīng)的AST示例Fig.1 Example of Java code snippet and the abstract syntax tree

    3.1 簡(jiǎn)化AST

    現(xiàn)有研究在利用抽象語(yǔ)法樹(shù)提取源代碼語(yǔ)法結(jié)構(gòu)信息時(shí),通常將AST經(jīng)過(guò)特殊的遍歷方法轉(zhuǎn)化為順序序列,旨在提取語(yǔ)法過(guò)程中盡可能地保留源代碼的結(jié)構(gòu)信息.由于完整的AST深度大且結(jié)構(gòu)復(fù)雜,通過(guò)此類(lèi)基于結(jié)構(gòu)的遍歷方式生成的序列通常包含冗余語(yǔ)義信息,導(dǎo)致訓(xùn)練困難.為了更有效地捕獲代碼的結(jié)構(gòu)信息,本文提出一種依據(jù)節(jié)點(diǎn)類(lèi)型的AST簡(jiǎn)化方法,目的是簡(jiǎn)化AST結(jié)構(gòu),減小其編碼難度,提供簡(jiǎn)潔的語(yǔ)法結(jié)構(gòu)關(guān)系來(lái)指導(dǎo)訓(xùn)練.然后通過(guò)Tree-LSTM模型提取語(yǔ)法結(jié)構(gòu)信息.

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

    圖2給出了兩個(gè)源代碼及其注釋的示例.其中陰影部分是生成注釋時(shí)重點(diǎn)關(guān)注的部分.可以看出,在樣例1中,其關(guān)注點(diǎn)在分支結(jié)構(gòu)和調(diào)用式節(jié)點(diǎn)paths.add(s)上.樣例2中,生成注釋的關(guān)注點(diǎn)主要在方法名和參數(shù)上,方法體中大量聲明式節(jié)點(diǎn)和表達(dá)式節(jié)點(diǎn)是被忽略的.

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

    通過(guò)移除聲明式,表達(dá)式和其他類(lèi)型的節(jié)點(diǎn),使樹(shù)編碼組件專(zhuān)注對(duì)源代碼層次結(jié)構(gòu)的學(xué)習(xí)而不去關(guān)注語(yǔ)義細(xì)節(jié).這些節(jié)點(diǎn)所包含的語(yǔ)義信息則通過(guò)源代碼序列的形式在Transformer中學(xué)習(xí),在此刪除這些節(jié)點(diǎn)并不會(huì)帶來(lái)語(yǔ)義信息的缺失.形式化地,將某個(gè)ASTt的節(jié)點(diǎn)集合定義為V(t),G(t)?V(t)代表t中決定語(yǔ)法結(jié)構(gòu)的節(jié)點(diǎn),主要包括基本語(yǔ)句節(jié)點(diǎn)和調(diào)用式節(jié)點(diǎn);S(t)?V(t)代表t中涵蓋語(yǔ)義信息的節(jié)點(diǎn),主要包括聲明式節(jié)點(diǎn)和部分表達(dá)式節(jié)點(diǎn).這部分節(jié)點(diǎn)在代碼庫(kù)中大量重復(fù),直接影響了AST的規(guī)模并且干擾語(yǔ)法結(jié)構(gòu)的訓(xùn)練.通過(guò)算法1將這部分節(jié)點(diǎn)從AST中刪除獲得簡(jiǎn)化的AST.

    算法1.簡(jiǎn)化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 樹(shù)編碼組件

    Tree-LSTM[33]是一種處理樹(shù)形結(jié)構(gòu)數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)框架,是對(duì)標(biāo)準(zhǔn)LSTM[34]在樹(shù)形結(jié)構(gòu)上的泛化.相較于標(biāo)準(zhǔn)LSTM的每個(gè)時(shí)間步接受一個(gè)隱藏狀態(tài)向量,Tree-LSTM的每個(gè)父節(jié)點(diǎn)可以接受多個(gè)子節(jié)點(diǎn)隱藏狀態(tài)向量,并將信息從葉子傳播到根.考慮到多路樹(shù)-LSTM可以處理多分支且節(jié)點(diǎn)有序的樹(shù)形結(jié)構(gòu),符合AST的結(jié)構(gòu)特點(diǎn),保證在處理任意數(shù)量的子節(jié)點(diǎn)時(shí),同時(shí)考慮子節(jié)點(diǎn)間的順序交互.本文通過(guò)多路樹(shù)-LSTM對(duì)AST進(jìn)行編碼,將每個(gè)AST轉(zhuǎn)化為向量表示,用以表示源代碼的語(yǔ)法結(jié)構(gòu)信息.

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

    (1)

    (2)

    (3)

    (4)

    (5)

    (6)

    (7)

    (8)

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

    (9)

    hj=oj⊙tanh(cj)

    (10)

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

    hj=F(xj,hC(j))

    (11)

    對(duì)于不包含任何子節(jié)點(diǎn)的葉子節(jié)點(diǎn),本文選擇創(chuàng)建虛擬的子節(jié)點(diǎn)并隨機(jī)初始化,方便計(jì)算其隱藏向量.最終,獲得根節(jié)點(diǎn)的輸出作為表示ASTt的語(yǔ)法結(jié)構(gòu)向量.

    4 基于Transformer的融合方法

    本文通過(guò)Transformer神經(jīng)網(wǎng)絡(luò)對(duì)源代碼的語(yǔ)法結(jié)構(gòu)信息和順序語(yǔ)義信息進(jìn)行融合.由于AST的深層特性,傳統(tǒng)的Seq2Seq模型在捕獲長(zhǎng)距離依賴(lài)關(guān)系的表現(xiàn)上不如Transformer神經(jīng)網(wǎng)絡(luò)[16].Transformer的自注意力機(jī)制是純數(shù)據(jù)驅(qū)動(dòng)的,并且Transformer的位置編碼可以學(xué)習(xí)輸入令牌之間的依賴(lài)關(guān)系,因此可以將代碼的語(yǔ)法結(jié)構(gòu)信息和順序語(yǔ)義信息融合到Transformer編碼器的輸入中.

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

    (12)

    此外,源代碼中標(biāo)記的位置和排列順序是非常重要的信息,他們不僅是代碼語(yǔ)法結(jié)構(gòu)的組成部分,同時(shí)表達(dá)重要的語(yǔ)義信息.由于Transformer完全采用注意力機(jī)制,丟失了詞序信息,因此需要為每個(gè)嵌入向量加入位置編碼(Positional Encoding).位置編碼遵循模型學(xué)習(xí)到的特定模式,將位置編碼加入到嵌入向量中,有助于捕獲長(zhǎng)期依賴(lài)關(guān)系,更好地對(duì)標(biāo)記間相對(duì)關(guān)系建模[35].

    4.1 編碼器

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

    (13)

    其中Q,K,V分別由權(quán)重矩陣WQ,WK,WV和輸入向量X相乘獲得.此外,dk作為比例因子防止過(guò)大值通過(guò)softmax函數(shù)導(dǎo)致的梯度消失問(wèn)題.

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

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

    (14)

    每個(gè)自注意力子層的輸出會(huì)傳遞到前饋神經(jīng)網(wǎng)絡(luò)層.此外,在編碼器的每個(gè)子層后都應(yīng)用了殘差連接并伴隨層歸一化步驟[36],用于消除隨著層數(shù)加深帶來(lái)的信息損失問(wèn)題.

    4.2 解碼器

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

    5 實(shí) 驗(yàn)

    本節(jié)將從實(shí)驗(yàn)設(shè)置、評(píng)價(jià)方法以及實(shí)驗(yàn)結(jié)果分析3方面展開(kāi)論述.

    5.1 實(shí)驗(yàn)設(shè)置

    本文使用大規(guī)模Java數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)[17].該數(shù)據(jù)集搜集自GitHub,是目前代碼注釋生成方向使用最為頻繁的數(shù)據(jù)集[37].該數(shù)據(jù)集由一對(duì)Java語(yǔ)言編寫(xiě)的方法源代碼和JavaDoc文檔注釋組成.以90∶5∶5的比例將數(shù)據(jù)集劃分為訓(xùn)練集,驗(yàn)證集和測(cè)試集.本文從驗(yàn)證集和測(cè)試集中刪除了出現(xiàn)在訓(xùn)練集中的數(shù)據(jù).將單詞表大小限制在30000個(gè),超過(guò)限制的低頻標(biāo)記采用代替.

    將數(shù)據(jù)集源代碼中的數(shù)字和字符串替換為特殊標(biāo)記.為了減少OOV問(wèn)題的影響,將源代碼中大量出現(xiàn)的標(biāo)識(shí)符通過(guò)駝峰命名法或下劃線(xiàn)命名法分割為多個(gè)標(biāo)記.通過(guò)工具Javalang解析源代碼數(shù)據(jù)生成AST.最終數(shù)據(jù)集的統(tǒng)計(jì)數(shù)據(jù)如表1所示.

    表1 數(shù)據(jù)集統(tǒng)計(jì)Table 1 Statistics of datasets

    本文將數(shù)據(jù)集中源代碼長(zhǎng)度上限設(shè)置為100,摘要的最大長(zhǎng)度設(shè)置為30.使用特殊標(biāo)記填充短序列,將較長(zhǎng)序列剪切.使用Adam優(yōu)化器訓(xùn)練模型參數(shù),并將學(xué)習(xí)率設(shè)為10-4,批處理大小設(shè)置為128.詞嵌入維度和隱藏狀態(tài)維度設(shè)為512;對(duì)于涉及到Transformer的部分,將多頭數(shù)設(shè)置為8.使用Adam優(yōu)化器訓(xùn)練模型參數(shù),對(duì)模型進(jìn)行100個(gè)epoch的訓(xùn)練.在測(cè)試階段,使用beam_size大小為5的集束搜索.

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

    5.2 實(shí)驗(yàn)評(píng)價(jià)指標(biāo)

    為了驗(yàn)證代碼注釋生成方法的有效性,文本使用在神經(jīng)機(jī)器翻譯領(lǐng)域內(nèi)應(yīng)用最廣泛的評(píng)價(jià)指標(biāo)BLEU[18]、METEOR[19]和ROUGE[20]指導(dǎo)實(shí)驗(yàn).這些指標(biāo)可以評(píng)估預(yù)測(cè)文本(即代碼注釋生成方法生成的文本)和參考文本(即源數(shù)據(jù)集中手工方式生成的文本)的相似程度.

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

    (15)

    其中BP代表預(yù)測(cè)文本較短的懲罰因子,wn是正權(quán)重,Pn是修改后的n-gram精度的幾何平均值.雖然有短文本懲罰因子,但從整體上來(lái)看,BLEU指標(biāo)更偏向于較短的候選文本[19].因此本文還使用了METEOR和ROUGE作為評(píng)價(jià)指標(biāo),以彌補(bǔ)BLEU指標(biāo)的不足.

    METEOR指標(biāo)引入了同義詞匹配,通過(guò)句子級(jí)別的相似度來(lái)評(píng)估翻譯效果.METEOR可通過(guò)公式(16)計(jì)算:

    METEOR=(1-Pen)Fmean

    (16)

    其中Pen是懲罰系數(shù),Fmean是精確率和召回率的加權(quán)調(diào)和平均.分別由公式(17)、公式(18)計(jì)算:

    (17)

    (18)

    其中γ、θ和α均為用于評(píng)價(jià)的默認(rèn)參數(shù).ch是塊(候選文本和參考文本能對(duì)齊,并且在排列上連續(xù)的單詞稱(chēng)作一個(gè)塊)的數(shù)量,m是匹配項(xiàng)的數(shù)量.Pm和Rm分別代表精確率和召回率.

    ROUGE是一種基于召回率的相似性度量指標(biāo),可以考察候選文本的充分性.本文選用ROUGE-L作為評(píng)價(jià)指標(biāo),通過(guò)公式(19)~公式(22)計(jì)算.

    (19)

    (20)

    (21)

    (22)

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

    5.3 實(shí)驗(yàn)結(jié)果分析

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

    5.3.1 對(duì)比實(shí)驗(yàn)

    本文選取了其他3種以往先進(jìn)的基于神經(jīng)機(jī)器翻譯的基線(xiàn)方法與本文模型進(jìn)行對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表2所示.表2中所涉及的對(duì)比模型如下.

    表2 對(duì)比實(shí)驗(yàn)結(jié)果Table 2 Comparison of experimental results

    CodeNN[21]:在編碼和解碼時(shí)均基于LSTM和注意力機(jī)制.

    Hybrid-DeepCom[17]:通過(guò)將AST序列化,使用GRU構(gòu)建了一個(gè)抽象語(yǔ)法樹(shù)編碼器,另一個(gè)GRU構(gòu)建了源代碼標(biāo)記編碼器,使用注意力機(jī)制融合兩部分信息.考慮了源代碼的部分結(jié)構(gòu)信息.

    Multi-way Tree-LSTM[15]:提出擴(kuò)展的Tree-LSTM直接對(duì)AST編碼,通過(guò)Tree2Seq結(jié)構(gòu)的模型生成注釋.

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

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

    圖4 3種模型在不同代碼長(zhǎng)度下的性能表現(xiàn)Fig.4 Performance of the three models at different code lengths

    5.3.2 消融實(shí)驗(yàn)

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

    表3 消融實(shí)驗(yàn)結(jié)果Table 3 Ablation study results

    進(jìn)一步地,本文發(fā)現(xiàn)將源代碼序列轉(zhuǎn)化為AST后,樹(shù)深度相對(duì)較大,會(huì)導(dǎo)致編碼困難,削弱了神經(jīng)網(wǎng)絡(luò)捕獲復(fù)雜語(yǔ)義的能力.簡(jiǎn)化AST結(jié)構(gòu)后,模型性能優(yōu)于對(duì)完整AST進(jìn)行編碼,分別在BLEU-4、METEOR和ROUGE-L指標(biāo)上提升了1.45,1.22,1.83.這表明由于AST結(jié)構(gòu)過(guò)于復(fù)雜,某些冗余節(jié)點(diǎn)的存在對(duì)模型學(xué)習(xí)起阻礙效果.簡(jiǎn)化AST可以減少語(yǔ)法結(jié)構(gòu)編碼中和語(yǔ)義信息冗余的部分,簡(jiǎn)化訓(xùn)練.

    為了探究為何簡(jiǎn)化AST對(duì)模型性能起到提升作用,以更直觀地分析不同粒度下AST對(duì)模型性能的影響,本文探究了不同程度簡(jiǎn)化AST下的實(shí)驗(yàn)結(jié)果并進(jìn)行了詳細(xì)對(duì)比.將AST節(jié)點(diǎn)類(lèi)型按照對(duì)代碼的層次結(jié)構(gòu)影響從高到低劃分為基本語(yǔ)句節(jié)點(diǎn),調(diào)用式節(jié)點(diǎn),表達(dá)式節(jié)點(diǎn)和聲明式節(jié)點(diǎn).最簡(jiǎn)約版本只包含基本語(yǔ)句節(jié)點(diǎn),其余3個(gè)版本根據(jù)節(jié)點(diǎn)類(lèi)型優(yōu)先級(jí)依次疊加.4個(gè)版本AST平均節(jié)點(diǎn)數(shù)分別為4.8,13.6,19.1,21.6.

    圖5給出了不同程度下簡(jiǎn)化AST的4個(gè)版本在BLUE-4、METEOR和ROUGE-L指標(biāo)上度量方面的性能變化.橫坐標(biāo)中的a,b,c和d分別代表平均節(jié)點(diǎn)數(shù)為4.8,13.6,19.1和21.6的4個(gè)簡(jiǎn)化程度不同的版本.結(jié)果發(fā)現(xiàn),模型性能隨著AST平均長(zhǎng)度的增加先升高后降低;過(guò)于簡(jiǎn)略的AST和過(guò)于復(fù)雜的AST都不會(huì)生成最佳的結(jié)果.在刪除聲明式節(jié)點(diǎn)和表達(dá)式節(jié)點(diǎn)后,平均長(zhǎng)度為13.6的AST獲得最高的BLEU-4和METEOR分?jǐn)?shù).實(shí)驗(yàn)結(jié)果表明,本文所提出的簡(jiǎn)化AST方法有效縮小了AST規(guī)模,簡(jiǎn)化AST可以提煉更加準(zhǔn)確的語(yǔ)法結(jié)構(gòu)信息,增大內(nèi)容結(jié)構(gòu)的層次性,從而提升注釋質(zhì)量.

    圖5 簡(jiǎn)化AST對(duì)模型性能的影響Fig.5 Impact of simplified AST on model performace

    5.3.3 模型樣例分析

    圖6給出了3個(gè)數(shù)據(jù)集中的實(shí)際例子.其中Reference表示相應(yīng)源代碼由人工標(biāo)注的真實(shí)注釋.陰影部分是生成注釋重點(diǎn)關(guān)注的部分.可以看出,樣例1中本文方法生成的注釋可以清晰表示源代碼的含義,其關(guān)注點(diǎn)在基本語(yǔ)句節(jié)點(diǎn)return和調(diào)用式節(jié)點(diǎn)_stream.read()上.樣例2中可以看到注釋的關(guān)注點(diǎn)在方法名以及分支結(jié)構(gòu)中,并且本文方法生成的注釋和參考注釋含義一樣.樣例3中,生成注釋的關(guān)注點(diǎn)主要在方法名和參數(shù)上,方法體中大量聲明式節(jié)點(diǎn)和表達(dá)式節(jié)點(diǎn)在語(yǔ)法結(jié)構(gòu)編碼階段是被忽略的,但仍可以在語(yǔ)義編碼階段被捕捉,生成幾乎和參考注釋相同的文本.此外,本文分析生成的注釋在部分?jǐn)?shù)據(jù)中得分較低的情況(如樣例1),這是因?yàn)閷?shí)際項(xiàng)目中編寫(xiě)注釋時(shí)開(kāi)發(fā)人員會(huì)參考方法上下文或加入自己的主觀意識(shí),但這在方法級(jí)別的注釋生成任務(wù)中是難以實(shí)現(xiàn)的.不難看出,如果只關(guān)注獨(dú)立存在的方法,本文方法生成的注釋可以清晰地表達(dá)源代碼含義.

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

    6 結(jié)束語(yǔ)

    本文提出一種同時(shí)學(xué)習(xí)源代碼語(yǔ)法結(jié)構(gòu)特征和順序語(yǔ)義特征的代碼注釋生成方.本文設(shè)計(jì)了一種AST簡(jiǎn)化方法,縮小AST規(guī)模,通過(guò)基于AST的樹(shù)編碼組件學(xué)習(xí)代碼結(jié)構(gòu)信息,并在Transformer中將語(yǔ)法結(jié)構(gòu)信息和語(yǔ)義信息融合.本文在大規(guī)模Java數(shù)據(jù)集上進(jìn)行了全面實(shí)驗(yàn).實(shí)驗(yàn)結(jié)果表明,本文方法在BLEU-4、METEOR和ROUGE-L指標(biāo)上的得分均高于3種對(duì)照方法.

    未來(lái)研究可以集成更大的語(yǔ)料庫(kù),并結(jié)合其他基于深度學(xué)習(xí)的方法,探索對(duì)語(yǔ)法結(jié)構(gòu)信息和順序語(yǔ)義信息更高效的融合方法,進(jìn)而提高自動(dòng)生成代碼注釋的質(zhì)量.

    猜你喜歡
    語(yǔ)義信息方法
    語(yǔ)言與語(yǔ)義
    訂閱信息
    中華手工(2017年2期)2017-06-06 23:00:31
    可能是方法不對(duì)
    “上”與“下”語(yǔ)義的不對(duì)稱(chēng)性及其認(rèn)知闡釋
    用對(duì)方法才能瘦
    Coco薇(2016年2期)2016-03-22 02:42:52
    四大方法 教你不再“坐以待病”!
    Coco薇(2015年1期)2015-08-13 02:47:34
    捕魚(yú)
    認(rèn)知范疇模糊與語(yǔ)義模糊
    展會(huì)信息
    語(yǔ)義分析與漢俄副名組合
    永久免费av网站大全| 午夜福利影视在线免费观看| 飞空精品影院首页| 免费大片黄手机在线观看| 人成视频在线观看免费观看| 十分钟在线观看高清视频www| 一区二区三区四区激情视频| 国产欧美日韩一区二区三区在线| 亚洲性久久影院| 久久免费观看电影| 91久久精品国产一区二区三区| 在现免费观看毛片| 国产色爽女视频免费观看| 成人亚洲精品一区在线观看| 国产一区二区在线观看av| 亚洲精品久久午夜乱码| 久久精品久久久久久久性| 久久久欧美国产精品| 交换朋友夫妻互换小说| 多毛熟女@视频| a级毛片黄视频| 精品亚洲乱码少妇综合久久| av有码第一页| 99热网站在线观看| 我要看黄色一级片免费的| 十八禁高潮呻吟视频| av有码第一页| 少妇人妻久久综合中文| 国产亚洲精品久久久com| 乱人伦中国视频| 国产一区二区激情短视频 | 成人手机av| 搡老乐熟女国产| 亚洲人与动物交配视频| 成人午夜精彩视频在线观看| 午夜日本视频在线| 天美传媒精品一区二区| 久久久久久人妻| 久久久久国产网址| 哪个播放器可以免费观看大片| 伦理电影免费视频| 飞空精品影院首页| 最近中文字幕2019免费版| 亚洲美女视频黄频| 最近手机中文字幕大全| 夜夜爽夜夜爽视频| 国产黄色免费在线视频| 国国产精品蜜臀av免费| 啦啦啦啦在线视频资源| kizo精华| 欧美最新免费一区二区三区| 亚洲精品aⅴ在线观看| 成人手机av| 99热网站在线观看| 看免费av毛片| 精品一区二区三区视频在线| 丰满饥渴人妻一区二区三| 欧美国产精品va在线观看不卡| 美女内射精品一级片tv| 国产1区2区3区精品| 国产成人免费无遮挡视频| 高清不卡的av网站| 亚洲精品日本国产第一区| 黄网站色视频无遮挡免费观看| 国产无遮挡羞羞视频在线观看| 狠狠精品人妻久久久久久综合| 免费黄频网站在线观看国产| 久久久精品免费免费高清| 国产一区二区三区综合在线观看 | 视频中文字幕在线观看| 在现免费观看毛片| 中文字幕制服av| 看免费成人av毛片| 免费少妇av软件| 久久99一区二区三区| 国产成人精品婷婷| 韩国高清视频一区二区三区| 女性生殖器流出的白浆| 日韩三级伦理在线观看| 久久久久网色| 亚洲精品一二三| 久久99精品国语久久久| 精品少妇久久久久久888优播| 蜜桃国产av成人99| 少妇高潮的动态图| 精品久久蜜臀av无| 韩国av在线不卡| 日韩在线高清观看一区二区三区| 日本午夜av视频| 免费观看性生交大片5| 久久久久久久大尺度免费视频| 五月开心婷婷网| 精品一区二区三区四区五区乱码 | 亚洲精品美女久久久久99蜜臀 | 亚洲欧美色中文字幕在线| 亚洲欧美精品自产自拍| 国产视频首页在线观看| 中文字幕亚洲精品专区| 国产av码专区亚洲av| av又黄又爽大尺度在线免费看| 亚洲国产色片| 99re6热这里在线精品视频| av免费观看日本| 日日爽夜夜爽网站| 国产xxxxx性猛交| 亚洲精品乱码久久久久久按摩| 制服人妻中文乱码| 熟妇人妻不卡中文字幕| 日本黄大片高清| 有码 亚洲区| 亚洲欧美中文字幕日韩二区| 蜜桃在线观看..| 两性夫妻黄色片 | kizo精华| 国产一区二区在线观看av| 春色校园在线视频观看| 人妻 亚洲 视频| 2022亚洲国产成人精品| 久久国产亚洲av麻豆专区| av在线app专区| 天堂中文最新版在线下载| 亚洲欧洲日产国产| 欧美 日韩 精品 国产| 亚洲经典国产精华液单| 日韩av免费高清视频| 秋霞在线观看毛片| 国产精品一区二区在线观看99| 桃花免费在线播放| 最近的中文字幕免费完整| 国产成人一区二区在线| 亚洲av男天堂| 少妇 在线观看| 亚洲精品美女久久久久99蜜臀 | 欧美变态另类bdsm刘玥| 一区二区三区精品91| 免费观看无遮挡的男女| 国产精品麻豆人妻色哟哟久久| 欧美精品一区二区大全| 黄色毛片三级朝国网站| 久久久久久久亚洲中文字幕| 国产黄频视频在线观看| 春色校园在线视频观看| 亚洲成av片中文字幕在线观看 | 国产激情久久老熟女| a级毛色黄片| 女性生殖器流出的白浆| 一级毛片电影观看| 丝瓜视频免费看黄片| 大话2 男鬼变身卡| 久久久久久久精品精品| 在线观看一区二区三区激情| 日韩人妻精品一区2区三区| 欧美性感艳星| 久久久国产欧美日韩av| 亚洲av中文av极速乱| 久久青草综合色| 97在线人人人人妻| 亚洲精品久久久久久婷婷小说| 日本av手机在线免费观看| 99久久人妻综合| 日本黄大片高清| 丰满迷人的少妇在线观看| 午夜精品国产一区二区电影| 制服丝袜香蕉在线| 免费观看无遮挡的男女| 欧美变态另类bdsm刘玥| 国产成人免费观看mmmm| 欧美亚洲日本最大视频资源| 天天操日日干夜夜撸| 天堂8中文在线网| 涩涩av久久男人的天堂| a级毛片在线看网站| xxxhd国产人妻xxx| 亚洲三级黄色毛片| 久久精品久久久久久噜噜老黄| 春色校园在线视频观看| 成年人免费黄色播放视频| 免费不卡的大黄色大毛片视频在线观看| 亚洲国产精品成人久久小说| 成人亚洲精品一区在线观看| 制服人妻中文乱码| 国产xxxxx性猛交| 91aial.com中文字幕在线观看| 嫩草影院入口| 国产精品不卡视频一区二区| 国产欧美另类精品又又久久亚洲欧美| 丝袜在线中文字幕| 久久久亚洲精品成人影院| 亚洲精品av麻豆狂野| 国产一区有黄有色的免费视频| 国产精品国产三级专区第一集| 少妇猛男粗大的猛烈进出视频| 在线观看一区二区三区激情| 欧美日韩视频精品一区| 国产精品99久久99久久久不卡 | 亚洲性久久影院| 十分钟在线观看高清视频www| 亚洲综合精品二区| 久久久久久人妻| 赤兔流量卡办理| 午夜免费观看性视频| 亚洲精品美女久久av网站| 天天操日日干夜夜撸| 国产成人91sexporn| 日日爽夜夜爽网站| 三级国产精品片| 国产xxxxx性猛交| 免费观看av网站的网址| 一区在线观看完整版| 精品久久蜜臀av无| 一区二区三区四区激情视频| 久久99热6这里只有精品| 免费人成在线观看视频色| 久久99一区二区三区| 观看美女的网站| 老女人水多毛片| 亚洲av中文av极速乱| 久久午夜福利片| 少妇被粗大的猛进出69影院 | 少妇熟女欧美另类| 成年美女黄网站色视频大全免费| 日日爽夜夜爽网站| 尾随美女入室| 大码成人一级视频| 老熟女久久久| 这个男人来自地球电影免费观看 | 久久青草综合色| 男女无遮挡免费网站观看| 观看av在线不卡| 美女国产高潮福利片在线看| 全区人妻精品视频| 大片免费播放器 马上看| 免费看不卡的av| 99久久中文字幕三级久久日本| 久久久精品区二区三区| 国产免费一级a男人的天堂| 免费观看无遮挡的男女| 人人妻人人爽人人添夜夜欢视频| 亚洲综合色惰| 久久久久久人妻| 欧美精品一区二区大全| 欧美 亚洲 国产 日韩一| 成年人免费黄色播放视频| 少妇的逼好多水| 自线自在国产av| 国产精品国产三级专区第一集| 一本大道久久a久久精品| 国产探花极品一区二区| 91久久精品国产一区二区三区| 午夜福利视频在线观看免费| 成人国产麻豆网| 久久久久国产精品人妻一区二区| 伦理电影大哥的女人| 久久ye,这里只有精品| 国产色爽女视频免费观看| 观看av在线不卡| 狂野欧美激情性bbbbbb| 久久久久久久久久人人人人人人| 久久 成人 亚洲| 国产不卡av网站在线观看| 七月丁香在线播放| 男人舔女人的私密视频| 制服诱惑二区| 建设人人有责人人尽责人人享有的| 全区人妻精品视频| 丰满少妇做爰视频| av有码第一页| 亚洲色图综合在线观看| 免费在线观看完整版高清| 精品久久蜜臀av无| 国产深夜福利视频在线观看| 国产精品无大码| 精品一区二区三区视频在线| 欧美日韩一区二区视频在线观看视频在线| 精品卡一卡二卡四卡免费| 91精品三级在线观看| 有码 亚洲区| 精品亚洲成a人片在线观看| 男人操女人黄网站| 欧美3d第一页| 久久久亚洲精品成人影院| 又黄又粗又硬又大视频| 大陆偷拍与自拍| 国产综合精华液| 成年动漫av网址| 亚洲国产精品专区欧美| 九九爱精品视频在线观看| 汤姆久久久久久久影院中文字幕| 熟女人妻精品中文字幕| 日本黄大片高清| 成人无遮挡网站| 久久久久精品人妻al黑| 国产精品女同一区二区软件| 国产成人午夜福利电影在线观看| 有码 亚洲区| 丝袜喷水一区| 亚洲成国产人片在线观看| 在线亚洲精品国产二区图片欧美| 制服诱惑二区| 国产精品久久久久久精品古装| 亚洲av欧美aⅴ国产| 一区二区三区乱码不卡18| 日本黄色日本黄色录像| 综合色丁香网| 久久精品国产亚洲av涩爱| 久久ye,这里只有精品| 美女中出高潮动态图| 亚洲伊人久久精品综合| 久久精品国产亚洲av天美| 哪个播放器可以免费观看大片| 99热6这里只有精品| 亚洲欧美一区二区三区黑人 | 国产亚洲精品第一综合不卡 | 在线观看免费视频网站a站| 少妇的丰满在线观看| 欧美成人午夜免费资源| 国产精品秋霞免费鲁丝片| 欧美日韩亚洲高清精品| 看非洲黑人一级黄片| 建设人人有责人人尽责人人享有的| 欧美精品人与动牲交sv欧美| 五月天丁香电影| 狠狠婷婷综合久久久久久88av| 王馨瑶露胸无遮挡在线观看| 久久久久久久久久久免费av| 91精品国产国语对白视频| 99re6热这里在线精品视频| 久久午夜综合久久蜜桃| 欧美老熟妇乱子伦牲交| 91久久精品国产一区二区三区| 免费人成在线观看视频色| 欧美bdsm另类| 欧美人与性动交α欧美软件 | 亚洲欧洲国产日韩| av天堂久久9| 婷婷色av中文字幕| 久久精品国产亚洲av涩爱| 搡女人真爽免费视频火全软件| 王馨瑶露胸无遮挡在线观看| 日韩欧美一区视频在线观看| 免费人妻精品一区二区三区视频| 日日摸夜夜添夜夜爱| 精品人妻一区二区三区麻豆| 1024视频免费在线观看| 国产成人av激情在线播放| 男人舔女人的私密视频| 久久人妻熟女aⅴ| 黑人猛操日本美女一级片| 韩国高清视频一区二区三区| 欧美最新免费一区二区三区| 亚洲av福利一区| 免费看av在线观看网站| 黑丝袜美女国产一区| 午夜激情久久久久久久| 欧美成人午夜精品| av.在线天堂| 美女福利国产在线| 午夜福利乱码中文字幕| 自拍欧美九色日韩亚洲蝌蚪91| 一级爰片在线观看| 亚洲内射少妇av| 美女中出高潮动态图| 久久人人爽人人爽人人片va| 亚洲三级黄色毛片| 免费av中文字幕在线| 久久久精品免费免费高清| 97在线视频观看| 午夜福利乱码中文字幕| 国产高清国产精品国产三级| 欧美人与善性xxx| 色视频在线一区二区三区| 亚洲久久久国产精品| 黑人欧美特级aaaaaa片| 欧美日本中文国产一区发布| 母亲3免费完整高清在线观看 | 99热6这里只有精品| 午夜日本视频在线| 国产亚洲一区二区精品| 日韩中字成人| 国产乱人偷精品视频| 日韩制服骚丝袜av| 丁香六月天网| 亚洲精品乱久久久久久| 国产淫语在线视频| 欧美少妇被猛烈插入视频| 成年女人在线观看亚洲视频| 免费av中文字幕在线| 国产午夜精品一二区理论片| 黄片播放在线免费| 国产一区二区三区综合在线观看 | 久久人妻熟女aⅴ| av不卡在线播放| 亚洲国产精品一区二区三区在线| 日韩 亚洲 欧美在线| 天天躁夜夜躁狠狠久久av| 日韩 亚洲 欧美在线| 午夜日本视频在线| 国产成人欧美| 视频区图区小说| 伊人久久国产一区二区| 一本色道久久久久久精品综合| 久久久国产欧美日韩av| 午夜久久久在线观看| 成年动漫av网址| 丰满乱子伦码专区| 午夜福利,免费看| 欧美日韩视频高清一区二区三区二| 国产毛片在线视频| 91在线精品国自产拍蜜月| 久久鲁丝午夜福利片| 日日摸夜夜添夜夜爱| 久久女婷五月综合色啪小说| 亚洲四区av| 国产福利在线免费观看视频| 最近的中文字幕免费完整| av在线观看视频网站免费| 性色av一级| 国产熟女午夜一区二区三区| 日日啪夜夜爽| 777米奇影视久久| h视频一区二区三区| 亚洲欧洲精品一区二区精品久久久 | 国产极品粉嫩免费观看在线| 国产亚洲精品第一综合不卡 | 亚洲,欧美,日韩| 日本av手机在线免费观看| 国产精品.久久久| 咕卡用的链子| 成人毛片60女人毛片免费| 亚洲精品第二区| 国产精品一国产av| 久久精品国产鲁丝片午夜精品| 18禁裸乳无遮挡动漫免费视频| 免费少妇av软件| 丰满乱子伦码专区| 日韩,欧美,国产一区二区三区| 午夜福利视频精品| 日本免费在线观看一区| 美女国产高潮福利片在线看| 国产精品成人在线| 高清毛片免费看| 国产欧美另类精品又又久久亚洲欧美| 少妇的逼水好多| 人人妻人人添人人爽欧美一区卜| 女性生殖器流出的白浆| 啦啦啦中文免费视频观看日本| 18+在线观看网站| 看免费av毛片| 亚洲经典国产精华液单| 卡戴珊不雅视频在线播放| 精品少妇黑人巨大在线播放| 午夜老司机福利剧场| 寂寞人妻少妇视频99o| 亚洲五月色婷婷综合| 波多野结衣一区麻豆| 高清在线视频一区二区三区| 精品久久国产蜜桃| 国产在线视频一区二区| 欧美日韩国产mv在线观看视频| 亚洲第一区二区三区不卡| 九色亚洲精品在线播放| 如日韩欧美国产精品一区二区三区| 欧美成人午夜免费资源| 深夜精品福利| 狂野欧美激情性xxxx在线观看| 十八禁网站网址无遮挡| 亚洲精品国产av成人精品| 22中文网久久字幕| 黄色 视频免费看| av片东京热男人的天堂| 考比视频在线观看| 国产1区2区3区精品| 成年美女黄网站色视频大全免费| 三级国产精品片| 免费播放大片免费观看视频在线观看| 少妇精品久久久久久久| 狂野欧美激情性xxxx在线观看| 国产成人精品福利久久| 婷婷色综合www| 亚洲精品自拍成人| 超碰97精品在线观看| 少妇人妻久久综合中文| 久久这里有精品视频免费| 人人妻人人添人人爽欧美一区卜| 熟女电影av网| 日韩一区二区三区影片| 视频区图区小说| 精品国产一区二区三区四区第35| 美女xxoo啪啪120秒动态图| 成人亚洲精品一区在线观看| 人妻少妇偷人精品九色| 一区在线观看完整版| 免费黄频网站在线观看国产| av天堂久久9| 90打野战视频偷拍视频| 九色亚洲精品在线播放| 久久久久精品久久久久真实原创| 青春草视频在线免费观看| 国产成人av激情在线播放| 最近中文字幕2019免费版| 欧美日韩av久久| 69精品国产乱码久久久| 夜夜爽夜夜爽视频| 亚洲精品久久午夜乱码| 寂寞人妻少妇视频99o| 在线观看www视频免费| 美女国产视频在线观看| av视频免费观看在线观看| 免费观看无遮挡的男女| 人成视频在线观看免费观看| 中文字幕亚洲精品专区| 日韩av免费高清视频| 国产一区二区三区综合在线观看 | 一区二区三区精品91| 亚洲精品一区蜜桃| 免费av中文字幕在线| 五月开心婷婷网| 亚洲国产精品成人久久小说| 少妇被粗大猛烈的视频| 成人综合一区亚洲| 亚洲 欧美一区二区三区| 日本黄大片高清| 欧美亚洲日本最大视频资源| 精品午夜福利在线看| 国产成人一区二区在线| 99久久精品国产国产毛片| 国产精品成人在线| 国产一区有黄有色的免费视频| 9色porny在线观看| 全区人妻精品视频| 热re99久久精品国产66热6| 最近最新中文字幕免费大全7| 久久亚洲国产成人精品v| 最后的刺客免费高清国语| 国产精品国产三级专区第一集| 精品亚洲乱码少妇综合久久| 制服人妻中文乱码| 国产精品久久久久久久电影| 超碰97精品在线观看| 国产精品人妻久久久影院| 人妻一区二区av| 久久午夜福利片| 久久人妻熟女aⅴ| 国产成人aa在线观看| 超色免费av| 国产无遮挡羞羞视频在线观看| 亚洲美女黄色视频免费看| 麻豆精品久久久久久蜜桃| 国产精品国产三级专区第一集| 九色亚洲精品在线播放| 国产极品天堂在线| 国产精品久久久久久久久免| 亚洲色图 男人天堂 中文字幕 | 99国产精品免费福利视频| 久久精品久久精品一区二区三区| 国产一区二区激情短视频 | 国产男人的电影天堂91| 久热这里只有精品99| 国产片内射在线| 伦精品一区二区三区| 国产1区2区3区精品| 精品国产露脸久久av麻豆| 老司机影院成人| 国产精品 国内视频| 久久99热6这里只有精品| 婷婷色综合大香蕉| 精品亚洲乱码少妇综合久久| xxx大片免费视频| 国产又色又爽无遮挡免| 黄色怎么调成土黄色| 亚洲人成77777在线视频| 我要看黄色一级片免费的| 久久免费观看电影| 成人二区视频| 亚洲av电影在线进入| 亚洲五月色婷婷综合| 亚洲一级一片aⅴ在线观看| 深夜精品福利| 亚洲国产精品成人久久小说| 草草在线视频免费看| 少妇的逼水好多| 国产在视频线精品| 观看av在线不卡| 午夜视频国产福利| 久久精品国产综合久久久 | 极品少妇高潮喷水抽搐| 国产日韩一区二区三区精品不卡| av.在线天堂| 久久久久久人人人人人| 亚洲综合色网址| 性高湖久久久久久久久免费观看| 最近的中文字幕免费完整| 国产精品国产三级国产av玫瑰| 成年人免费黄色播放视频| 少妇人妻精品综合一区二区| 十分钟在线观看高清视频www| 日本黄色日本黄色录像| 51国产日韩欧美| 日韩大片免费观看网站| 国产欧美亚洲国产| 一边摸一边做爽爽视频免费| 五月玫瑰六月丁香| videosex国产| a级毛色黄片| 国产国拍精品亚洲av在线观看| 欧美最新免费一区二区三区| 婷婷色av中文字幕| 免费av中文字幕在线| 欧美日韩一区二区视频在线观看视频在线| 女的被弄到高潮叫床怎么办| 亚洲欧洲精品一区二区精品久久久 | 国产成人aa在线观看| 十分钟在线观看高清视频www| www.av在线官网国产| 一边摸一边做爽爽视频免费|