[發明專利]基于深度學習及代碼上下文結構和文本信息的API推薦方法有效
| 申請號: | 202010723230.6 | 申請日: | 2020-07-24 |
| 公開(公告)號: | CN111966817B | 公開(公告)日: | 2022-05-20 |
| 發明(設計)人: | 彭鑫;陳馳;趙文耘 | 申請(專利權)人: | 復旦大學 |
| 主分類號: | G06F16/335 | 分類號: | G06F16/335;G06F16/36;G06F16/35;G06N3/08;G06F40/284;G06F8/33 |
| 代理公司: | 上海正旦專利代理有限公司 31200 | 代理人: | 陸飛;陸尤 |
| 地址: | 200433 *** | 國省代碼: | 上海;31 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 深度 學習 代碼 上下文 結構 文本 信息 api 推薦 方法 | ||
1.一種基于深度學習的融合代碼結構和文本信息的API推薦方法,其特征在于,包括通過對大量包含目標API的源代碼進行解析,來構造大量的訓練樣本;構造融合代碼結構和文本信息的深度學習網絡;通過訓練樣本對深度學習網絡進行訓練,得到訓練好的深度學習網絡;用訓練好的深度學習網絡進行智能化API推薦;具體步驟為:
(一)構造用于深度學習網絡訓練的樣本,包括以下子步驟:
(1)以方法為最小單位,對代碼庫中每一個源代碼文件中的每一個方法進行解析,得到API上下文圖以及代碼token詞袋;
(2)對每一個解析得到的API上下文圖,迭代式地從其根結點開始遍歷,移除與當前遍歷到的結點存在控制流關系的后N個結點,并用一個表示窟窿的Hole結點取代被移除掉的N個結點,從而得到帶有窟窿的API上下文圖;對于帶有窟窿的API上下文圖,重新解析獲得其對應的剩余的代碼token組成的詞袋;于是,帶有窟窿的API上下文圖,剩余的代碼token組成的詞袋,以及第一個被替換的結點的標簽,構成了一個訓練樣本;重復這個過程,構造得一定數量的訓練樣本;
(二)構造融合代碼結構和文本信息的深度學習網絡;
所述深度學習網絡包括:API上下文圖網絡,代碼Token網絡,聯合層以及Softmax函數;其中,所述API上下文圖網絡用于學習代碼結構信息特征;該API上下文圖網絡由嵌入層和門控圖神經網絡GG-NNs組成,并基于給定的API上下文圖,學習得到API上下文圖向量;所述代碼Token網絡用于學習代碼文本信息特征;該代碼Token網絡由嵌入層、多層隱藏層以及Sum操作組成,并基于給定的代碼token詞袋學習得到token向量;所述聯合層用于融合代碼結構信息和代碼文本信息特征型,形成聯合向量;所述Softmax函數基于聯合向量計算出每一個候選API的概率,用于API推薦;
(三)進行深度學習網絡的訓練
將所有訓練樣本輸入深度學習網絡模型,進行訓練,得到訓練好的深度學習模型;
(四)用得到訓練好的深度學習模型,進行API預測推薦,包括以下子步驟:
(1)用戶輸入帶有窟窿的程序;
(2)將用戶輸入解析為API上下文圖和代碼token詞袋,輸入到深度學習模型中;
(3)運行模型深度學習模型,給出API推薦結果;
(4)用戶根據API推薦結果進行選擇;
(5)根據用戶的選擇,更新當前用戶輸入的程序;
其中,所述的API上下文圖,是一個有向圖(N,E),其中,N表示結點的集合,表示邊的集合;N中的每個結點代表一個API方法調用、一個API成員變量訪問、一個變量聲明、一個變量賦值、一個控制單元或者一個窟窿;邊表示結點之間的控制流和數據流關系;API上下文圖中的每個結點都是一種抽象表示,這種抽象表示是對代碼中的變量和常量進行了抽象,僅保留API對象創建、方法調用/屬性訪問、控制結點以及變量聲明;代碼中的API被抽象為完整的方法簽名;變量聲明或賦值結點將代碼中的變量聲明或賦值抽象為忽略變量名以及賦值常量的表示;控制結構結點,用If,ElseIf,Else,While,DoWhile,For,Foreach,Try,Catch,Finally,Switch,Case,Default分別表示相應的控制結構;控制結構結點有多個孩子結點,分別表示其不同的控制流中的代碼,結構體中的代碼以及結構體外的代碼;其中,Condition結點表示While結點的條件中代碼的起始結點;Body結點表示While結點結構體中的代碼的起始結點,Body結點的孩子結點的處理同Condition結點中孩子結點的處理;跳出While結點結構體的第一個API調用所對應的結點會作為While結點的孩子結點;結點與結點之間的邊的類型根據控制流和控制流的關系分為控制流類型、數據流類型、控制流和數據流類型,以及特殊類型;其中,控制流類型表示兩個結點間存在控制流關系,數據流類型表示兩個結點間存在數據流關系,控制流和數據流類型表示兩個結點間既存在控制流關系又存在數據流關系,特殊類型表示與Hole結點相連的邊的類型;給定一段代碼,從代碼的第一行開始進行解析,迭代地得到代碼的API上下文圖;
所述得到代碼token詞袋的方法,包括以下操作:
(1)將代碼文本信息中的方法名、參數名和變量名中的數字裁減掉;
(2)兩個特殊的字符”_”和“$”將方法名、參數名和變量名進行分詞;
(3)根據駝峰命名法,將得到的token進行分詞;
(4)對得到的每一個token進行詞形還原;
(5)過濾掉重復以及無意義的token;無意義的token包括單字符的token以及GloVe詞表中沒有包含的token。
2.根據權利要求1所述的基于深度學習的融合代碼結構和文本信息的API推薦方法,其特征在于,所述Softmax函數基于聯合向量計算出每一個候選API的概率,具體公式如下:
其中,p(y|x)表示當輸入為x時,y這個類可能的概率,exp表示以e為底的指數函數,Wy表示y這個類對應的深度學習網絡中的參數,Wc表示某一類c所對應的深度學習網絡中的參數。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于復旦大學,未經復旦大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010723230.6/1.html,轉載請聲明來源鉆瓜專利網。





