国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于功能的程序表示研究

2018-04-24 07:58陳功
現(xiàn)代計(jì)算機(jī) 2018年8期
關(guān)鍵詞:三元組后置編碼器

陳功

(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)

0 引言

隨著軟件技術(shù)的迅速發(fā)展,軟件倉(cāng)庫(kù)的規(guī)模變得越來(lái)越龐大,軟件倉(cāng)庫(kù)中大量的軟件工件為軟件開(kāi)發(fā)人員從中挖掘出有用的信息,并應(yīng)用于軟件工程活動(dòng)提供了可能。軟件倉(cāng)庫(kù)中的源程序就是軟件工程的重要研究對(duì)象之一。為了有效地挖掘出程序中隱含的信息,關(guān)鍵在于找到一種合適的程序的中間表示方法。

為了解決軟件工程中的實(shí)際問(wèn)題,國(guó)內(nèi)外研究者們對(duì)于程序的表示方法也進(jìn)行了許多嘗試。2006年Koschke[1]在研究中使用基于抽象語(yǔ)法樹(shù)的方法來(lái)進(jìn)行代碼克隆檢測(cè)。2013年Wu[2]等人采用基于程序依賴圖的方法來(lái)分析程序中的克隆。2015年White[3]等人將循環(huán)神經(jīng)網(wǎng)絡(luò)應(yīng)用于程序語(yǔ)言中,獲取token的詞向量表示,并應(yīng)用于代碼推薦系統(tǒng)中。

深度學(xué)習(xí)[4]作為當(dāng)前的研究熱點(diǎn)之一,在自然語(yǔ)言處理、語(yǔ)音識(shí)別以及圖像處理等領(lǐng)域都取得了突破性的進(jìn)展。近年來(lái),軟件工程領(lǐng)域的研究者們也開(kāi)始嘗試將深度學(xué)習(xí)應(yīng)用于軟件工件中[5-6]。本文利用深度學(xué)習(xí)自動(dòng)提取特征的特點(diǎn),提出了一種基于功能的程序表示方法,得到可以反映程序特征的矩陣表示。

1 算法思想

我們的核心問(wèn)題是將程序在一個(gè)固定維度的實(shí)數(shù)值空間表示出來(lái),進(jìn)而才可以將其作為典型的有監(jiān)督學(xué)習(xí)算法的輸入。盡管程序可能包含了很多特征,如代碼風(fēng)格、時(shí)空間復(fù)雜度等,在這里我們將首要關(guān)注程序最基本的方面——功能。給定一個(gè)程序A,以及它的前置條件P,我們希望能夠通過(guò)學(xué)習(xí)A的特征從而預(yù)測(cè)當(dāng)P成立時(shí),運(yùn)行A得到的結(jié)果,即程序A的后置條件Q。一般地,我們將P和Q表示成一個(gè)實(shí)值向量,該向量包含了程序在某個(gè)特定時(shí)刻的狀態(tài)(即程序中變量的值),這里的(P,A,Q)被稱為霍爾三元組。我們提出以霍爾三元組集合作為深度網(wǎng)絡(luò)的輸入來(lái)學(xué)習(xí)程序的特征,采用的主要方法是同時(shí)找到程序的狀態(tài)和程序在特征空間的對(duì)應(yīng)的點(diǎn),在這個(gè)空間上,程序可以視作是程序的前置條件到后置條件的一個(gè)線性映射。

更具體地說(shuō),給定一個(gè)三元組(P,A,Q),如果fP和fQ分別是前置條件P和后置條件Q的m維的特征表示,那么它們的關(guān)系可以通過(guò)等式1聯(lián)系起來(lái):

于是,我們得到了一個(gè)m維的矩陣MA作為程序A的特征表示,我們希望通過(guò)學(xué)習(xí)得到的P,Q到特征空間f的映射以及fP到fQ的線性映射MA具備較好的泛化能力,即對(duì)于給定的程序A以及前置條件P,可以預(yù)測(cè)其后置條件Q。

2 網(wǎng)絡(luò)結(jié)構(gòu)

本文方法的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。

圖1

我們的網(wǎng)絡(luò)總體上可以分為四層,輸入層、輸出層以及兩個(gè)隱含層,輸入層到第一個(gè)隱含層對(duì)應(yīng)圖中的編碼器(Encoder),第二個(gè)隱含層到輸出層對(duì)應(yīng)圖中的解碼器(Decoder),分別完成了程序的前置條件P和后置條件Q到特征空間f的映射,隱含層之間的權(quán)重系數(shù)就是程序特征的矩陣表示。對(duì)于給定的程序A,我們多次記錄程序中變量的值以及運(yùn)行之后的值,得到大量的三元組(P,A,Q),以此作為數(shù)據(jù)集來(lái)訓(xùn)練我們的模型。

3 模型訓(xùn)練

