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

        ?

        基于深度學(xué)習(xí)模型的軟件源代碼歸屬研究①

        2022-08-24 09:33:42
        關(guān)鍵詞:深度特征

        任 群

        (亳州學(xué)院電子與信息工程系,安徽 亳州 236800)

        0 引 言

        自然語言文本的作者身份識別是一個眾所周知的問題,已在文獻(xiàn)中進(jìn)行了廣泛研究[1-2]。但是,只有很少的作品專門用于結(jié)構(gòu)化代碼中的作者身份識別,例如計算機(jī)程序的源代碼[3]。源代碼作者身份識別是通過基于程序員獨特的樣式特征將程序員與給定代碼相關(guān)聯(lián)的代碼作者身份識別過程。然而,問題在于自然語言文本的作者身份識別是困難且不同的。這種根本的困難主要是由于編譯器的語法規(guī)則所建立的書面代碼表達(dá)式固有的不可讀性。

        代碼作者身份識別依賴于根據(jù)程序員在結(jié)構(gòu)化代碼和命名變量中的偏好從程序員生成的源代碼中提取功能。鑒于這些功能,代碼作者身份識別的主要目的是根據(jù)提取的功能將程序員正確地分配給源代碼。能夠識別代碼作者既是風(fēng)險也是理想的功能。一方面,代碼作者身份的標(biāo)識給希望保持匿名的程序員帶來了隱私風(fēng)險,其中包括開放源代碼項目的參與者,活動家以及在一邊進(jìn)行編程活動的程序員。因此,這又使代碼作者的身份識別成為匿名問題。另一方面,代碼作者身份的識別對于軟件取證和安全分析人員非常有用,特別是對于識別惡意代碼(例如,惡意軟件)程序員而言;例如,此類程序員可能會將源代碼留在受損的系統(tǒng)中進(jìn)行編譯,或者可能從反編譯的二進(jìn)制文件中提取程序員的功能。此外,源代碼的作者身份識別有助于作者身份糾紛、版權(quán)侵權(quán)、和代碼完整性調(diào)查。針對軟件源代碼歸屬問題,設(shè)計了一種基于深度學(xué)習(xí)的程序依賴關(guān)系圖方法,目的是確定不同類型的源代碼的真正作者。該方法可以用于任何編程語言且不遵循任何編程結(jié)構(gòu)的方式設(shè)計特征提取。

        1 軟件源代碼識別分類方法

        1.1 程序依賴關(guān)系圖

        程序依賴關(guān)系圖是源代碼的圖表示:編程表達(dá)式、變量、條件和方法調(diào)用可以用頂點表示,邊表示圖中頂點之間的程序和控件依賴性。程序依賴關(guān)系圖G=(V,E,μ,δ)是一個四元組,其中,V是頂點集合,E是邊集合,μ是定義頂點的類型函數(shù),δ是定義邊依賴類型的函數(shù)。

        如果存在影響程序執(zhí)行的變量var,則可以在v1和v2之間生成表示數(shù)據(jù)依賴的邊。v1可以使用指針直接或間接傳遞給var,而v2可以使用指針執(zhí)行var給定的值。因此,通過更改var值可以影響源代碼的執(zhí)行。

        此外,控制依賴性顯示了源代碼的內(nèi)部邏輯流。如果存在一個真值條件從v2控制執(zhí)行v1,則可以生成從v1到v2的控制依賴邊。

        首先,從不同的程序代碼中提取程序依賴關(guān)系圖(數(shù)據(jù)和控制)特征。這些高質(zhì)量的特征捕捉了數(shù)據(jù)變化和控制流功能,能表示不同語句之間的數(shù)據(jù)流動方式以及控件信息在不同語句之間的傳遞方式。這些重要特征可能會揭示不同程序代碼的隱藏模式。

        1.2 預(yù)處理和特征權(quán)重

        接下來,使用了預(yù)處理技術(shù)將程序依賴關(guān)系圖特征轉(zhuǎn)換為沒有噪聲的小型實例。該過程將程序依賴關(guān)系圖分解為詞例,然后計算每個詞例的頻率。預(yù)處理步驟的第一步是數(shù)據(jù)清洗。數(shù)據(jù)清洗是指刪除不需要的數(shù)據(jù),例如特殊符號、數(shù)字、停用詞和標(biāo)點符號。在源代碼特征分類中不需要此類噪音信息。然后,使用轉(zhuǎn)換過程將源代碼分解為有用的特征。詞干提取、停用詞和頻率參數(shù)用于在轉(zhuǎn)換階段提取有價值的特征。詞干提取用于將一組單詞還原為其詞根形式,頻率參數(shù)信息指示不同源代碼中每個元素的出現(xiàn)次數(shù)[4]。

        為了獲得更高的分類精度,需要將程序依賴關(guān)系圖實例轉(zhuǎn)換為加權(quán)特征。加權(quán)特征用于調(diào)整單個文檔以及多個文檔中每個特征的重要性。采用局部和全局加權(quán)技術(shù)來獲得每個特征的權(quán)重。例如,假設(shè)比較三個分別用C++,Java和C#語言編寫的源代碼文檔,其中局部權(quán)重提取自一個文檔中的每個特征的重要性,而全局權(quán)重可以捕獲所有文檔中每個特征的重要性。這些特征有助于對每種編程風(fēng)格的每個特征進(jìn)行評分和排名。該過程為分類器提供了有用的信息,即哪些特征對于準(zhǔn)確的預(yù)測更有價值。將TFIDF加權(quán)技術(shù)用于全局權(quán)重,將Log TF技術(shù)用于局部權(quán)重[5]。詞頻是每個詞例的出現(xiàn)次數(shù),其計算方式如式(1)所示:

        式(1)其中f(t,d)表示詞頻,d表示文檔。而反向文檔頻率的計算方式如式(2)所示:

        式(2)其中D表示包含詞t的文檔數(shù)量,N表示文檔的總數(shù)量。TFIDF的定義如式(3)所示:

        1.3 合成少數(shù)類過采樣技術(shù)

        對于類不平衡問題來說,與欠采樣相比,過采樣可以提供更好的準(zhǔn)確性。合成少數(shù)類過采樣技術(shù)(SMOTE)技術(shù)可以更好地解決類不平衡問題,該技術(shù)基于與原始少數(shù)類樣本的相似性來合成新的少數(shù)類樣本。

        首先,SMOTE使用歐幾里得距離計算每個少數(shù)類x i的k最近鄰值。然后,在x i的一組近鄰中隨機(jī)選擇一個最近鄰x j。接下來,如公式(4)所示:

        在訓(xùn)練特征時會遇到類不平衡的問題,這是由于數(shù)據(jù)集由不同數(shù)量的C++,Java和C#源代碼構(gòu)成。而且每個程序員所寫的源代碼可以具有不同行數(shù)的代碼。當(dāng)某一類別的樣本數(shù)遠(yuǎn)多于另一個類別時,應(yīng)用深度學(xué)習(xí)算法會造成效率低下,從而影響分類精度。使用SMOTE方法對少數(shù)類進(jìn)行過采樣,以解決類不平衡的問題。

        1.4 深度學(xué)習(xí)模型

        Tensor Flow是一個開源的深度學(xué)習(xí)框架,對于深度學(xué)習(xí)編程任務(wù)的各種應(yīng)用而言非常重要。用戶可以使用Tensor Flow庫配置不同的深度神經(jīng)網(wǎng)絡(luò),跟蹤并共享每個操作的狀態(tài)(帶有突變詳細(xì)信息)。隊列功能用于異步計算相應(yīng)的張量。隊列功能的功能就像多線程處理一樣。它可以并行運行這些操作以加快操作。設(shè)計了深入的程序依賴關(guān)系圖DL方法,以識別每種類型的源代碼的相應(yīng)作者??梢允褂酶呒塊eras API訓(xùn)練深度學(xué)習(xí)模型。易于配置以擴(kuò)展不同的模塊并快速建立原型。具有局部和全局加權(quán)值的標(biāo)準(zhǔn)化數(shù)據(jù)集被輸入到深度學(xué)習(xí)算法。Tensor Flow對標(biāo)準(zhǔn)化數(shù)據(jù)進(jìn)行預(yù)處理以排隊進(jìn)入訓(xùn)練階段,如圖1所示。

        圖1 Tensor Flow訓(xùn)練流程

        配置了七個層來分別使用100,80,80,60,60,40個神經(jīng)元來訓(xùn)練特征。第一層是輸入層,然后中間五層是隱藏層,最后是輸出層。ReLu(線性整流)激活函數(shù)用于輸入層和隱藏層,softmax函數(shù)用于目標(biāo)變量。Dropout層用于調(diào)整深度學(xué)習(xí)算法,以消除過擬合的問題。在第一層神經(jīng)元有750個參數(shù),在第2層有15100個參數(shù),在第3層有50100個參數(shù),在第4層有5049個參數(shù)。為了獲得更高的準(zhǔn)確性,深度學(xué)習(xí)算法通過微調(diào)配置進(jìn)行了優(yōu)化。softmax激活函數(shù)也稱為歸一化指數(shù)函數(shù),該函數(shù)在輸出層中用于處理多類問題。它采用K個實數(shù)的向量,然后轉(zhuǎn)換為K個概率的歸一化概率分布。Softmax能夠?qū)個實數(shù)轉(zhuǎn)換為K個范圍在[0,1]內(nèi)的數(shù)字,它通常用于多類神經(jīng)網(wǎng)絡(luò)中,以將非標(biāo)準(zhǔn)化輸出轉(zhuǎn)換為預(yù)測類的概率分布。標(biāo)準(zhǔn)softmax函數(shù)σ定義如公式(5):

        對輸入向量為z的實例z i應(yīng)用標(biāo)準(zhǔn)指數(shù)方法,通過除以所有這些指數(shù)的總和來歸一化輸出值。訓(xùn)練過程的主要目標(biāo)是充分了解數(shù)據(jù)集結(jié)構(gòu),以便對看不見的數(shù)據(jù)進(jìn)行準(zhǔn)確的預(yù)測。ReLu激活函數(shù)用于輸出變量,以便更好地理解和使用深度神經(jīng)網(wǎng)絡(luò),其定義如公式(6):

        式(6)中x代表相應(yīng)神經(jīng)元的輸入,這也稱為漸變函數(shù),其圖形的行為類似于基于一元實數(shù)的漸變?,F(xiàn)在它是深度神經(jīng)網(wǎng)絡(luò)最流行的激活函數(shù)。熵函數(shù)用于識別每個瞬間的損失,以積累深度學(xué)習(xí)功能。它以張量為輸入,并以類似的輪廓標(biāo)記張量為輸出。

        訓(xùn)練是深度學(xué)習(xí)算法的下一階段,其中模型逐漸優(yōu)化并學(xué)習(xí)給定的數(shù)據(jù)集。訓(xùn)練的主要目標(biāo)是要學(xué)習(xí)足夠的數(shù)據(jù)集結(jié)構(gòu)。它使模型能夠為看不見的語料庫做出準(zhǔn)確的預(yù)測。Adam優(yōu)化器也被認(rèn)為是隨機(jī)下降梯度,可用于編譯和優(yōu)化深度學(xué)習(xí)模型。它采用迭代技術(shù)來更新網(wǎng)絡(luò)權(quán)重。它為深度學(xué)習(xí)網(wǎng)絡(luò)中的每個約束計算出不同的自適應(yīng)學(xué)習(xí)率,如公式(7)-(10):

        損失和準(zhǔn)確性函數(shù)用于預(yù)測類別概率。分類損失函數(shù)的定義如公式(11):

        式(11)其中M是預(yù)測類別的數(shù)量,c是觀察o的正確分類,p是在觀察c中的觀察o的預(yù)測概率。所提出的算法如算法1所示。

        算法1基于深度學(xué)習(xí)的源代碼歸屬分類算法1.for each a in folder do 2.for each q in a do 3. G=getPDG();4. end for 5.end for 6.for each g in G do 7. t=get Freq(q);8. tlocalw=get Local Weight();9. tGlobalw=getGlobalWeight();10. for each i in t do 11. w=tlocalw[i]+t Globalw[i];12. tw.add(t[i],w)l 13. end for 14. q.add(tw);15. dataset(q,a);16.end for 17.traindataset,testdataset=randomSplit(dataset,80,20);18.traindataset=SMOTE(traindataset);19.model=model_type=Sequential;20.layer_type=Dense,Dropout;21.activation_function=relu;22.epoches=20000 23.optimizer=adam 24.authorship_attribution(traindataset,testdataset)

        2 實驗評估

        實驗所采用的數(shù)據(jù)集是從GCJ收集的,該數(shù)據(jù)集包含了屬于1000個程序員的三種不同編程語言(即C++,Java和C#)的源代碼,數(shù)據(jù)集中三種編程語言的分布情況如圖2所示,其中C++占53.96%,Java占32.37%,C#占13.67%。

        圖2 數(shù)據(jù)集中編程語言的分布情況

        從數(shù)據(jù)集中提取得到程序依賴關(guān)系圖,部分程序依賴關(guān)系圖如圖3所示。

        圖3 數(shù)據(jù)集中的程序依賴關(guān)系圖示例

        由于數(shù)據(jù)集中存在嚴(yán)重的類不平衡,因此使用SMOTE技術(shù)來解決此問題。表1和2分別展示了使用SMOTE技術(shù)前和后的混淆矩陣。

        表1 沒用應(yīng)用SMOTE技術(shù)的混淆矩陣

        表2 應(yīng)用SMOTE技術(shù)后的混淆矩陣

        實驗使用的評估指標(biāo)有精度、召回率、F度量,其計算方式如式(12)所示:

        其中,TP,FP,TN分別是指被正確分類的正例、被錯誤分類的正例和被正確分類的反例的數(shù)量。實驗結(jié)果如表3所示。由表3的結(jié)果可知,就這些指標(biāo)而言,提出的方法均優(yōu)于其他算法。

        表3 實驗結(jié)果對比

        3 結(jié) 語

        結(jié)合軟件程序依賴關(guān)系圖和和深度學(xué)習(xí)模型來以捕獲編碼樣式以識別程序員,以預(yù)測不同類型的源代碼的作者。將所提出的方法與其他現(xiàn)有方法進(jìn)行了比較,考察分類精度、召回率和F度量三方面的性能。實驗結(jié)果表明,所提出的方法在識別源代碼的真正作者方面要優(yōu)于其他方法。所提出的方法可以自動識別源代碼的作者,并進(jìn)行代碼抄襲的檢測。

        猜你喜歡
        深度特征
        抓住特征巧觀察
        深度理解一元一次方程
        新型冠狀病毒及其流行病學(xué)特征認(rèn)識
        如何表達(dá)“特征”
        不忠誠的四個特征
        深度觀察
        深度觀察
        深度觀察
        深度觀察
        抓住特征巧觀察
        亚洲狠狠久久五月婷婷| 欧美破处在线观看| 调教在线播放黄| 亚洲国产成人AⅤ片在线观看| 亚州AV成人无码久久精品| 网友自拍人妻一区二区三区三州 | 亚洲免费人成网站在线观看| 色佬易精品视频免费在线观看| 开心五月激情五月天天五月五月天| 国产在线观看视频一区二区三区 | 亚洲av成人av三上悠亚| 久久久国产精品无码免费专区| 天天做天天爱夜夜爽女人爽| 妺妺窝人体色www聚色窝仙踪| 无码av天堂一区二区三区| 国产亚洲一区二区手机在线观看| 青青草国产成人99久久| 精品国产免费Av无码久久久| 亚洲国产精品综合久久20| 在线观看人成网站深夜免费| 亚洲一区二区三区在线高清中文| 中文无码人妻有码人妻中文字幕| 免费成人在线电影| 亚洲中文字幕无码久久| 狠狠色狠狠色综合网老熟女| 日本午夜理伦三级好看| 少妇熟女天堂网av天堂| 福利视频一区二区三区| 国产精品久久久亚洲| 亚洲精品久久久久中文字幕一福利| a在线免费| 日本丰满少妇高潮呻吟| 午夜国产精品一区二区三区| 国产在线91精品观看| 48久久国产精品性色aⅴ人妻| av鲁丝一区鲁丝二区| 色噜噜狠狠色综合欧洲| 国产免费操美女逼视频| 国产一级内射视频在线观看| 99久久精品免费观看国产| 国产欧美日韩一区二区三区在线|