新四季網

一種基於神經網絡語言模型的代碼分類方法與流程

2023-05-07 07:50:06 1


本發明涉及一種代碼分類的方法,特別是一種基於神經網絡語言模型的代碼分類方法,可以對代碼按照功能進行分類。



背景技術:

hindle等人利用統計學的方法將程式語言與自然語言進行了比較,發現它們有非常相似的統計學特性。這些特性對於人類來說非常難以捕捉,但是他們證明了可以將基於學習的方法應用在代碼分析領域。基於機器學習的代碼分析方法已經被研究了很長一段時間,在解決代碼錯誤檢測、代碼重複性分析等問題時,依賴了大量的人工特徵。對於一個具體的問題,這些特徵需要大量的有標籤的數據。而且該方法對於數據的表示是一種onehot的表示,即使用n維向量來對字典中的n個詞進行編碼。這樣,在數據量增大的情況下會帶來維度災難的問題。經過研究表明,人工特徵的效果可能要比自動學習的特徵的效果還要差。例如在自然語言處理(naturallanguageprocessing,nlp)中,自動學習到的詞的分類要比著名的詞典wordnet還要準確。



技術實現要素:

基於以上技術問題,本發明提供了一種基於神經網絡語言模型的代碼分類方法,旨在解決代碼分類時因符號表示方法造成維度災難的技術問題。

本發明採用的技術方案如下:

一種基於神經網絡語言模型的代碼分類方法,包括以下步驟:

步驟1:將代碼轉換為ast樹;

步驟2:初始化ast樹結點ci的向量vec(ci),所述結點ci中非葉子結點pk的向量為vec(pk)1,所述非葉子結點pk的孩子結點tx的向量為vec(tx),其中vec(pk)1∈vec(ci),vec(tx)∈vec(ci),其中i表示結點的序號,k表示非葉子節點的序號,x表示孩子結點的序號;

步驟3:利用所述孩子結點tx的向量vec(tx),得到所述非葉子結點pk的重構向量vec(pk)2;

步驟4:利用ast_node2vec模型對所述結點向量vec(ci)進行學習,若不滿足循環條件,更新結點向量vec(ci),跳轉到步驟3;若滿足循環條件,則輸出更新了結點向量vec(ci)的ast樹和更新後的非葉子結點pk的重構向量vec(pk)2;

步驟5:將更新了結點向量vec(ci)的ast樹和更新後的非葉子結點pk的重構向量vec(pk)2作為基於樹的卷積神經網絡的輸入,利用基於樹的卷積神經網絡完成對代碼的分類。

進一步的,所述步驟2中,ast樹的結點向量vec(ci)的初始化的方法為給所述ast樹中的結點分別分配一個隨機值向量。

進一步的,所述步驟3中,非葉子結點pk的重構向量vec(pk)2的計算步驟如下:

其中,n表示結點的個數,b表示大小為的偏置項;lx表示孩子結點的權重,a代表孩子結點下的葉子數,e代表非葉子結點pk下的葉子數;wx表示孩子結點與非葉子結點pk間的連接矩陣且nf表示向量的維度,wl、wr為參數矩陣。

進一步的,利用ast_node2vec模型對所述結點向量vec(ci)進行學習的步驟如下:

s401:計算非葉子結點pk的向量vec(pk)1和重構向量vec(pk)2之間的差異值,計算公式如下為:

s402:對ast樹中的結點進行負採樣,得到y個訓練樣例和y個由訓練樣例產生的負樣例,訓練樣例與負樣例的損失函數的計算公式如下:

其中,d(y)表示第y個訓練樣例的差異值,表示第y個負樣例的差異值,δ表示設定的訓練樣例與負樣例之間間距的最小值;

s403:對ast_node2vec模型的參數進行正則化,得到的目標函數公式如下:

其中,m表示矩陣wl和wr中元素的個數且λ表示為了平衡編碼誤差和正則化項的超參數;

s404:對所述目標函數使用隨機梯度下降算法,使模型的參數得到調整,其中參數的更新公式如下:

其中,vec(ci)j表示結點向量vec(ci)中的元素,表示矩陣wr中的元素,表示矩陣wl中的元素,j表示維度。

進一步的,利用所述基於樹的卷積神經網絡完成對代碼的分類的具體步驟如下:

s501:將非將更新了結點向量vec(ci)的ast樹和更新後的非葉子結點pk的重構向量vec(pk)2作為基於樹的卷積神經網絡中編碼層的輸入,利用所述非葉子結點pk的向量vec(pk)1和重構向量vec(pk)2計算非葉子結點pk的線性組合向量vec(pk),計算公式如下:

vec(ek)=wcomb1·vec(pk)1+wcomb2·vec(pk)2(10),

其中,wcomb1表示非葉子結點pk的向量vec(pk)1的權重,wcomb2表示重構向量vec(pk)2的權重;

s502:將所述非葉子結點pk的向量vec(pk)1替換為所述線性組合向量vec(pk),其餘葉子結點的向量不變,得到更新後的ast樹;

s503:利用卷積層對更新後的ast樹進行處理,即使特徵探測器在ast樹進行滑動,得到特徵探測器輸出h,計算公式如下:

其中,和均表示參數矩陣,表示的係數,表示的係數,表示的係數;depthi表示結點ci在窗口中的深度,depth表示窗口的深度;pti表示結點ci在所有兄弟結點中的位置,u表示結點ci的兄弟結點的個數;

s504:將卷積層輸出的ast樹輸入到池化層進行處理;

s505:將池化層處理後的ast樹輸入到隱藏層進行處理;

s506:將隱藏層處理後的結果輸入到輸出層中,輸出分類的結果。

綜上所述,由於採用了上述技術方案,本發明的有益效果是:

基於神經網絡語言模型,可利用分布式的表示方法表示ast樹中結點的符號,能夠有效的避免維度災難的問題,特別是在處理大規模數據問題時;利用該分類方法能顯示出語義上的相似性,充分利用了程式語言中豐富的結構化信息;利用抽象語法樹來表示代碼,不依賴於源語言的語法,對於所有程式語言來說具有通用性;利用無監督學習方式學習到結點的向量表示,有效地避免了使用深度神經網絡時所遇到的梯度彌散問題;將代碼進行分類,使相同功能的代碼得到重複利用,提升軟體的開發效率。

附圖說明

圖1是本發明的流程圖;

圖2是本發明的示意圖。

具體實施方式

本說明書中公開的所有特徵,除了互相排斥的特徵和/或步驟以外,均可以以任何方式組合。

下面結合附圖對本發明作詳細說明。

一種基於神經網絡語言模型的代碼分類方法,包括以下步驟:

步驟1:利用工具pycparser將代碼轉換為ast樹(抽象語法樹)。

步驟2:初始化ast樹結點ci的向量vec(ci),即給所述ast樹中的結點分別分配一個隨機值向量;所述結點ci中非葉子結點pk的向量為vec(pk)1,所述非葉子結點pk的孩子結點tx的向量為vec(tx),其中vec(pk)1∈vec(ci),vec(tx)∈vec(ci),其中i表示結點的序號,k表示非葉子節點的序號,x表示孩子結點的序號。

步驟3:為了使ast樹中相似的結點間有著相近的向量表示,ast樹中一個非葉子結點pk的向量表示可以由其孩子子結點的向量表示通過一個單層的神經網絡得到;即利用孩子結點tx的向量vec(tx),得到所述非葉子結點pk的重構向量vec(pk)2的計算步驟如下:

該公式為了解決參數wx的個數不確定的問題,即採用連續二叉樹模型將多叉樹形式轉化為二叉樹;

其中,n表示結點的個數,b表示大小為的偏置項;lx表示孩子結點的權重,a代表孩子結點下的葉子數,e代表非葉子結點pk下的葉子數;wx表示孩子結點與非葉子結點pk間的連接矩陣且nf表示向量的維度,wl、wr為參數矩陣。

步驟4:利用ast_node2vec模型對所述結點向量vec(ci)進行學習,若不滿足循環條件,更新結點向量vec(ci),跳轉到步驟3;若滿足循環條件,則輸出更新了結點向量vec(ci)的ast樹和更新後的非葉子結點pk的重構向量vec(pk)2,循環條件可設置為循環次數;

進行學習的步驟如下:

s401:計算非葉子結點pk的向量vec(pk)1和重構向量vec(pk)2之間的差異值,計算公式如下為:

s402:對ast樹中的結點進行負採樣,得到y個訓練樣例和y個由訓練樣例產生的負樣例,訓練樣例與負樣例的損失函數的計算公式如下:

其中,d(y)表示第y個訓練樣例的差異值,表示第y個負樣例的差異值,δ表示設定的訓練樣例與負樣例之間間距的最小值;

s403:對ast_node2vec模型的參數進行正則化,得到的目標函數公式如下:

其中,m表示矩陣wl和wr中元素的個數且λ表示為了平衡編碼誤差和正則化項的超參數;

s404:對所述目標函數使用隨機梯度下降算法,使模型的參數得到調整,其中參數的更新公式如下:

其中,vec(ci)j表示結點向量vec(ci)中的元素,表示矩陣wr中的元素,表示矩陣wl中的元素,j表示維度。

步驟5:將更新了結點向量vec(ci)的ast樹和更新後的非葉子結點pk的重構向量vec(pk)2作為基於樹的卷積神經網絡(tcnn)的輸入,利用基於樹的所述卷積神經網絡完成對代碼的分類,具體步驟如下:

s501:將非將更新了結點向量vec(ci)的ast樹和更新後的非葉子結點pk的重構向量vec(pk)2作為基於樹的卷積神經網絡中編碼層的輸入,利用所述非葉子結點pk的向量vec(pk)1和重構向量vec(pk)2計算非葉子結點pk的線性組合向量vec(pk),計算公式如下:

vec(pk)=wcomb1·vec(pk)1+wcomb2·vec(pk)2(25),

其中,wcomb1表示非葉子結點pk的向量vec(pk)1的權重,wcomb2表示重構向量vec(pk)2的權重;

s502:將所述非葉子結點pk的向量vec(pk)1替換為所述線性組合向量vec(pk),其餘葉子結點的向量不變,得到更新後的ast樹;

s503:利用卷積層對更新後的ast樹進行處理,即使特徵探測器在ast樹進行滑動,得到特徵探測器輸出h,計算公式如下:

其中,和均表示參數矩陣,表示的係數,表示的係數,表示的係數;depthi表示結點ci在窗口中的深度,depth表示窗口的深度;pti表示結點ci在所有兄弟結點中的位置,u表示結點ci的兄弟結點的個數;

s504:將卷積層輸出的ast樹輸入到池化層進行處理,將結點ci的多維向量轉化為一維向量,選取所述一維向量中的最大值,輸出所述最大值;

s505:將池化層處理後的ast樹輸入到隱藏層進行處理,即將ast樹中的結點ci與隱藏層中的每一個神經元進行連接;

s506:將隱藏層處理後的結果輸入到輸出層中,輸出層採用的函為數softmax,輸出分類的結果。

如上所述即為本發明的實施例。本發明不局限於上述實施方式,任何人應該得知在本發明的啟示下做出的結構變化,凡是與本發明具有相同或相近的技術方案,均落入本發明的保護範圍之內。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