[發明專利]一種基于神經網絡語言模型的重復代碼檢測方法有效
| 申請號: | 201710464437.4 | 申請日: | 2017-06-19 |
| 公開(公告)號: | CN107273294B | 公開(公告)日: | 2020-07-28 |
| 發明(設計)人: | 屈鴻;符明晟;涂強;劉洋軍;張亦洲;王一文;高榕;陳珊 | 申請(專利權)人: | 電子科技大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06N3/02 |
| 代理公司: | 成都弘毅天承知識產權代理有限公司 51230 | 代理人: | 徐金瓊;劉東 |
| 地址: | 611731 四川省成*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 神經網絡 語言 模型 重復 代碼 檢測 方法 | ||
1.一種基于神經網絡語言模型的重復代碼檢測方法,其特征在于,包括以下步驟:
步驟1:將所有的代碼中的每個代碼轉換為相應的CFG圖;
步驟2:抽取每個CFG圖中每一個結點的根子圖;
步驟3:將所有根子圖采用向量表示;
步驟4:將根子圖的向量表示輸入到深度圖核函數中學習,得到所有CFG圖兩兩間的相似度;
步驟5:將CFG圖兩兩間的相似度輸入到AP關聯聚類算法中進行CFG圖的聚類得到多個聚類簇,在同一個聚類簇中的CFG圖所對應的代碼即為重復代碼;
所述步驟2的步驟如下:
步驟21:給定CFG圖中每一個結點v要抽取的根子圖的度d,若d=0,表示并不需要抽取根子圖,否則轉到步驟22;
步驟22:利用廣度優先搜索算法獲得結點v的所有鄰居結點;
步驟23:對于結點v的每一個鄰居結點v'n,獲取其度為d-1的鄰居子圖,并將鄰居子圖保存在一個列表中,其中,d度鄰居子圖指的是與結點v距離為d的結點所構成的子圖,與根節點距離為d的結點并不需要都出現在根節點的d度鄰居子圖中,即根節點的d度鄰居子圖可以有多個;
步驟24:獲取結點v的度為d-1的鄰居子圖,將其與中相同的鄰居子圖進行連接,即得到了所需要的根子圖
所述步驟3的步驟如下:
步驟31:利用隨機值為所有的根子圖初始化一個向量表示
步驟32:利用改進的Skip Gram模型對根子圖的初始化向量表示進行更新,輸出所有根子圖最終的向量表示具體步驟如下:
步驟321:將結點為v的d度鄰居子圖的上下文sgcont定義為:以結點v的鄰居結點為根節點,由所有鄰居結點的度為d-1,d,d+1的鄰居子圖所構成的集合;
步驟322:使用固定長度的滑動窗口技術,在根子圖的輻射狀上下文進行滑動,進行固定長度選取;
步驟323:將Skip Gram模型中不同窗口間的投影層與輸出層間的權值設置為共享,將步驟322選取的一固定長度上下文輸入到Skip Gram模型中進行學習,得到本次循環的向量表示;
步驟324:若達到給定的循環終止次數,則停止循環,輸出所有根子圖的最終向量表示否則跳轉到步驟322,執行下一次循環。
2.根據權利要求1所述的一種基于神經網絡語言模型的重復代碼檢測方法,其特征在于:所述步驟323的具體步驟為:
步驟3231:將輸入層中輸入的上下文輸入到投影層中,投影層是一個恒等投影,并不需要對輸入層數據做任何處理;
步驟3232:將投影層的數據通過目標函數調整后輸入到輸出層中,輸出層對應一棵二叉樹,它是以根子圖集合中出現過的根子圖當葉子結點,以根子圖在所有根子圖中出現的次數當權值構造出來的Huffman樹,再由輸出層輸出本次循環的向量表示;目標函數通常取為:給定v結點的根子圖的初始化向量表示最大化初始化向量表示的上下文sgcont中每一個鄰居子圖的概率使用負采樣方法來近似這一概率分布。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于電子科技大學,未經電子科技大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710464437.4/1.html,轉載請聲明來源鉆瓜專利網。





