• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    一種基于Tree-LSTM的API使用代碼生成式推薦方法技術(shù)

    技術(shù)編號(hào):21088914 閱讀:34 留言:0更新日期:2019-05-11 09:43
    本發(fā)明專利技術(shù)屬于軟件工程和智能化軟件開發(fā)技術(shù)領(lǐng)域,具體為基于Tree?LSTM的API使用代碼生成式推薦方法。本發(fā)明專利技術(shù)通過(guò)對(duì)大量包含目標(biāo)API的源代碼進(jìn)行解析來(lái)構(gòu)造大量的訓(xùn)練樣本,在此基礎(chǔ)上使用深度學(xué)習(xí)和統(tǒng)計(jì)模型訓(xùn)練API使用代碼預(yù)測(cè)模型;代碼預(yù)測(cè)模型分為:基于抽象代碼樹結(jié)構(gòu)表示和深度學(xué)習(xí)的語(yǔ)句預(yù)測(cè)、基于數(shù)據(jù)依賴分析和統(tǒng)計(jì)模型的API調(diào)用參數(shù)預(yù)測(cè);其中,設(shè)計(jì)了適合于Tree?LSTM模型處理的代碼的抽象樹結(jié)構(gòu)表示。本發(fā)明專利技術(shù)為軟件開發(fā)人員提供基于代碼上下文的API使用代碼智能化推薦,根據(jù)已經(jīng)寫好的代碼逐行推薦開發(fā)人員可能會(huì)用到的API使用代碼,包括API對(duì)象創(chuàng)建/方法調(diào)用/屬性訪問(wèn)、控制語(yǔ)句以及變量聲明等,還會(huì)為API方法調(diào)用推薦相關(guān)的上下文變量作為參數(shù)。

    【技術(shù)實(shí)現(xiàn)步驟摘要】
    一種基于Tree-LSTM的API使用代碼生成式推薦方法
    本專利技術(shù)屬于軟件工程和智能化軟件開發(fā)
    ,具體涉及軟件開發(fā)中的智能化推薦和輔助編碼技術(shù),尤其涉及API使用代碼生成式推薦方法。
    技術(shù)介紹
    軟件開發(fā)人員經(jīng)常依賴于各種通用API(ApplicationProgrammingInterface,即應(yīng)用編程接口)(如JDK、Android中的API)完成自己的開發(fā)任務(wù)。這類API的數(shù)量眾多,開發(fā)人員難以熟知所有API的功能及其使用場(chǎng)合。如何在具體的代碼上下文中選擇合適的API完成自身的開發(fā)任務(wù)經(jīng)常成為開發(fā)人員遇到的難題。此外,許多API都有使用方式要求,例如API之間的使用組合、調(diào)用順序、相應(yīng)的控制結(jié)構(gòu)(如條件判斷、循環(huán)等)等,而違反API使用方式會(huì)導(dǎo)致代碼缺陷。因此,如何在所選擇的API基礎(chǔ)上按照正確的方式進(jìn)行使用也是開發(fā)人員面臨的一個(gè)挑戰(zhàn)。針對(duì)這一問(wèn)題的一個(gè)有效解決方案是在軟件集成開發(fā)環(huán)境等開發(fā)工具中提供代碼智能化推薦能力。這種智能化推薦應(yīng)當(dāng)通過(guò)對(duì)于開發(fā)人員正在編寫的代碼上下文的分析推測(cè)有可能在當(dāng)前位置上出現(xiàn)的API使用代碼(如API方法調(diào)用)并進(jìn)行推薦,從而輔助開發(fā)人員高效、高質(zhì)量地完成自己的開發(fā)任務(wù)。軟件代碼包含分支、循環(huán)等多種控制結(jié)構(gòu),因此相應(yīng)的代碼數(shù)據(jù)表示需要能夠反映這種控制結(jié)構(gòu),從而保留代碼中的結(jié)構(gòu)信息。為此,本專利技術(shù)采用支持樹結(jié)構(gòu)的深度學(xué)習(xí)網(wǎng)絡(luò)Tree-LSTM來(lái)訓(xùn)練API使用代碼預(yù)測(cè)模型,從而實(shí)現(xiàn)生成式的智能化推薦。Tree-LSTM是一種具有樹狀拓?fù)浣Y(jié)構(gòu)的遞歸神經(jīng)網(wǎng)絡(luò),接收樹結(jié)構(gòu)的數(shù)據(jù)作為輸入,并有效地編碼輸入數(shù)據(jù)中的結(jié)構(gòu)信息。Tree-LSTM的結(jié)構(gòu)如圖1所示。(Tree-LSTM的參考文獻(xiàn)為KaiShengTai,RichardSocher,ChristopherD.Manning:ImprovedSemanticRepresentationsFromTree-StructuredLongShort-TermMemoryNetworks.ACL(1)2015:1556-1566)。
    技術(shù)實(shí)現(xiàn)思路
    本專利技術(shù)的目的是為軟件開發(fā)人員提供基于代碼上下文的API使用代碼智能化推薦方法。本專利技術(shù)提供的API使用代碼生成式推薦方法,是基于Tree-LSTM的,具體是通過(guò)對(duì)大量包含目標(biāo)API(如JDK、Android中的API)的源代碼(開源代碼或企業(yè)代碼)進(jìn)行解析來(lái)構(gòu)造大量的訓(xùn)練樣本,在此基礎(chǔ)上使用深度學(xué)習(xí)和統(tǒng)計(jì)模型訓(xùn)練API使用代碼預(yù)測(cè)模型。本專利技術(shù)中的代碼預(yù)測(cè)模型包括兩部分:基于抽象代碼樹結(jié)構(gòu)表示和深度學(xué)習(xí)的語(yǔ)句預(yù)測(cè)、基于數(shù)據(jù)依賴分析和統(tǒng)計(jì)模型的API調(diào)用參數(shù)預(yù)測(cè)。本專利技術(shù)中,設(shè)計(jì)了一種適合于Tree-LSTM模型處理的代碼的抽象樹結(jié)構(gòu)表示,如圖2所示(所對(duì)應(yīng)的源代碼見附錄),其中的結(jié)點(diǎn)表示抽象的API使用語(yǔ)句或變量聲明/賦值語(yǔ)句或控制結(jié)構(gòu),邊表示它們之間的控制流關(guān)系。這種表示對(duì)代碼中的變量和常量進(jìn)行了抽象,僅保留了API對(duì)象創(chuàng)建/方法調(diào)用/屬性訪問(wèn)、控制結(jié)點(diǎn)(if、while等)以及變量聲明等。抽象的API使用語(yǔ)句結(jié)點(diǎn)將代碼中的API使用語(yǔ)句抽象為完整的方法簽名,例如附錄所展示的代碼中的sig.initSign(pk)會(huì)抽象為java.security.Signature.initSign(java.security.PrivateKey)。變量聲明/賦值語(yǔ)句結(jié)點(diǎn)將代碼中的變量聲明/賦值語(yǔ)句抽象為忽略變量名以及賦值常量的表示,例如附錄所展示的代碼中的StringsignMode=null會(huì)抽象為java.lang.String=Null??刂平Y(jié)構(gòu)結(jié)點(diǎn)用If、ElseIf、Else、While、DoWhile、For、Foreach、Try、Catch、Finally、Switch、Case、Default分別表示相應(yīng)的控制結(jié)構(gòu)。API使用語(yǔ)句結(jié)點(diǎn)和變量聲明/賦值語(yǔ)句結(jié)點(diǎn)最多只有一個(gè)子結(jié)點(diǎn)。這個(gè)子結(jié)點(diǎn)是其父節(jié)點(diǎn)所表示的API使用語(yǔ)句或變量聲明/賦值語(yǔ)句的下一條語(yǔ)句的抽象表示,因此這兩個(gè)結(jié)點(diǎn)的父子關(guān)系表示順序流關(guān)系,例如附錄所展示的代碼中的StringsignMode=null會(huì)被抽象為byte[]messageByte=message.getBytes()的子結(jié)點(diǎn)。控制結(jié)構(gòu)結(jié)點(diǎn)會(huì)有多個(gè)子結(jié)點(diǎn)分別表示其不同的控制流中的代碼,例如If控制結(jié)構(gòu)結(jié)點(diǎn)會(huì)多個(gè)子結(jié)點(diǎn)分別表示條件部分代碼(如果判斷條件包含API調(diào)用,則會(huì)產(chǎn)生相應(yīng)的結(jié)點(diǎn);如果判斷條件不包含任何API調(diào)用,那么不會(huì)產(chǎn)生結(jié)點(diǎn)加入到抽象樹表示中);判斷為真時(shí)的分支的代碼;ElseIf結(jié)點(diǎn)(若存在ElseIf分支);Else結(jié)點(diǎn)(若存在Else分支)以及整個(gè)If結(jié)束后的代碼。在條件部分解析結(jié)束時(shí),會(huì)加入一個(gè)特殊結(jié)點(diǎn)ConditionEnd結(jié)點(diǎn)來(lái)表示條件部分的結(jié)束;當(dāng)整個(gè)控制結(jié)構(gòu)解析結(jié)束時(shí),會(huì)加入一個(gè)特殊結(jié)點(diǎn)ControlEnd結(jié)點(diǎn)來(lái)表示整個(gè)控制結(jié)構(gòu)的結(jié)束。例如附錄所展示的代碼中的控制結(jié)構(gòu)If包含四個(gè)子結(jié)點(diǎn),ConditionEnd結(jié)點(diǎn)(這里由于If的判斷條件中不包含任何API調(diào)用,所以直接用ConditionEnd結(jié)點(diǎn)表示條件部分的結(jié)束);java.security.PrivateKey=Constant結(jié)點(diǎn)表示判斷條件為真時(shí)的分支的代碼;Else結(jié)點(diǎn);java.security.getInstance(java.lang.String)結(jié)點(diǎn)表示整個(gè)If控制結(jié)構(gòu)后的代碼。給定一段代碼,從代碼的第一行開始進(jìn)行解析,迭代地得到代碼的抽象樹結(jié)構(gòu)表示?;赥ree-LSTM的API使用代碼生成式推薦方法,流程如圖3所示,具體步驟如下:(一)語(yǔ)句模型訓(xùn)練,包括以下子步驟。(1)以訓(xùn)練數(shù)據(jù)源代碼中的方法為單位進(jìn)行代碼靜態(tài)分析,得到對(duì)應(yīng)的抽象樹結(jié)構(gòu)表示;(2)對(duì)每一個(gè)方法的抽象樹結(jié)構(gòu)表示,迭代式地從其根結(jié)點(diǎn)開始遍歷,移除當(dāng)前遍歷到的結(jié)點(diǎn)后的N個(gè)結(jié)點(diǎn)(N表示待完成代碼的規(guī)模),并用一個(gè)表示待完成代碼(窟窿)的Hole結(jié)點(diǎn)取代被移除掉的N個(gè)結(jié)點(diǎn),從而得到帶有窟窿的代碼抽象樹結(jié)構(gòu)表示,將每一個(gè)帶有窟窿的抽象樹結(jié)構(gòu)表示和被移除的第一個(gè)結(jié)點(diǎn)作為了一個(gè)訓(xùn)練樣本;(3)將所有訓(xùn)練樣本中帶有窟窿的抽象樹結(jié)構(gòu)表示中的每一個(gè)結(jié)點(diǎn)所表示的抽象API映射為向量,然后將所有訓(xùn)練樣本輸入Tree-LSTM網(wǎng)絡(luò)進(jìn)行訓(xùn)練,得到語(yǔ)句模型。(二)參數(shù)模型訓(xùn)練,包括以下子步驟:(1)對(duì)于步驟(一)中得到的訓(xùn)練樣本中的代碼抽象樹結(jié)構(gòu)表示,結(jié)合對(duì)應(yīng)的源代碼進(jìn)行數(shù)據(jù)依賴分析,在存在數(shù)據(jù)流依賴的結(jié)點(diǎn)之間加上數(shù)據(jù)依賴邊,并且對(duì)于表示變量聲明和賦值的結(jié)點(diǎn)加入其對(duì)應(yīng)的變量名,從而得到加入了數(shù)據(jù)依賴的抽象樹結(jié)構(gòu)表示。如圖4所示(其中實(shí)線表示控制流邊,虛線表示數(shù)據(jù)流邊),加入了數(shù)據(jù)依賴的抽象樹結(jié)構(gòu)表示比原始的抽象樹結(jié)構(gòu)表示多了結(jié)點(diǎn)之間的數(shù)據(jù)流邊,以及結(jié)點(diǎn)所表示的變量名,其他結(jié)構(gòu)與原始的抽象樹結(jié)構(gòu)表示一致。例如java.lang.String.getBytes()結(jié)點(diǎn)所表示的變量為messageByte,因此java.lang.String.getBytes()結(jié)點(diǎn)中加了messageByte這個(gè)變量名;同時(shí)java.lang.String.getBytes()結(jié)點(diǎn)與java.security.Signature本文檔來(lái)自技高網(wǎng)
    ...

    【技術(shù)保護(hù)點(diǎn)】
    1.基于Tree?LSTM的API使用代碼生成式推薦方法,其特征在于,通過(guò)對(duì)大量包含目標(biāo)API的源代碼進(jìn)行解析來(lái)構(gòu)造大量的訓(xùn)練樣本,在此基礎(chǔ)上使用深度學(xué)習(xí)和統(tǒng)計(jì)模型訓(xùn)練API使用代碼預(yù)測(cè)模型;所述代碼預(yù)測(cè)模型為兩部分:基于抽象代碼樹結(jié)構(gòu)表示和深度學(xué)習(xí)的語(yǔ)句預(yù)測(cè)、基于數(shù)據(jù)依賴分析和統(tǒng)計(jì)模型的API調(diào)用參數(shù)預(yù)測(cè);其中,設(shè)計(jì)了一種適合于Tree?LSTM模型處理的代碼的抽象樹結(jié)構(gòu)表示,其中的結(jié)點(diǎn)表示抽象的API使用語(yǔ)句或變量聲明/賦值語(yǔ)句或控制結(jié)構(gòu),邊表示它們之間的控制流關(guān)系;這種表示對(duì)代碼中的變量和常量進(jìn)行了抽象,僅保留了API對(duì)象創(chuàng)建/方法調(diào)用/屬性訪問(wèn)、控制結(jié)點(diǎn)以及變量聲明;抽象的API使用語(yǔ)句結(jié)點(diǎn)將代碼中的API使用語(yǔ)句抽象為完整的方法簽名;變量聲明/賦值語(yǔ)句結(jié)點(diǎn)將代碼中的變量聲明/賦值語(yǔ)句抽象為忽略變量名以及賦值常量的表示;控制結(jié)構(gòu)結(jié)點(diǎn)用If、ElseIf、Else、While、DoWhile、For、Foreach、Try、Catch、Finally、Switch、Case、Default分別表示相應(yīng)的控制結(jié)構(gòu);API使用語(yǔ)句結(jié)點(diǎn)和變量聲明/賦值語(yǔ)句結(jié)點(diǎn)最多只有一個(gè)子結(jié)點(diǎn);這個(gè)子結(jié)點(diǎn)是其父節(jié)點(diǎn)所表示的API使用語(yǔ)句或變量聲明/賦值語(yǔ)句的下一條語(yǔ)句的抽象表示,因此這兩個(gè)結(jié)點(diǎn)的父子關(guān)系表示順序流關(guān)系;控制結(jié)構(gòu)結(jié)點(diǎn)有多個(gè)子結(jié)點(diǎn)分別表示其不同的控制流中的代碼;在條件部分解析結(jié)束時(shí),加入一個(gè)特殊結(jié)點(diǎn)ConditionEnd結(jié)點(diǎn)來(lái)表示條件部分的結(jié)束;當(dāng)整個(gè)控制結(jié)構(gòu)解析結(jié)束時(shí),加入一個(gè)特殊結(jié)點(diǎn)ControlEnd結(jié)點(diǎn)來(lái)表示整個(gè)控制結(jié)構(gòu)的結(jié)束;給定一段代碼,從代碼的第一行開始進(jìn)行解析,迭代地得到代碼的抽象樹結(jié)構(gòu)表示。...

    【技術(shù)特征摘要】
    1.基于Tree-LSTM的API使用代碼生成式推薦方法,其特征在于,通過(guò)對(duì)大量包含目標(biāo)API的源代碼進(jìn)行解析來(lái)構(gòu)造大量的訓(xùn)練樣本,在此基礎(chǔ)上使用深度學(xué)習(xí)和統(tǒng)計(jì)模型訓(xùn)練API使用代碼預(yù)測(cè)模型;所述代碼預(yù)測(cè)模型為兩部分:基于抽象代碼樹結(jié)構(gòu)表示和深度學(xué)習(xí)的語(yǔ)句預(yù)測(cè)、基于數(shù)據(jù)依賴分析和統(tǒng)計(jì)模型的API調(diào)用參數(shù)預(yù)測(cè);其中,設(shè)計(jì)了一種適合于Tree-LSTM模型處理的代碼的抽象樹結(jié)構(gòu)表示,其中的結(jié)點(diǎn)表示抽象的API使用語(yǔ)句或變量聲明/賦值語(yǔ)句或控制結(jié)構(gòu),邊表示它們之間的控制流關(guān)系;這種表示對(duì)代碼中的變量和常量進(jìn)行了抽象,僅保留了API對(duì)象創(chuàng)建/方法調(diào)用/屬性訪問(wèn)、控制結(jié)點(diǎn)以及變量聲明;抽象的API使用語(yǔ)句結(jié)點(diǎn)將代碼中的API使用語(yǔ)句抽象為完整的方法簽名;變量聲明/賦值語(yǔ)句結(jié)點(diǎn)將代碼中的變量聲明/賦值語(yǔ)句抽象為忽略變量名以及賦值常量的表示;控制結(jié)構(gòu)結(jié)點(diǎn)用If、ElseIf、Else、While、DoWhile、For、Foreach、Try、Catch、Finally、Switch、Case、Default分別表示相應(yīng)的控制結(jié)構(gòu);API使用語(yǔ)句結(jié)點(diǎn)和變量聲明/賦值語(yǔ)句結(jié)點(diǎn)最多只有一個(gè)子結(jié)點(diǎn);這個(gè)子結(jié)點(diǎn)是其父節(jié)點(diǎn)所表示的API使用語(yǔ)句或變量聲明/賦值語(yǔ)句的下一條語(yǔ)句的抽象表示,因此這兩個(gè)結(jié)點(diǎn)的父子關(guān)系表示順序流關(guān)系;控制結(jié)構(gòu)結(jié)點(diǎn)有多個(gè)子結(jié)點(diǎn)分別表示其不同的控制流中的代碼;在條件部分解析結(jié)束時(shí),加入一個(gè)特殊結(jié)點(diǎn)ConditionEnd結(jié)點(diǎn)來(lái)表示條件部分的結(jié)束;當(dāng)整個(gè)控制結(jié)構(gòu)解析結(jié)束時(shí),加入一個(gè)特殊結(jié)點(diǎn)ControlEnd結(jié)點(diǎn)來(lái)表示整個(gè)控制結(jié)構(gòu)的結(jié)束;給定一段代碼,從代碼的第一行開始進(jìn)行解析,迭代地得到代碼的抽象樹結(jié)構(gòu)表示。2.如權(quán)利要求1所述的基于Tree-LSTM的API使用代碼生成式推薦方法,其特征在于,具體步驟如下:(一)語(yǔ)句模型訓(xùn)練,包括以下子步驟:(1)以訓(xùn)練數(shù)據(jù)源代碼中的方法為單位進(jìn)行代碼靜態(tài)分析,得到對(duì)應(yīng)的抽象樹結(jié)構(gòu)表示;(2)對(duì)每一個(gè)方法的抽象樹結(jié)構(gòu)表示,迭代式地從其根結(jié)點(diǎn)開始遍歷,移除當(dāng)前遍歷到的結(jié)點(diǎn)后的N個(gè)結(jié)點(diǎn),N表示待完成代碼的規(guī)模;并用一個(gè)表示待完成代碼即窟窿的Hole結(jié)點(diǎn)取代被移除掉的N個(gè)結(jié)點(diǎn),從而得到帶有窟窿的代碼...

    【專利技術(shù)屬性】
    技術(shù)研發(fā)人員:彭鑫,陳馳趙文耘,
    申請(qǐng)(專利權(quán))人:復(fù)旦大學(xué),
    類型:發(fā)明
    國(guó)別省市:上海,31

    網(wǎng)友詢問(wèn)留言 已有0條評(píng)論
    • 還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。

    1
    主站蜘蛛池模板: yy111111少妇影院里无码| 性色av无码不卡中文字幕| 东京热加勒比无码少妇| 国精无码欧精品亚洲一区| 无码人妻久久久一区二区三区| 亚洲中文字幕久久精品无码A| 日韩少妇无码喷潮系列一二三| 中文字幕精品无码一区二区三区 | 亚洲AV永久无码精品网站在线观看| 精品无码综合一区二区三区| 成人无码A区在线观看视频| 亚洲AV无码男人的天堂| 人妻系列无码专区无码中出| 亚洲熟妇少妇任你躁在线观看无码| 精品国精品无码自拍自在线| 中文字幕久无码免费久久 | 色欲aⅴ亚洲情无码AV蜜桃| 最新国产AV无码专区亚洲| 国产精品无码一区二区三区免费| 无码av免费一区二区三区| 免费无码又爽又刺激网站直播| 久久中文字幕无码一区二区| 久久精品无码专区免费东京热| 国产真人无码作爱免费视频| 日韩人妻无码免费视频一区二区三区| 亚洲AV永久无码精品成人| 中国少妇无码专区| 在线精品自拍无码| 国产午夜精华无码网站| 亚洲?V无码成人精品区日韩| 高清无码一区二区在线观看吞精| 久久精品国产亚洲AV无码麻豆| 亚洲AV日韩AV永久无码绿巨人| 亚洲AV无码成人精品区大在线| 国产精品无码AV不卡| 亚洲AV无码XXX麻豆艾秋| 免费看无码自慰一区二区| 亚洲?V无码成人精品区日韩| 精品国产毛片一区二区无码 | 久久精品无码一区二区三区不卡| 无码国产精品一区二区免费3p|