假設(shè)提取到的程序的前置條件P和后置條件Q均是d維的向量,利用自編碼器思想,我們建立一個(gè)從前置條件P到m維的特征表示fP的非線性映射,這種映射被稱為編碼器。如傳統(tǒng)的自編碼網(wǎng)絡(luò)一樣,我們使用如下的非線性特征映射:

式中的We∈Rm×d,be∈Rm,Φ是一種非線性函數(shù)。之后,同傳統(tǒng)的自編碼器做法一樣,我們可利用fP重構(gòu)出原始的輸入P:

式中的Wd∈Rd×m,bd∈Rd,ψ是一種非線性函數(shù)。到這一步,我們可以利用等式(1)得到后置條件Q在特征空間的表示fQ,進(jìn)而重構(gòu)出由模型得到的后置條件Q:

為了訓(xùn)練模型中的參數(shù),我們建立這樣一個(gè)損失函數(shù)L()

θ:

該損失函數(shù)由三個(gè)部分組成,其中l(wèi)pred表示了在給定前置條件的情況,我們預(yù)測(cè)出程序的后置條件的準(zhǔn)確程度,lauto反映了我們的自編碼器將輸入P編碼再解碼后重構(gòu)得到的P?與原始輸入P之間的誤差,R是正則項(xiàng),λ是正則化參數(shù)。我們的訓(xùn)練目標(biāo)就是使得取得最小值。

4 結(jié)語(yǔ)

本文介紹了一種基于功能的程序的表示方法。該方法從程序的功能出發(fā),通過(guò)收集運(yùn)行程序得到的霍爾三元組(P,A,Q)作為深度網(wǎng)絡(luò)的輸入,經(jīng)過(guò)訓(xùn)練同時(shí)得到程序的前置條件和后置條件在新特征空間的表示,使得程序的執(zhí)行可以視作一個(gè)線性的映射過(guò)程。同時(shí)我們還獲得了程序的矩陣表示,該矩陣可以應(yīng)用于很多的軟件工程任務(wù)中,如代碼克隆檢測(cè)、代碼自動(dòng)評(píng)分、測(cè)試用例自動(dòng)生成等。該方法同其他方法相比最大的優(yōu)勢(shì)在于利用深度網(wǎng)絡(luò)自動(dòng)提取程序的特征。在下一步的研究工作中,我們將從實(shí)際的軟件工程任務(wù)出發(fā),來(lái)驗(yàn)證該方法的有效性。

參考文獻(xiàn):

[1]Koschke R,Falke R,Frenzel P.Clone Detection Using Abstract Syntax Suffix Trees[C].Reverse Engineering,2006.Wcre'06.Working Conference on.IEEE,2006:253-262.

[2]吳軍華,王佳利.基于依賴圖的程序克隆分析及近似解求解方法[J].南京工業(yè)大學(xué)學(xué)報(bào)(自科版),2013,35(5):52-56.

[3]White M,Vendome C,Linares M,Poshyvanyk D.Toward Deep Learning Software Repositories.MSR'15.

[4]Bengio Y,Courville A,Vincent P.Unsupervised Feature Learning and Deep Learning:A Review and New Perspectives[J],2012.

[5]Hindle A,Barr E T,Su Z,et al.On the Naturalness of Software[J].Communications of the Acm,2016,59(5):122-131.

[6]Allamanis M,Sutton C.Mining Source Code Repositories at Massive Scale Using Language Modeling[J],2013:207-216.

猜你喜歡
三元組后置編碼器
融合CNN和Transformer編碼器的變聲語(yǔ)音鑒別與還原
TransP:一種基于WordNet中PartOf關(guān)系的知識(shí)圖譜嵌入方法
設(shè)定多圈絕對(duì)值編碼器當(dāng)前圈數(shù)的方法
從隨形走向賦意——以《人物拼貼》為例的主題后置式兒童美術(shù)教學(xué)策略
氣氛及后置催化劑對(duì)平朔煙煤熱解特性的影響
基于卷積神經(jīng)網(wǎng)絡(luò)的知識(shí)圖譜補(bǔ)全方法研究
轉(zhuǎn)爐系統(tǒng)常用編碼器選型及調(diào)試
K-VQA:一種知識(shí)圖譜輔助下的視覺(jué)問(wèn)答方法
舞臺(tái)機(jī)械技術(shù)與設(shè)備系列談(二)
——編碼器
基于多特征語(yǔ)義匹配的知識(shí)庫(kù)問(wèn)答系統(tǒng)
旌德县| 东兰县| 合阳县| 迭部县| 定远县| 思南县| 巴彦淖尔市| 华宁县| 平定县| 城步| 铁岭市| 乳山市| 思茅市| 从江县| 工布江达县| 兰西县| 尚志市| 静海县| 阿克陶县| 五原县| 北川| 宁明县| 高密市| 精河县| 博爱县| 哈巴河县| 邵东县| 常山县| 兴海县| 安丘市| 扶风县| 无锡市| 长葛市| 桑植县| 马龙县| 万州区| 英德市| 上蔡县| 宁城县| 施秉县| 乐业县|