两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于神經(jīng)網(wǎng)絡(luò)語言模型的代碼分類方法與流程

文檔序號:11199124閱讀:708來源:國知局
一種基于神經(jīng)網(wǎng)絡(luò)語言模型的代碼分類方法與流程

本發(fā)明涉及一種代碼分類的方法,特別是一種基于神經(jīng)網(wǎng)絡(luò)語言模型的代碼分類方法,可以對代碼按照功能進(jìn)行分類。



背景技術(shù):

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



技術(shù)實現(xiàn)要素:

基于以上技術(shù)問題,本發(fā)明提供了一種基于神經(jīng)網(wǎng)絡(luò)語言模型的代碼分類方法,旨在解決代碼分類時因符號表示方法造成維度災(zāi)難的技術(shù)問題。

本發(fā)明采用的技術(shù)方案如下:

一種基于神經(jīng)網(wǎng)絡(luò)語言模型的代碼分類方法,包括以下步驟:

步驟1:將代碼轉(zhuǎn)換為ast樹;

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

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

步驟4:利用ast_node2vec模型對所述結(jié)點向量vec(ci)進(jìn)行學(xué)習(xí),若不滿足循環(huán)條件,更新結(jié)點向量vec(ci),跳轉(zhuǎn)到步驟3;若滿足循環(huán)條件,則輸出更新了結(jié)點向量vec(ci)的ast樹和更新后的非葉子結(jié)點pk的重構(gòu)向量vec(pk)2;

步驟5:將更新了結(jié)點向量vec(ci)的ast樹和更新后的非葉子結(jié)點pk的重構(gòu)向量vec(pk)2作為基于樹的卷積神經(jīng)網(wǎng)絡(luò)的輸入,利用基于樹的卷積神經(jīng)網(wǎng)絡(luò)完成對代碼的分類。

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

進(jìn)一步的,所述步驟3中,非葉子結(jié)點pk的重構(gòu)向量vec(pk)2的計算步驟如下:

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

進(jìn)一步的,利用ast_node2vec模型對所述結(jié)點向量vec(ci)進(jìn)行學(xué)習(xí)的步驟如下:

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

s402:對ast樹中的結(jié)點進(jìn)行負(fù)采樣,得到y(tǒng)個訓(xùn)練樣例和y個由訓(xùn)練樣例產(chǎn)生的負(fù)樣例,訓(xùn)練樣例與負(fù)樣例的損失函數(shù)的計算公式如下:

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

s403:對ast_node2vec模型的參數(shù)進(jìn)行正則化,得到的目標(biāo)函數(shù)公式如下:

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

s404:對所述目標(biāo)函數(shù)使用隨機梯度下降算法,使模型的參數(shù)得到調(diào)整,其中參數(shù)的更新公式如下:

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

進(jìn)一步的,利用所述基于樹的卷積神經(jīng)網(wǎng)絡(luò)完成對代碼的分類的具體步驟如下:

s501:將非將更新了結(jié)點向量vec(ci)的ast樹和更新后的非葉子結(jié)點pk的重構(gòu)向量vec(pk)2作為基于樹的卷積神經(jīng)網(wǎng)絡(luò)中編碼層的輸入,利用所述非葉子結(jié)點pk的向量vec(pk)1和重構(gòu)向量vec(pk)2計算非葉子結(jié)點pk的線性組合向量vec(pk),計算公式如下:

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

其中,wcomb1表示非葉子結(jié)點pk的向量vec(pk)1的權(quán)重,wcomb2表示重構(gòu)向量vec(pk)2的權(quán)重;

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

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

其中,均表示參數(shù)矩陣,表示的系數(shù),表示的系數(shù),表示的系數(shù);depthi表示結(jié)點ci在窗口中的深度,depth表示窗口的深度;pti表示結(jié)點ci在所有兄弟結(jié)點中的位置,u表示結(jié)點ci的兄弟結(jié)點的個數(shù);

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

s505:將池化層處理后的ast樹輸入到隱藏層進(jìn)行處理;

s506:將隱藏層處理后的結(jié)果輸入到輸出層中,輸出分類的結(jié)果。

綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果是:

基于神經(jīng)網(wǎng)絡(luò)語言模型,可利用分布式的表示方法表示ast樹中結(jié)點的符號,能夠有效的避免維度災(zāi)難的問題,特別是在處理大規(guī)模數(shù)據(jù)問題時;利用該分類方法能顯示出語義上的相似性,充分利用了編程語言中豐富的結(jié)構(gòu)化信息;利用抽象語法樹來表示代碼,不依賴于源語言的語法,對于所有編程語言來說具有通用性;利用無監(jiān)督學(xué)習(xí)方式學(xué)習(xí)到結(jié)點的向量表示,有效地避免了使用深度神經(jīng)網(wǎng)絡(luò)時所遇到的梯度彌散問題;將代碼進(jìn)行分類,使相同功能的代碼得到重復(fù)利用,提升軟件的開發(fā)效率。

