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

    融合圖嵌入和注意力機(jī)制的代碼搜索

    2022-04-13 02:40:26黃思遠(yuǎn)趙宇海梁燚銘
    計(jì)算機(jī)與生活 2022年4期
    關(guān)鍵詞:源代碼語句代碼

    黃思遠(yuǎn),趙宇海,梁燚銘

    東北大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,沈陽110169

    隨著人們對軟件的需求越來越多樣化和復(fù)雜化,程序開發(fā)人員往往要實(shí)現(xiàn)很多復(fù)雜的功能來滿足用戶的要求。然而在程序的開發(fā)過程當(dāng)中會發(fā)現(xiàn)許多功能在以往的開發(fā)過程當(dāng)中都被實(shí)現(xiàn)過,因此如何利用現(xiàn)有的源代碼來實(shí)現(xiàn)新的功能對于軟件開發(fā)是至關(guān)重要的,在一定程度上影響著整個(gè)項(xiàng)目的開發(fā)進(jìn)度。據(jù)相關(guān)調(diào)查表明,程序開發(fā)人員在互聯(lián)網(wǎng)上搜索相關(guān)問題解決辦法的時(shí)間大約占整個(gè)開發(fā)過程的1/5。程序開發(fā)人員在網(wǎng)絡(luò)上搜索相關(guān)代碼的動(dòng)機(jī)主要包括對現(xiàn)存在的開源代碼的重復(fù)使用、代碼的漏洞修復(fù)與檢測以及相關(guān)代碼片段的理解。與此同時(shí),隨著計(jì)算機(jī)的不斷發(fā)展,在互聯(lián)網(wǎng)中積累了越來越多的開源代碼庫,為軟件工程的研究提供了大量可依靠的數(shù)據(jù)。根據(jù)Github 在2018 年的年度報(bào)告顯示,Github 中開源的項(xiàng)目數(shù)量已達(dá)到9 600 萬,與2017 年相比增加40%。大規(guī)模且快速增長的開源代碼庫為代碼檢索任務(wù)提供了大量可復(fù)用的高質(zhì)量代碼,使代碼檢索任務(wù)有了很好的數(shù)據(jù)支撐。

    代碼檢索是指將自然語言作為查詢語句,在代碼倉庫中搜索滿足查詢要求的相關(guān)代碼片段來實(shí)現(xiàn)代碼的復(fù)用。在軟件工程領(lǐng)域,一個(gè)高效的代碼檢索工具可以極大地提高軟件的開發(fā)效率,從而來達(dá)到滿足用戶日益增長的需求的目的。與此同時(shí),無論是程序初學(xué)者,還是經(jīng)驗(yàn)熟練的軟件開發(fā)者,都希望可以利用現(xiàn)有的開源代碼來實(shí)現(xiàn)重復(fù)的功能,從而節(jié)省自己在程序開發(fā)過程中在網(wǎng)上查找相關(guān)解決方案所浪費(fèi)的時(shí)間。為了方便理解代碼檢索任務(wù)的流程,圖1 詳細(xì)地描述了代碼檢索任務(wù)的框架結(jié)構(gòu)。代碼檢索框架結(jié)構(gòu)主要包括線下數(shù)據(jù)處理和模型訓(xùn)練,以及線上用戶查詢等相關(guān)過程。

    圖1 代碼檢索任務(wù)框架Fig.1 Code retrieval task framework

    代碼搜索對于提高程序員編碼效率有著顯著性的提高,因?yàn)橹苯铀阉鞣弦蟮拇a片段比閱讀各種開源應(yīng)用程序接口(application programming interface,API)的原始說明文檔要有效得多。甚至很多開發(fā)人員可能甚至不知道要查找哪些API,只需要以自然語言的形式進(jìn)行查詢即可找到符合要求的代碼片段。在軟件開發(fā)過程中,程序員會遇到各種各樣的問題,例如“如何解析純文本數(shù)據(jù)”。在遇到問題的時(shí)候大多數(shù)程序員都會選擇在百度上去查找相關(guān)問題的答案,但是百度的檢索結(jié)果主要是依賴關(guān)鍵詞匹配等信息檢索技術(shù)。如果查詢語句中不存在與代碼相關(guān)的關(guān)鍵詞信息,則百度檢索返回的結(jié)果是十分糟糕的。另一個(gè)受歡迎的程序問答網(wǎng)站是Stack Overflow,它主要以問答的形式來呈現(xiàn)各種問題的解決答案。當(dāng)某人在網(wǎng)站上以自然語言的形式提出一個(gè)編程相關(guān)問題,會有很多人在提問下方提供各種各樣的解決方案,并且利用投票機(jī)制對解決方案進(jìn)行排序來將大多數(shù)人認(rèn)同的答案呈現(xiàn)在頂部,它為軟件開發(fā)人員和初學(xué)者提供了很大的便利。當(dāng)程序開發(fā)人員想在Stack Overflow 查找“如何解析純文本數(shù)據(jù)”這一問題的解決辦法,可能在Stack Overflow 上已經(jīng)有人問過和回答過同樣的問題,程序員分析和理解其他人對這個(gè)問題的解決辦法來完成自己的任務(wù)。盡管Stack Overflow 資源豐富,但它并不包含每個(gè)問題的答案。與此同時(shí),Stack Overflow中不討論特定于某個(gè)公司專有代碼和API 的問題,針對特定領(lǐng)域或者公司的內(nèi)部相關(guān)編程問題,無法提供相應(yīng)解決辦法。

    傳統(tǒng)的基于信息檢索的源代碼檢索算法,不能充分理解自然語言查詢語句的語義信息。因此,構(gòu)建一個(gè)充分理解自然語言查詢語義的源代碼檢索算法來獲取相關(guān)代碼片段,實(shí)現(xiàn)代碼的復(fù)用對軟件的開發(fā)是十分有意義的。針對上述存在的問題,本文提出融合圖嵌入與注意力機(jī)制的代碼檢索算法GraphCS。GraphCS 算法的創(chuàng)新在于不僅考慮代碼片段的純文本語義信息,也考慮代碼片段復(fù)雜邏輯結(jié)構(gòu)信息,將語義特征與結(jié)構(gòu)特征相融合作為代碼片段特征表示。為了更好地捕捉代碼片段中包含的信息,融入注意力機(jī)制來更好地學(xué)習(xí)代碼片段表示。與CODEnn算法相比,GraphCS 算法在Frank、MRR、Precision@1/5/10 以及SuccessRate@1/5/10 指標(biāo)上有一定提升。

    1 相關(guān)工作

    1.1 基于信息檢索的代碼檢索算法

    在軟件工程領(lǐng)域,針對代碼檢索的相關(guān)研究還處于初級階段,現(xiàn)階段的研究主要基于信息檢索和自然語言處理相關(guān)技術(shù)。Krugle(http://www.krugle.com/)和Ohloh(https://code.ohloh.net/)采用基于關(guān)鍵字匹配的信息檢索方法,在商業(yè)中被廣泛應(yīng)用,但是算法的檢索結(jié)果大多情況下不符合程序開發(fā)人員的要求。Lucene(https://lucene.apache.org/)是一個(gè)傳統(tǒng)的文本搜索引擎,而Sourcerer是基于Lucene 實(shí)現(xiàn)的代碼檢索工具,將代碼屬性和代碼的受歡迎程度相結(jié)合作為評價(jià)推薦代碼質(zhì)量的評估指標(biāo)來檢索相關(guān)代碼片段。Reiss提出基于源代碼語義和語法相結(jié)合的源代碼檢索算法,它要求用戶不僅要提供自然語言查詢語句,還要提供其他規(guī)范約束,但不考慮自然語言查詢語句的語義信息。如果缺少對相關(guān)代碼語義和語法信息的理解,則檢索結(jié)果的準(zhǔn)確性會降低,對于初學(xué)者和大多數(shù)程序員來說存在一定的困難。SNIFF分析相關(guān)代碼片段的API 文檔信息,并為代碼片段添加注釋信息,并建立相關(guān)索引,來進(jìn)行代碼檢索。Portfolio給定一個(gè)自然語言查詢語句,根據(jù)自然語言查詢語句來查找用戶與任務(wù)相匹配的函數(shù)定義與相關(guān)用法。Reformu以WordNet 生成的同義詞來擴(kuò)展查詢語句中的單詞使其與源代碼中具有類似語義的單詞相同,從而提高代碼搜索結(jié)果的準(zhǔn)確性。INQRES考慮源代碼中單詞之間的關(guān)系,交互式地重新構(gòu)造搜索查詢,以優(yōu)化查詢質(zhì)量。SWIM算法對給定API 的自然語言查詢語句進(jìn)行分析,利用從開源代碼庫中學(xué)習(xí)到程序編碼模式來合成相關(guān)的代碼片段。CodeHow算法提取與用戶查詢相關(guān)的潛在API,并使用檢索到的API 信息來增強(qiáng)原始查詢語句,使用集成擴(kuò)展的布爾模型來實(shí)現(xiàn)精確的代碼檢索結(jié)果。

    1.2 基于深度學(xué)習(xí)的代碼檢索算法

    基于信息檢索和自然語言技術(shù)的代碼檢索不能充分理解自然語言查詢語句的語義信息,當(dāng)代碼庫中沒有與查詢語句中的關(guān)鍵詞相關(guān)的代碼片段時(shí),會嚴(yán)重影響代碼的檢索結(jié)果。最近提出的基于深度學(xué)習(xí)的語義代碼檢索算法,以自然語言的形式來查找符合查詢語句語義信息的代碼片段。NCS以無監(jiān)督的方式在大規(guī)模語料庫上訓(xùn)練,獲取代碼片段和自然語言注釋部分的固定長度的嵌入向量表示。在自然語言查詢部分以向量均值來表示,而代碼片段部分則以TF-IDF 權(quán)重的方式獲取相應(yīng)的均值表示,以余弦相似度來判斷兩個(gè)向量的相似程度。UNIF以注意力機(jī)制來組合代碼片段中每個(gè)令牌的嵌入,并生成嵌入整個(gè)代碼片段的嵌入向量表示。自然語言查詢語句嵌入是通過對查詢嵌入以詞嵌入相加求均值向量進(jìn)行表示。以NCS 中學(xué)習(xí)的嵌入矩陣為初始值,并在訓(xùn)練期間以高質(zhì)量的有監(jiān)督數(shù)據(jù)進(jìn)一步微調(diào)。SCS基于代碼到自然語言注釋序列的網(wǎng)絡(luò)的部分編碼器來嵌入代碼令牌序列。并以一個(gè)語言模型來嵌入查詢標(biāo)記序列。在推理和學(xué)習(xí)過程中將代碼片段部分嵌入轉(zhuǎn)換為查詢嵌入。CODEnn以一個(gè)端到端的方式訓(xùn)練一個(gè)代碼檢索模型。從代碼片段中提取方法名序列、API序列和令牌來表示代碼片段的特征。以雙向長短期記憶單元(bi-directional long short-term memory,Bi-LSTM)模型來提取API序列、方法名序列和自然語言注釋部分特征來獲取相應(yīng)的向量表示,以余弦相似度的方法來判斷代碼片段特征向量和自然語言特征向量的相似性程度。CoaCor利用代碼總結(jié)模型的方式來生成代碼檢索任務(wù)的自然語言注釋,并且以一個(gè)代碼檢索模型來查詢相關(guān)代碼片段。

    2 融合圖嵌入和注意力機(jī)制代碼搜索算法

    2.1 數(shù)據(jù)提取

    本文提出的融合圖嵌入和注意力機(jī)制的代碼搜索算法(GraphCS)在代碼純文本信息基礎(chǔ)上考慮代碼片段的邏輯圖結(jié)構(gòu)信息,雖然CODEnn 算法提供了千萬級別的代碼片段和注釋數(shù)據(jù)對,但是數(shù)據(jù)都是經(jīng)過預(yù)處理的,并不能從已處理的數(shù)據(jù)集中提取代碼片段的邏輯圖結(jié)構(gòu)信息。因此,為了從源程序中提取可用于圖嵌入的數(shù)據(jù),從開源代碼庫中爬取2016—2019 年的Java 開源項(xiàng)目,并對數(shù)據(jù)集進(jìn)行清洗操作。首先,移除包含非英文的代碼注釋數(shù)據(jù)對;其次,移除注釋為非Javadoc格式代碼注釋數(shù)據(jù)對;然后,移除行數(shù)小于指定閾值和超過指定閾值的代碼注釋數(shù)據(jù)對;最后,移除類的構(gòu)造方法以及類中其他相應(yīng)的初始化方法。表1 詳細(xì)地對源代碼檢索任務(wù)的數(shù)據(jù)集規(guī)模以及格式進(jìn)行相關(guān)概述。原始數(shù)據(jù)集由3 564 213 條方法體和注釋數(shù)據(jù)對組成,經(jīng)過清洗后的數(shù)據(jù)為2 141 921條方法體和注釋數(shù)據(jù)對。為了模擬真實(shí)的代碼檢索,從開源代碼倉庫上提取1 569 525條只包含方法體的代碼片段作為代碼檢索數(shù)據(jù)庫。

    表1 數(shù)據(jù)集介紹Table 1 Dataset introduction

    為了學(xué)習(xí)程序語言豐富的語義和語法信息,從不同的角度來提取代碼片段的特征。代碼片段特征提取部分是以方法體為單位來做特征提取,它不僅包含豐富的文本語義信息,同時(shí)也包含復(fù)雜的邏輯結(jié)構(gòu)信息。因此,從代碼片段中提取文本語義特征包括方法名序列和令牌信息,而提取的邏輯圖結(jié)構(gòu)特征為方法體對應(yīng)的程序依賴圖(program dependency graph,PDG)信息。自然語言部分則為方法體對應(yīng)的注釋序列信息。其中,代碼檢索任務(wù)數(shù)據(jù)提取流程如圖2 所示。

    圖2 數(shù)據(jù)處理Fig.2 Data processing

    方法名提?。禾崛∶總€(gè)Java 方法片段的函數(shù)名,并以駝峰規(guī)則將函數(shù)名拆分成多個(gè)詞語的組合。例如,方法名readXmlFiles 將會被拆分為read、xml 以及files。

    令牌提?。簽榱颂崛×钆菩畔?,提取數(shù)據(jù)集中每個(gè)Java 方法體內(nèi)部的全部令牌信息,并以駝峰規(guī)則對每個(gè)令牌進(jìn)行單詞拆分,以此作為相應(yīng)的分詞方法。針對分詞后的語料,移除令牌數(shù)據(jù)中重復(fù)單詞、常用的停用詞以及Java關(guān)鍵字。

    自然語言提?。和ㄟ^Eclipse JDT 工具將Java 方法轉(zhuǎn)換為抽象語法樹,并從抽象語法樹中提取JavaDoc注釋部分第一行語句作為自然語言描述。

    程序圖嵌入提取:為了提取源代碼中每一個(gè)方法體的邏輯圖結(jié)構(gòu)信息,首先,提取Java 代碼片段的控制流圖,在控制流圖的基礎(chǔ)上引入圖中節(jié)點(diǎn)之間的數(shù)據(jù)依賴關(guān)系類以及控制依賴關(guān)系,從而為代碼片段構(gòu)建出更加復(fù)雜的程序依賴圖。其次,以WL(Weisfeiler-Lehman)重標(biāo)簽算法為程序依賴圖中的每個(gè)節(jié)點(diǎn)進(jìn)行重標(biāo)簽,并提取每個(gè)程序依賴圖中的子圖結(jié)構(gòu)信息。最終,以Doc2Vec 的思想將子圖結(jié)構(gòu)作為上下文信息從而來獲取每個(gè)方法體對應(yīng)的程序依賴圖的向量嵌入表示。程序依賴圖特征向量提取過程如圖3 所示。

    圖3 PDG 向量提取過程Fig.3 PDG vector extraction process

    2.2 WL 重標(biāo)簽算法提取子圖信息

    假設(shè)給定圖,并設(shè)定圖4 中每個(gè)節(jié)點(diǎn)的初始化標(biāo)簽為{1,1,2,3,1}??紤]迭代一次時(shí),WL 算法聚合每個(gè)中心節(jié)點(diǎn)的鄰域節(jié)點(diǎn)的標(biāo)簽。例如,圖中節(jié)點(diǎn)的鄰域節(jié)點(diǎn)為和,則聚合鄰域之后的標(biāo)簽為1-1,2。根據(jù)新的標(biāo)簽對標(biāo)簽進(jìn)行排序和壓縮,壓縮后的標(biāo)簽代表對應(yīng)的子樹模式。假設(shè)圖4 中標(biāo)簽為7 的節(jié)點(diǎn),則存在一個(gè)高度為1 的子樹模式,其中根節(jié)點(diǎn)標(biāo)簽1,它的鄰居有標(biāo)簽1 和3。以WL 算法來提取子圖信息的算法流程如算法1 所示。

    圖4 G 上的WL 重標(biāo)簽Fig.4 WL relabeling for graph G

    WLSubGraph(,,)

    2.3 GraphCS 模型

    自然語言與代碼片段從詞的分布的角度來考慮是不同的,因此二者是異構(gòu)數(shù)據(jù)。源代碼檢索任務(wù)考慮將代碼片段和自然語言兩個(gè)異構(gòu)數(shù)據(jù)嵌入到同一個(gè)向量空間,從而使語義相似的代碼片段和自然語言在向量空間距離較近。

    源代碼片段中不僅包含大量純文本語義信息,也包含豐富的邏輯結(jié)構(gòu)信息。因此基于圖嵌入算法在提取代碼片段的特征時(shí),不僅考慮代碼的純文本語義信息(方法名和令牌),也考慮了代碼的邏輯結(jié)構(gòu)信息(程序依賴圖信息)。

    為了更深層次捕捉代碼序列的語義信息,以雙向LSTM 來學(xué)習(xí)序列的相關(guān)特征表示。其中,LSTM網(wǎng)絡(luò)結(jié)構(gòu)如圖5 所示。

    圖5 LSTM 網(wǎng)絡(luò)結(jié)構(gòu)Fig.5 LSTM network structure

    LSTM 是為了解決RNN 中存在的梯度爆炸和梯度消失的問題而提出來的更高效的序列語義特征提取模型。LSTM 主要引入遺忘門、輸入門以及輸出門來達(dá)到門控的目的,并以高速網(wǎng)絡(luò)的方式充分保留上一時(shí)刻的細(xì)胞狀態(tài)來更好地捕捉序列的語義表示。LSTM 神經(jīng)網(wǎng)絡(luò)的迭代公式如下:

    為了更好地提取語句的特征向量表示,引入雙向LSTM 時(shí)序網(wǎng)絡(luò)模型。雙向LSTM 考慮正反兩個(gè)方向上下文信息,將正反兩個(gè)方向的特征向量進(jìn)行拼接,從而達(dá)到更好捕捉語義信息的目的。

    方法名序列,,…,name為以駝峰規(guī)則對方法名進(jìn)行分詞獲取的長度為的方法名序列,以雙向LSTM 來提取方法名序列的各個(gè)時(shí)刻隱藏層的特征表示。

    為了更深層次地學(xué)習(xí)方法名的語義特征表示,將正反LSTM 的隱藏層向量進(jìn)行拼接,并以最大池化方法來對各個(gè)隱藏層的狀態(tài)進(jìn)行壓縮,并作為方法名序列特征的最終向量表示。

    令牌信息,,…,token為對方法體內(nèi)的代碼片段以駝峰規(guī)則拆分代碼語句后,并移除重復(fù)項(xiàng)、常用停用詞以及Java 關(guān)鍵字獲取到的長度為的代碼片段。在提取令牌特征時(shí),并未考慮代碼的語序關(guān)系,故以多層感知機(jī)(multi-layer perceptron,MLP)方式來學(xué)習(xí)令牌的特征向量表示。

    式中,emdtk是令牌中在位置處單詞的初始化嵌入向量表示,而W是全連接層中的參數(shù)矩陣。,,…,htoken為學(xué)習(xí)后令牌的嵌入向量表示,并以最大池化方法對全部令牌的向量表示進(jìn)行壓縮,作為令牌片段特征的最終向量表示。

    在提取程序依賴圖特征時(shí),提取Java 代碼片段的控制流圖,在控制流圖的基礎(chǔ)上引入數(shù)據(jù)依賴關(guān)系類以及控制依賴關(guān)系,從而構(gòu)建出代碼片段的程序依賴圖。以WL 算法從程序依賴圖中提取每個(gè)節(jié)點(diǎn)對應(yīng)的子圖集合作為每個(gè)圖的上下文信息,并以Skip-Gram 的方式學(xué)習(xí)圖的向量表示。在GraphCS算法中以多個(gè)卷積核的方式對圖特征向量以一維卷積來提取不同的子特征,獲取程序依賴圖的最終向量表示。

    在特征融合部分,以注意力的方式為方法名特征向量、令牌特征向量以及程序依賴圖特征向量分配不同的權(quán)重系數(shù)。代碼片段的不同特征以不同的權(quán)重進(jìn)行融合,來學(xué)習(xí)最終的代碼片段向量表示。

    為了與自然語言特征向量表示維度一致,會以全連接的方式將代碼片段的特征向量映射到與自然語言片段特征向量相等的維度。在自然語言描述部分,通過雙向時(shí)序神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)自然語言描述中所包含的語義特征表示??紤]自然語言注釋序列,,…,desc是存在語序關(guān)系的,故以雙向LSTM 來提取各個(gè)時(shí)刻隱藏層的特征表示。

    為了更深層次地學(xué)習(xí)自然語言的語義特征表示,將正反LSTM 的隱藏層向量進(jìn)行拼接,并以最大池化方法將LSTM 的各個(gè)隱藏狀態(tài)向量表示壓縮成一個(gè)固定維度的向量作為自然語言片段特征的最終向量表示。

    通過代碼嵌入網(wǎng)絡(luò)和自然語言網(wǎng)絡(luò)將代碼片段特征和自然語言描述分別映射成相等維度的向量表示和。將代碼片段向量表示和自然語言部分向量表示映射到同一個(gè)向量空間,并以余弦相似度的方式衡量兩個(gè)向量的相似程度。

    在同一個(gè)向量空間中,代碼片段向量與自然語言向量的余弦相似度的值越高,則代碼片段和自然語言描述之間的語義越相近。如果代碼片段與自然語言描述語義很相近,它們在向量空間距離較近。自然語言與代碼片段在同一向量空間的映射如圖6所示。

    圖6 向量空間映射Fig.6 Vector space mapping

    圖6 中的自然語言查詢語句為append text to an existing file,在代碼庫中檢索到的相似度較高的代碼片段為方法名為append 的函數(shù)。自然語言與代碼片段在語義上相似性較高,因此在特征空間中二者距離較近。

    假設(shè)給定代碼片段C,以及代碼片段對應(yīng)的自然語言描述,為每個(gè)代碼片段隨機(jī)分配一個(gè)負(fù)樣本。在訓(xùn)練網(wǎng)絡(luò)模型時(shí),構(gòu)建<,>和<,>訓(xùn)練語料,并考慮最小化排名損失。

    式中,為網(wǎng)絡(luò)模型參數(shù),在訓(xùn)練過程中被設(shè)置為0.398 6。排名損失會促使代碼片段與其正確描述之間的余弦相似度上升,而代碼片段與錯(cuò)誤描述之間的余弦相似度下降。

    根據(jù)代碼片段和自然語言片段的特征提取方法,構(gòu)建基于GraphCS 的代碼檢索算法模型網(wǎng)絡(luò)結(jié)構(gòu)如圖7 所示。

    圖7 GraphCS 模型網(wǎng)絡(luò)結(jié)構(gòu)Fig.7 GraphCS model network structure

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

    3.1 性能指標(biāo)

    本文采用源代碼檢索任務(wù)中公認(rèn)的評估指標(biāo)Frank、SuccessRate@、Precision@以及MRR 來驗(yàn)證代碼檢索的有效性。

    Frank 是指在指定大小(=10)的返回結(jié)果列表中第一次出現(xiàn)的符合要求的結(jié)果。Frank 指標(biāo)的結(jié)果符合瀏覽信息從上而下的準(zhǔn)則,較小的Frank 意味著為找到所需結(jié)果所需的檢查工作量較小。Frank 值越小,則說明檢索結(jié)果越靠前。因此Frank 可以衡量單個(gè)代碼搜索查詢的有效性。

    MRR 表示每一個(gè)自然語言查詢語句query 檢索返回結(jié)果中指定大小(=10)的Frank 值的倒數(shù)的累加和,并對求和結(jié)果進(jìn)行均值化,在很大程度上可以衡量檢索結(jié)果的好壞。MRR 值越高,則說明檢索性能越優(yōu)越。MRR 值越低,則說明檢索性能越差。

    其中,||代表查詢語句的數(shù)量,代表查詢語句集合中的每個(gè)查詢語句,Frank代表查詢語句對應(yīng)的Frank 值。

    SuccessRate@(=1,5,10)衡量在返回的相似度排名的結(jié)果中排在前的結(jié)果中可能存在多個(gè)正確結(jié)果的查詢的百分比。

    其中,函數(shù)定義為當(dāng)判斷語句為真時(shí)返回結(jié)果1,否則返回0。SuccessRate@評估指標(biāo)對于檢索任務(wù)來說至關(guān)重要,因?yàn)樾阅軆?yōu)越的代碼檢索應(yīng)允許從較少的返回結(jié)果來發(fā)現(xiàn)所需的代碼。并且Success-Rate@度量值越高,則代碼搜索性能好。

    Precision@(=1,5,10)指標(biāo)用來衡量每個(gè)自然語言查詢返回的結(jié)果中的排在前的相關(guān)結(jié)果的百分比。

    Precision@可以反映查詢結(jié)果中于目標(biāo)相符合的結(jié)果的個(gè)數(shù),可以很好地提供不同用法的多種結(jié)果以學(xué)習(xí),可以降低不相關(guān)結(jié)果出現(xiàn)的次數(shù)。因此Precision@度量值越高,則代表代碼搜索性能越好。

    3.2 實(shí)驗(yàn)參數(shù)

    為了對模型進(jìn)行訓(xùn)練,將訓(xùn)練數(shù)據(jù)進(jìn)行隨機(jī)打亂并將批次大小設(shè)置為64。統(tǒng)計(jì)各個(gè)特征語料,構(gòu)建相應(yīng)的詞匯表。將詞匯表的大小設(shè)置正10 000 的時(shí)候,對語料庫的單詞覆蓋率達(dá)到95%以上,可以有效地學(xué)習(xí)詞匯的語義表示。針對不同的代碼特征,設(shè)置相應(yīng)的最大長度。當(dāng)序列的長度大于最大長度時(shí),對序列進(jìn)行截?cái)唷.?dāng)序列的長度小于最大長度時(shí),以數(shù)值0 進(jìn)行填充。在特征提取部分將LSTM 和嵌入向量維度設(shè)置成256,而將MLP 部分的嵌入向量維度設(shè)置成512。為了使模型有更好的泛化能力,在模型中添加Dropout 機(jī)制,將參數(shù)設(shè)置為0.25。詳細(xì)參數(shù)設(shè)置如表2 所示。

    表2 參數(shù)介紹Table 2 Parameter introduction

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

    CODEnn 算法是第一個(gè)基于深度學(xué)習(xí)的學(xué)習(xí)自然語言查詢語句語義信息的代碼檢索算法,在一定程度上取得了不錯(cuò)的效果。但是CODEnn 算法只考慮源代碼的純文本信息,而忽略了代碼中存在的邏輯結(jié)構(gòu)信息,不能充分理解程序語言豐富的語義和語法信息。GraphCS 算法不僅考慮代碼的純文本信息,還考慮了代碼中的邏輯結(jié)構(gòu)信息,并且融入注意力機(jī)制來更深層次地進(jìn)行代碼片段語義和語法特征的融合。為了驗(yàn)證GraphCS算法的有效性,與CODEnn算法進(jìn)行對比。為了更直觀地展現(xiàn)檢索效果的高效性,以Frank 作為評估標(biāo)準(zhǔn),GraphCS 算法和CODEnn算法檢索的Frank 值如表3 所示。

    表3 在Frank 上的評估結(jié)果Table 3 Evaluation results on Frank

    GraphCS 不僅考慮代碼結(jié)構(gòu)特征中豐富的文本信息,也考慮代碼片段的邏輯結(jié)構(gòu)信息。CODEnn 中未檢索到結(jié)果個(gè)數(shù)為17個(gè),而GraphCS中未檢索到結(jié)果個(gè)數(shù)為13 個(gè),GraphCS 成功檢索到相關(guān)代碼片段明顯高于CODEnn。GraphCS算法返回的檢索結(jié)果中在Top 1 處為符合要求的代碼片段個(gè)數(shù)比CODEnn返回的結(jié)果有一定的提升。并且從整體上分析,GraphCS算法大多數(shù)檢索的結(jié)果的Frank 值比CODEnn 靠前,F(xiàn)rank 的值越小,說明返回結(jié)果越靠前,符合自上而下的檢索方式。例如,考慮查詢語句check if file exists。從表3 知GraphCS 算法的Frank 值為3,則意味著在返回結(jié)果列表中第3 個(gè)代碼片段符合查詢要求;而CODEnn 算法的Frank 值為6,則意味著在返回結(jié)果列表中第6 個(gè)代碼片段符合查詢要求。大多數(shù)人在搜索問題的過程中,都只會關(guān)注靠前的內(nèi)容,后面的結(jié)果關(guān)注較少。綜上所述,從Frank 評估指標(biāo)結(jié)果分析可知GraphCS 與CODEnn 相比有較好的提升,可以提供更加符合查詢要求的代碼片段。

    本文不僅在Frank 上驗(yàn)證GraphCS 算法的有效性,還在SuccessRate@、Precision@、MRR 指標(biāo)以及時(shí)間性能上對GraphCS 和CODEnn 進(jìn)行系統(tǒng)評估。其中,SuccessRate@、Precision@、MRR 統(tǒng)計(jì)結(jié)果如表4 所示,時(shí)間性能對比結(jié)果如表5 所示。

    表4 性能對比Table 4 Performance comparison

    表5 檢索結(jié)果統(tǒng)計(jì)Table 5 Retrieval result statistics

    GraphCS 算法在SuccessRate@5 值為0.56,則意味著存在56%的查詢,可以在前5 個(gè)返回結(jié)果中找到相關(guān)的代碼段。CODEnn 算法在MRR 上的值為0.31,其中Recall@1/5/10=0.20/0.42/0.66,Precision@1/5/10=0.20/0.24/0.23。相比之下,GraphCS 算法在MRR 上的值為0.39。其中Recall@1/5/10=0.28/0.56/0.74 和Precision@1/5/10=0.28/0.35/0.36。實(shí)驗(yàn)結(jié)果表明,GraphCS 算法與CODEnn 算法相比,GraphCS在MRR 上提高了25.8%,在Recall@1/5/10 上提高了40.0%/33.3%/12.1%,在Precision@1/5/10 上提高了40.0%/45.8%/56.5%。在時(shí)間性能對比分析中可知,CODEnn 算法在CPU 上訓(xùn)練和檢索所花費(fèi)時(shí)間分別為49.3 h 和157 s;GraphCS算法在CPU上訓(xùn)練和檢索所花費(fèi)時(shí)間分別為67.4 h 和164 s。從CPU 上的時(shí)間性能分析可知二者差距不大,當(dāng)在GPU 中訓(xùn)練CODEnn 算法模型和GraphCS 算法模型時(shí)可以極大縮短訓(xùn)練和檢索所花費(fèi)的時(shí)間。因此,檢索精度的提升可以忽略時(shí)間性能的不足。綜上所述,可以證明引入邏輯圖結(jié)構(gòu)信息可以彌補(bǔ)純文本信息的不足,在訓(xùn)練和檢索時(shí)間性能差距不大的情況下可以在一定程度上提高代碼檢索的準(zhǔn)確率。從實(shí)驗(yàn)數(shù)據(jù)中可知GraphCS 算法在上述4 個(gè)評估指標(biāo)上獲得更好的精度,比CODEnn 算法獲取更多符合查詢語義信息的代碼片段。

    大多數(shù)情況下,一個(gè)方法的方法名可以很直觀地體現(xiàn)一個(gè)代碼片段的功能。例如,一個(gè)函數(shù)方法的方法名為readXmlFiles,從方法名上可以很明顯地確認(rèn)方法所包含的功能為解析Xml 文件。為了驗(yàn)證GraphCS 算法檢索結(jié)果的有效性,分別統(tǒng)計(jì)語義相關(guān)代碼片段個(gè)數(shù)和方法名相關(guān)的代碼片段個(gè)數(shù),統(tǒng)計(jì)數(shù)據(jù)如表6 所示。GraphCS 算法檢索結(jié)果中,語義相關(guān)的代碼片段個(gè)數(shù)為37,其中24 個(gè)代碼片段是方法名相關(guān)的。而CODEnn 算法檢索結(jié)果中,語義相關(guān)的代碼片段個(gè)數(shù)為33,其中18 個(gè)代碼片段是方法名相關(guān)的。GraphCS 算法中方法名相關(guān)與語義相關(guān)的比值為0.649,而CODEnn 算法中方法名相關(guān)與語義相關(guān)的比值為0.545。相比之下GraphCS 檢索的結(jié)果在語義和語法上都有較好的體現(xiàn),且方法名相關(guān)得較多。例如,查詢語句append text to an existing file 在GraphCS算法中的返回結(jié)果如圖8所示,而在CODEnn算法中返回的結(jié)果如圖9 所示。從返回結(jié)果可知,GraphCS 返回結(jié)果考慮得更加全面嚴(yán)謹(jǐn)且在方法名上更加相關(guān),而CODEnn 返回的結(jié)果相對比較簡略。

    圖8 GraphCS 檢索結(jié)果Fig.8 GraphCS retrieval result

    圖9 CODEnn 檢索結(jié)果Fig.9 CODEnn retrieval result

    表6 檢索結(jié)果統(tǒng)計(jì)Table 6 Retrieval result statistics

    本文主要與CODEnn 算法進(jìn)行了詳細(xì)的對比,為了證明GraphCS 算法的有效性,與基于RNN 和NeuralBOW 的代碼檢索算法進(jìn)行簡單對比。其中,RNN和NeuralBOW 是代碼檢索任務(wù)中兩個(gè)常用的基線模型,二者都是只對代碼片段的文本信息進(jìn)行編碼,然后以余弦相似度的方式來計(jì)算代碼片段與自然語言注釋的語義相似度。在MRR、SuccessRate@指標(biāo)上的實(shí)驗(yàn)結(jié)果如表7 所示。

    表7 實(shí)驗(yàn)結(jié)果統(tǒng)計(jì)Table 7 Experimental result statistics

    4 結(jié)束語

    源代碼的純文本語句包含大量語義信息,但是不能充分地體現(xiàn)代碼的邏輯結(jié)構(gòu)信息。本文提出一種基于圖嵌入的代碼檢索算法GraphCS。除了考慮源代碼的純文本信息之外,還考慮代碼的邏輯結(jié)構(gòu)特性,可以更深層次地學(xué)習(xí)源代碼的語義表示。與CODEnn 對比,檢索到更多符合語義的代碼片段。

    在未來的工作中,會考慮其他不同語言的數(shù)據(jù)集(C#或Python)進(jìn)行全面的實(shí)驗(yàn)。為了克服代碼的圖結(jié)構(gòu)大小不均衡而導(dǎo)致的圖嵌入效果提升不明顯問題,對代碼圖特征提取過程做進(jìn)一步優(yōu)化。

    猜你喜歡
    源代碼語句代碼
    人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
    基于TXL的源代碼插樁技術(shù)研究
    重點(diǎn):語句銜接
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    軟件源代碼非公知性司法鑒定方法探析
    精彩語句
    揭秘龍湖產(chǎn)品“源代碼”
    制服人妻中文乱码| 亚洲少妇的诱惑av| 免费看不卡的av| 男人操女人黄网站| 精品人妻熟女毛片av久久网站| 欧美乱码精品一区二区三区| 如日韩欧美国产精品一区二区三区| 一本综合久久免费| 激情五月婷婷亚洲| 亚洲精品中文字幕在线视频| 七月丁香在线播放| 久久国产精品影院| 啦啦啦中文免费视频观看日本| 欧美xxⅹ黑人| 午夜影院在线不卡| 欧美亚洲日本最大视频资源| 中文乱码字字幕精品一区二区三区| av一本久久久久| 久久久久国产一级毛片高清牌| 亚洲国产中文字幕在线视频| 大片免费播放器 马上看| 丰满少妇做爰视频| 免费看av在线观看网站| 黄网站色视频无遮挡免费观看| 午夜精品国产一区二区电影| 两个人免费观看高清视频| 深夜精品福利| 丝袜美腿诱惑在线| 如日韩欧美国产精品一区二区三区| 男人操女人黄网站| 成人18禁高潮啪啪吃奶动态图| 啦啦啦在线免费观看视频4| 9色porny在线观看| av一本久久久久| 最近最新中文字幕大全免费视频 | 狂野欧美激情性xxxx| 大型av网站在线播放| 91精品三级在线观看| 精品视频人人做人人爽| 乱人伦中国视频| 亚洲国产欧美网| 欧美日韩视频精品一区| 亚洲精品日韩在线中文字幕| 免费观看av网站的网址| 看免费成人av毛片| 精品一品国产午夜福利视频| 国产在线观看jvid| 精品少妇久久久久久888优播| 午夜久久久在线观看| 一区福利在线观看| 久久久国产欧美日韩av| 国产爽快片一区二区三区| 欧美日韩av久久| 91精品国产国语对白视频| 看免费av毛片| 99久久精品国产亚洲精品| 人体艺术视频欧美日本| 国产精品久久久久成人av| 伦理电影免费视频| 黄色怎么调成土黄色| 亚洲精品日本国产第一区| 国产精品久久久久久精品古装| 亚洲av在线观看美女高潮| 欧美97在线视频| 国产一区二区激情短视频 | a级片在线免费高清观看视频| 欧美日韩综合久久久久久| 伊人亚洲综合成人网| 一区在线观看完整版| 精品一区在线观看国产| 女人爽到高潮嗷嗷叫在线视频| 女人爽到高潮嗷嗷叫在线视频| 国产精品久久久久久精品电影小说| www.自偷自拍.com| 日韩电影二区| 人妻一区二区av| 亚洲av电影在线进入| 久久人妻福利社区极品人妻图片 | 精品高清国产在线一区| 色播在线永久视频| 国产精品三级大全| 国产黄频视频在线观看| 午夜福利,免费看| 尾随美女入室| 一级黄色大片毛片| 伦理电影免费视频| 欧美亚洲 丝袜 人妻 在线| 亚洲第一青青草原| 熟女av电影| 51午夜福利影视在线观看| 满18在线观看网站| 免费观看人在逋| 欧美精品一区二区大全| 欧美日韩综合久久久久久| 精品久久久久久久毛片微露脸 | 人人妻人人澡人人看| 在线看a的网站| 国产欧美亚洲国产| 久久毛片免费看一区二区三区| 新久久久久国产一级毛片| 午夜久久久在线观看| 亚洲免费av在线视频| 又大又黄又爽视频免费| 又粗又硬又长又爽又黄的视频| 十八禁人妻一区二区| 国产精品成人在线| 宅男免费午夜| 久热爱精品视频在线9| 一本—道久久a久久精品蜜桃钙片| 国产淫语在线视频| 少妇猛男粗大的猛烈进出视频| 欧美精品人与动牲交sv欧美| 亚洲成人免费av在线播放| 日日夜夜操网爽| 久9热在线精品视频| 亚洲精品一二三| 成年人午夜在线观看视频| 精品一区二区三区四区五区乱码 | 亚洲av电影在线进入| 少妇粗大呻吟视频| 欧美日韩视频高清一区二区三区二| 日韩一本色道免费dvd| 欧美在线黄色| 我要看黄色一级片免费的| 老司机午夜十八禁免费视频| 五月开心婷婷网| 亚洲精品一卡2卡三卡4卡5卡 | 欧美av亚洲av综合av国产av| 99久久综合免费| 精品久久久久久电影网| 岛国毛片在线播放| 妹子高潮喷水视频| 久久热在线av| 老司机深夜福利视频在线观看 | 91字幕亚洲| 我的亚洲天堂| 亚洲成人国产一区在线观看 | 亚洲,欧美精品.| 午夜久久久在线观看| 欧美亚洲日本最大视频资源| 多毛熟女@视频| 黄频高清免费视频| 久久精品国产亚洲av涩爱| 久久久精品区二区三区| 2018国产大陆天天弄谢| 精品国产一区二区三区久久久樱花| 999精品在线视频| 久久影院123| 黄频高清免费视频| 亚洲成人免费av在线播放| 9191精品国产免费久久| 国产成人av教育| 女性生殖器流出的白浆| 亚洲av在线观看美女高潮| av线在线观看网站| 男男h啪啪无遮挡| 日本一区二区免费在线视频| 久久国产精品大桥未久av| 好男人电影高清在线观看| 美女福利国产在线| 成人国产av品久久久| 亚洲中文av在线| 热re99久久精品国产66热6| 夫妻午夜视频| 亚洲精品自拍成人| 国产成人系列免费观看| 不卡av一区二区三区| 婷婷丁香在线五月| 狠狠婷婷综合久久久久久88av| 韩国精品一区二区三区| 好男人视频免费观看在线| 又大又黄又爽视频免费| 国产精品.久久久| 欧美亚洲日本最大视频资源| 50天的宝宝边吃奶边哭怎么回事| 后天国语完整版免费观看| 欧美老熟妇乱子伦牲交| 精品人妻一区二区三区麻豆| 成人国产一区最新在线观看 | 18禁观看日本| 狠狠精品人妻久久久久久综合| 五月天丁香电影| 91精品伊人久久大香线蕉| 婷婷丁香在线五月| 夫妻性生交免费视频一级片| 人体艺术视频欧美日本| 五月开心婷婷网| 国产亚洲欧美在线一区二区| 成人亚洲欧美一区二区av| 丝袜美腿诱惑在线| 视频区欧美日本亚洲| 国产精品一区二区在线观看99| 亚洲中文av在线| 亚洲第一青青草原| 国产欧美日韩精品亚洲av| av欧美777| 巨乳人妻的诱惑在线观看| 嫩草影视91久久| 人人妻,人人澡人人爽秒播 | 午夜福利,免费看| 午夜福利乱码中文字幕| 国产精品国产av在线观看| 久久久精品免费免费高清| 成人午夜精彩视频在线观看| 18禁国产床啪视频网站| 精品少妇黑人巨大在线播放| av有码第一页| 国产精品av久久久久免费| 精品免费久久久久久久清纯 | 婷婷色麻豆天堂久久| 成人手机av| 久久精品亚洲av国产电影网| av福利片在线| 国产精品人妻久久久影院| 夫妻午夜视频| 日本av手机在线免费观看| 亚洲av片天天在线观看| 成年人午夜在线观看视频| 亚洲熟女毛片儿| 999久久久国产精品视频| 91成人精品电影| 亚洲成人免费av在线播放| 美女午夜性视频免费| 午夜激情av网站| 日本欧美国产在线视频| 2021少妇久久久久久久久久久| 男女边吃奶边做爰视频| 爱豆传媒免费全集在线观看| 一级毛片黄色毛片免费观看视频| 久久女婷五月综合色啪小说| 香蕉丝袜av| 99国产精品一区二区蜜桃av | 美女大奶头黄色视频| 天天操日日干夜夜撸| 久久天躁狠狠躁夜夜2o2o | 日本欧美国产在线视频| 97精品久久久久久久久久精品| 欧美成人午夜精品| 一级a爱视频在线免费观看| 啦啦啦啦在线视频资源| 男人舔女人的私密视频| 新久久久久国产一级毛片| 精品国产一区二区三区四区第35| 国产又色又爽无遮挡免| 一二三四社区在线视频社区8| 国产在线免费精品| 免费女性裸体啪啪无遮挡网站| 男女免费视频国产| 91国产中文字幕| 国产熟女午夜一区二区三区| 少妇人妻 视频| 亚洲国产欧美在线一区| 伦理电影免费视频| 看免费av毛片| 亚洲国产欧美网| 一本久久精品| 十八禁高潮呻吟视频| 国产野战对白在线观看| 成年动漫av网址| 精品人妻在线不人妻| av视频免费观看在线观看| 成年动漫av网址| 亚洲av成人不卡在线观看播放网 | 亚洲国产成人一精品久久久| 黑人巨大精品欧美一区二区蜜桃| 一本综合久久免费| 热re99久久国产66热| 国产99久久九九免费精品| 亚洲色图综合在线观看| xxxhd国产人妻xxx| 亚洲国产精品一区三区| 在线av久久热| 久久综合国产亚洲精品| av国产久精品久网站免费入址| 亚洲精品日本国产第一区| 国产日韩欧美视频二区| 成人国产一区最新在线观看 | 日韩一卡2卡3卡4卡2021年| 成人三级做爰电影| 亚洲精品国产色婷婷电影| 啦啦啦在线免费观看视频4| 国产精品熟女久久久久浪| 日韩 亚洲 欧美在线| 美女视频免费永久观看网站| 老熟女久久久| 一区二区日韩欧美中文字幕| 久久天堂一区二区三区四区| 久久精品人人爽人人爽视色| 久久精品成人免费网站| 亚洲国产av影院在线观看| 色综合欧美亚洲国产小说| 精品一区二区三区av网在线观看 | 18禁观看日本| 久热这里只有精品99| 一二三四社区在线视频社区8| 19禁男女啪啪无遮挡网站| 一级毛片黄色毛片免费观看视频| 成人手机av| 亚洲综合色网址| 久久久久久久精品精品| 九色亚洲精品在线播放| 国产在线一区二区三区精| h视频一区二区三区| 国产免费现黄频在线看| 男女边摸边吃奶| 国产成人影院久久av| 国产国语露脸激情在线看| 一级毛片电影观看| 欧美日韩国产mv在线观看视频| 99热全是精品| 波多野结衣av一区二区av| 捣出白浆h1v1| 免费看十八禁软件| 亚洲成国产人片在线观看| xxxhd国产人妻xxx| 久久人人爽人人片av| 国产亚洲精品第一综合不卡| 亚洲av美国av| 国产亚洲精品久久久久5区| 又大又爽又粗| 国产成人一区二区三区免费视频网站 | 久久精品亚洲熟妇少妇任你| 精品福利观看| 亚洲欧美精品综合一区二区三区| 久久久精品94久久精品| 国产成人av教育| 操美女的视频在线观看| 国产人伦9x9x在线观看| 一级毛片我不卡| 亚洲 国产 在线| 国产有黄有色有爽视频| 日韩av免费高清视频| 亚洲成人免费电影在线观看 | 一级毛片 在线播放| 一级毛片我不卡| 欧美在线黄色| 一级,二级,三级黄色视频| 国产高清videossex| 精品国产超薄肉色丝袜足j| 国产精品二区激情视频| 国产熟女午夜一区二区三区| 欧美乱码精品一区二区三区| 久久精品熟女亚洲av麻豆精品| 超色免费av| av国产久精品久网站免费入址| 久久久欧美国产精品| 18禁黄网站禁片午夜丰满| 97人妻天天添夜夜摸| 成人免费观看视频高清| 自拍欧美九色日韩亚洲蝌蚪91| 又紧又爽又黄一区二区| 天天添夜夜摸| 青春草亚洲视频在线观看| videos熟女内射| 你懂的网址亚洲精品在线观看| 精品一区在线观看国产| 中文字幕亚洲精品专区| 久久人妻福利社区极品人妻图片 | 国产91精品成人一区二区三区 | 赤兔流量卡办理| 久久久精品国产亚洲av高清涩受| 国产精品三级大全| 欧美精品亚洲一区二区| 波野结衣二区三区在线| 国产片内射在线| 超碰97精品在线观看| 欧美xxⅹ黑人| 啦啦啦中文免费视频观看日本| 日韩视频在线欧美| 日本一区二区免费在线视频| 国产黄色视频一区二区在线观看| 午夜福利在线免费观看网站| 黑人猛操日本美女一级片| www.自偷自拍.com| 国产成人精品无人区| 中文字幕av电影在线播放| 亚洲第一av免费看| 一区在线观看完整版| 下体分泌物呈黄色| 久久精品人人爽人人爽视色| 伦理电影免费视频| videos熟女内射| 国产精品一国产av| 男人爽女人下面视频在线观看| 亚洲,欧美,日韩| 婷婷丁香在线五月| 狠狠精品人妻久久久久久综合| 日韩av不卡免费在线播放| 丝袜美足系列| 91麻豆精品激情在线观看国产 | 人体艺术视频欧美日本| 欧美久久黑人一区二区| 国产亚洲精品第一综合不卡| 午夜av观看不卡| www日本在线高清视频| 老汉色av国产亚洲站长工具| 国产激情久久老熟女| 午夜免费成人在线视频| 亚洲人成电影观看| 不卡av一区二区三区| 老汉色av国产亚洲站长工具| svipshipincom国产片| 丁香六月天网| 如日韩欧美国产精品一区二区三区| 无限看片的www在线观看| 黄色视频不卡| 国产一区二区在线观看av| 国产无遮挡羞羞视频在线观看| 欧美xxⅹ黑人| 91精品伊人久久大香线蕉| 亚洲,欧美精品.| 国产精品亚洲av一区麻豆| 国产亚洲一区二区精品| 最近中文字幕2019免费版| 看免费av毛片| 国产一卡二卡三卡精品| 国产成人欧美在线观看 | 亚洲成人国产一区在线观看 | 亚洲成人免费av在线播放| 久9热在线精品视频| 久久久久国产精品人妻一区二区| 99国产综合亚洲精品| 91老司机精品| 在线观看一区二区三区激情| 亚洲av成人精品一二三区| 亚洲午夜精品一区,二区,三区| www.av在线官网国产| 亚洲av电影在线观看一区二区三区| 久久久国产欧美日韩av| 亚洲美女黄色视频免费看| 午夜激情av网站| 国产免费福利视频在线观看| 久久精品国产综合久久久| www.av在线官网国产| 亚洲国产精品一区三区| 国产精品香港三级国产av潘金莲 | 欧美成人精品欧美一级黄| 天天操日日干夜夜撸| 一本久久精品| 人人妻人人澡人人爽人人夜夜| 色视频在线一区二区三区| 热99久久久久精品小说推荐| 亚洲精品乱久久久久久| 蜜桃国产av成人99| 亚洲av国产av综合av卡| 免费日韩欧美在线观看| 成人免费观看视频高清| xxxhd国产人妻xxx| 黄片小视频在线播放| 熟女少妇亚洲综合色aaa.| 亚洲少妇的诱惑av| 中文字幕人妻熟女乱码| 在线观看www视频免费| 欧美精品一区二区大全| 欧美国产精品va在线观看不卡| 国产免费现黄频在线看| 50天的宝宝边吃奶边哭怎么回事| 欧美少妇被猛烈插入视频| 国产亚洲一区二区精品| 亚洲一区二区三区欧美精品| 热99国产精品久久久久久7| 99精国产麻豆久久婷婷| 国产成人a∨麻豆精品| 国产一区二区激情短视频 | 亚洲欧美日韩高清在线视频 | 亚洲精品久久午夜乱码| 日韩欧美一区视频在线观看| 久久精品久久久久久噜噜老黄| 欧美亚洲日本最大视频资源| 国产精品偷伦视频观看了| 97精品久久久久久久久久精品| 天天操日日干夜夜撸| 热99国产精品久久久久久7| 叶爱在线成人免费视频播放| 国产1区2区3区精品| 欧美黑人欧美精品刺激| 国产高清videossex| 午夜福利一区二区在线看| 中文精品一卡2卡3卡4更新| 日本五十路高清| 精品国产一区二区久久| 18禁观看日本| 久久精品久久久久久噜噜老黄| 久久久久久久大尺度免费视频| 成人黄色视频免费在线看| 少妇 在线观看| av网站免费在线观看视频| 国语对白做爰xxxⅹ性视频网站| 国产男女超爽视频在线观看| 久久精品久久精品一区二区三区| avwww免费| 亚洲欧洲日产国产| 男人添女人高潮全过程视频| 色婷婷av一区二区三区视频| 国产一级毛片在线| 亚洲精品自拍成人| 欧美日韩国产mv在线观看视频| 大陆偷拍与自拍| 丰满少妇做爰视频| 国产熟女欧美一区二区| 亚洲av美国av| 久久久精品94久久精品| 久久精品国产a三级三级三级| 色精品久久人妻99蜜桃| 亚洲精品日本国产第一区| 最近最新中文字幕大全免费视频 | 国产有黄有色有爽视频| 欧美日韩国产mv在线观看视频| 成在线人永久免费视频| 99久久综合免费| 黄色视频不卡| 一区二区三区四区激情视频| 美女高潮到喷水免费观看| 黑人欧美特级aaaaaa片| 深夜精品福利| 久久影院123| 国产又爽黄色视频| 一级片'在线观看视频| 精品亚洲成国产av| 精品一区二区三区四区五区乱码 | 深夜精品福利| 男女国产视频网站| 久久久欧美国产精品| 中文字幕最新亚洲高清| 热99久久久久精品小说推荐| 中国国产av一级| 亚洲,欧美,日韩| xxxhd国产人妻xxx| 亚洲精品美女久久av网站| 国产免费视频播放在线视频| 亚洲,欧美精品.| 啦啦啦中文免费视频观看日本| 美女高潮到喷水免费观看| 中文字幕高清在线视频| 女人久久www免费人成看片| 啦啦啦视频在线资源免费观看| 欧美激情极品国产一区二区三区| 丁香六月欧美| 久久女婷五月综合色啪小说| 国产成人免费无遮挡视频| 久久国产精品大桥未久av| 老司机深夜福利视频在线观看 | 国产精品成人在线| 婷婷成人精品国产| 美女主播在线视频| 老司机靠b影院| 国产精品一国产av| 好男人电影高清在线观看| 18禁黄网站禁片午夜丰满| 丰满饥渴人妻一区二区三| 亚洲精品自拍成人| 麻豆乱淫一区二区| 1024视频免费在线观看| 老司机影院成人| 电影成人av| 亚洲熟女毛片儿| 在线观看免费午夜福利视频| 日本五十路高清| 久久久久国产一级毛片高清牌| 午夜福利乱码中文字幕| 亚洲av电影在线观看一区二区三区| 国产欧美日韩精品亚洲av| 丁香六月欧美| 叶爱在线成人免费视频播放| 亚洲午夜精品一区,二区,三区| 欧美成狂野欧美在线观看| 晚上一个人看的免费电影| 色婷婷av一区二区三区视频| 男女无遮挡免费网站观看| 国产精品一区二区免费欧美 | 免费观看av网站的网址| 国产精品99久久99久久久不卡| 超色免费av| 999久久久国产精品视频| 久久久久视频综合| 国产精品国产av在线观看| 人人妻人人添人人爽欧美一区卜| 波野结衣二区三区在线| 手机成人av网站| 亚洲色图 男人天堂 中文字幕| 18禁观看日本| 自拍欧美九色日韩亚洲蝌蚪91| 一区福利在线观看| 欧美日韩视频高清一区二区三区二| 国产男女超爽视频在线观看| 久久久久网色| 嫁个100分男人电影在线观看 | 亚洲人成电影免费在线| 国产亚洲精品第一综合不卡| www.精华液| 成年人免费黄色播放视频| 一区二区三区乱码不卡18| 久久久久久久久久久久大奶| 丰满饥渴人妻一区二区三| 老司机午夜十八禁免费视频| av欧美777| 看免费av毛片| 国产亚洲精品久久久久5区| 亚洲欧美一区二区三区国产| 欧美人与性动交α欧美精品济南到| 成人国产一区最新在线观看 | 亚洲成人免费av在线播放| 男女边吃奶边做爰视频| 亚洲精品美女久久av网站| 老司机深夜福利视频在线观看 | 大香蕉久久成人网| 乱人伦中国视频| 丰满人妻熟妇乱又伦精品不卡| 黄色一级大片看看| 国产片特级美女逼逼视频| 国产精品成人在线| 极品少妇高潮喷水抽搐| 久久久精品94久久精品| 亚洲精品一二三| 女人爽到高潮嗷嗷叫在线视频|