附圖說明

圖1是本發(fā)明的流程圖;

圖2是本發(fā)明的示意圖。

具體實施方式

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

下面結(jié)合附圖對本發(fā)明作詳細(xì)說明。

一種基于神經(jīng)網(wǎng)絡(luò)語言模型的代碼分類方法,包括以下步驟:

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

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

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

該公式為了解決參數(shù)wx的個數(shù)不確定的問題,即采用連續(xù)二叉樹模型將多叉樹形式轉(zhuǎn)化為二叉樹;

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

步驟4:利用ast_node2vec模型對所述結(jié)點向量vec(ci)進(jìn)行學(xué)習(xí),若不滿足循環(huán)條件,更新結(jié)點向量vec(ci),跳轉(zhuǎn)到步驟3;若滿足循環(huán)條件,則輸出更新了結(jié)點向量vec(ci)的ast樹和更新后的非葉子結(jié)點pk的重構(gòu)向量vec(pk)2,循環(huán)條件可設(shè)置為循環(huán)次數(shù);

進(jìn)行學(xué)習(xí)的步驟如下:

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

s402:對ast樹中的結(jié)點進(jìn)行負(fù)采樣,得到y(tǒng)個訓(xùn)練樣例和y個由訓(xùn)練樣例產(chǎn)生的負(fù)樣例,訓(xùn)練樣例與負(fù)樣例的損失函數(shù)的計算公式如下:

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

s403:對ast_node2vec模型的參數(shù)進(jìn)行正則化,得到的目標(biāo)函數(shù)公式如下:

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

s404:對所述目標(biāo)函數(shù)使用隨機梯度下降算法,使模型的參數(shù)得到調(diào)整,其中參數(shù)的更新公式如下:

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

步驟5:將更新了結(jié)點向量vec(ci)的ast樹和更新后的非葉子結(jié)點pk的重構(gòu)向量vec(pk)2作為基于樹的卷積神經(jīng)網(wǎng)絡(luò)(tcnn)的輸入,利用基于樹的所述卷積神經(jīng)網(wǎng)絡(luò)完成對代碼的分類,具體步驟如下:

s501:將非將更新了結(jié)點向量vec(ci)的ast樹和更新后的非葉子結(jié)點pk的重構(gòu)向量vec(pk)2作為基于樹的卷積神經(jīng)網(wǎng)絡(luò)中編碼層的輸入,利用所述非葉子結(jié)點pk的向量vec(pk)1和重構(gòu)向量vec(pk)2計算非葉子結(jié)點pk的線性組合向量vec(pk),計算公式如下:

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

其中,wcomb1表示非葉子結(jié)點pk的向量vec(pk)1的權(quán)重,wcomb2表示重構(gòu)向量vec(pk)2的權(quán)重;

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

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

其中,均表示參數(shù)矩陣,表示的系數(shù),表示的系數(shù),表示的系數(shù);depthi表示結(jié)點ci在窗口中的深度,depth表示窗口的深度;pti表示結(jié)點ci在所有兄弟結(jié)點中的位置,u表示結(jié)點ci的兄弟結(jié)點的個數(shù);

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

s505:將池化層處理后的ast樹輸入到隱藏層進(jìn)行處理,即將ast樹中的結(jié)點ci與隱藏層中的每一個神經(jīng)元進(jìn)行連接;

s506:將隱藏層處理后的結(jié)果輸入到輸出層中,輸出層采用的函為數(shù)softmax,輸出分類的結(jié)果。

如上所述即為本發(fā)明的實施例。本發(fā)明不局限于上述實施方式,任何人應(yīng)該得知在本發(fā)明的啟示下做出的結(jié)構(gòu)變化,凡是與本發(fā)明具有相同或相近的技術(shù)方案,均落入本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
偃师市| 安庆市| 重庆市| 紫金县| 灵川县| 兴化市| 邹城市| 龙江县| 乳山市| 常德市| 尼木县| 正蓝旗| 大埔区| 桦南县| 思南县| 筠连县| 开封县| 奉化市| 镇江市| 连城县| 苗栗市| 新建县| 奉新县| 和静县| 西和县| 茂名市| 奉化市| 阳东县| 荣成市| 馆陶县| 锡林郭勒盟| 河池市| 长海县| 津市市| 铜山县| 都昌县| 拉萨市| 台州市| 沅江市| 宜兰市| 克山县|