[發明專利]一種基于Tree-LSTM的API使用代碼生成式推薦方法有效
| 申請號: | 201811501452.2 | 申請日: | 2018-12-10 |
| 公開(公告)號: | CN109739494B | 公開(公告)日: | 2023-05-02 |
| 發明(設計)人: | 彭鑫;陳馳;趙文耘 | 申請(專利權)人: | 復旦大學 |
| 主分類號: | G06F8/35 | 分類號: | G06F8/35;G06N3/04;G06N3/08 |
| 代理公司: | 上海正旦專利代理有限公司 31200 | 代理人: | 陸飛;陸尤 |
| 地址: | 200433 *** | 國省代碼: | 上海;31 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 tree lstm api 使用 代碼 生成 推薦 方法 | ||
1.基于Tree-LSTM的API使用代碼生成式推薦方法,其特征在于,通過對大量包含目標API的源代碼進行解析來構造大量的訓練樣本,在此基礎上使用深度學習和統計模型訓練API使用代碼預測模型;所述代碼預測模型為兩部分:基于抽象代碼樹結構表示和深度學習的語句預測、基于數據依賴分析和統計模型的API調用參數預測;
其中,設計了一種適合于Tree-LSTM模型處理的代碼的抽象樹結構表示,其中的結點表示抽象的API使用語句或變量聲明/賦值語句或控制結構,邊表示它們之間的控制流關系;這種表示對代碼中的變量和常量進行了抽象,僅保留了API對象創建/方法調用/屬性訪問、控制結點以及變量聲明;抽象的API使用語句結點將代碼中的API使用語句抽象為完整的方法簽名;變量聲明/賦值語句結點將代碼中的變量聲明/賦值語句抽象為忽略變量名以及賦值常量的表示;控制結構結點用If、ElseIf、Else、While、DoWhile、For、Foreach、Try、Catch、Finally、Switch、Case、Default分別表示相應的控制結構;API使用語句結點和變量聲明/賦值語句結點最多只有一個子結點;這個子結點是其父節點所表示的API使用語句或變量聲明/賦值語句的下一條語句的抽象表示,因此這兩個結點的父子關系表示順序流關系;控制結構結點有多個子結點分別表示其不同的控制流中的代碼;在條件部分解析結束時,加入一個特殊結點ConditionEnd結點來表示條件部分的結束;當整個控制結構解析結束時,加入一個特殊結點ControlEnd結點來表示整個控制結構的結束;給定一段代碼,從代碼的第一行開始進行解析,迭代地得到代碼的抽象樹結構表示。
2.如權利要求1所述的基于Tree-LSTM的API使用代碼生成式推薦方法,其特征在于,具體步驟如下:
(一)語句模型訓練,包括以下子步驟:
(1)以訓練數據源代碼中的方法為單位進行代碼靜態分析,得到對應的抽象樹結構表示;
(2)對每一個方法的抽象樹結構表示,迭代式地從其根結點開始遍歷,移除當前遍歷到的結點后的N個結點,N表示待完成代碼的規模;并用一個表示待完成代碼即窟窿的Hole結點取代被移除掉的N個結點,從而得到帶有窟窿的代碼抽象樹結構表示,將每一個帶有窟窿的抽象樹結構表示和被移除的第一個結點作為了一個訓練樣本;
(3)將所有訓練樣本中帶有窟窿的抽象樹結構表示中的每一個結點所表示的抽象API映射為向量,然后將所有訓練樣本輸入Tree-LSTM網絡進行訓練,得到語句模型;
(二)參數模型訓練,包括以下子步驟:
(1a)對于步驟(一)中得到的訓練樣本中的代碼抽象樹結構表示,結合對應的源代碼進行數據依賴分析,在存在數據流依賴的結點之間加上數據依賴邊,并且對于表示變量聲明和賦值的結點加入其對應的變量名,從而得到加入了數據依賴的抽象樹結構表示,即加入了數據依賴的抽象樹結構表示比原始的抽象樹結構表示多了結點之間的數據流邊,以及結點所表示的變量名;
(2a)對于子步驟(1a)中得到的加入了數據依賴的抽象樹結構表示,抽取其中所有長度大于2的路徑,然后對于抽取得到的所有路徑,統計每條路徑中所有結點分別與這條路徑的終結點產生數據依賴的次數;
(3a)基于子步驟(2a)中的統計次數,給定一個候選API推薦及當前加入了數據依賴的抽象樹結構表示,計算其中每個結點在所有可以到達候選API推薦結點的長度大于2的路徑上與候選API推薦結點產生數據依賴的次數;
(4a)根據子步驟(3a)中的統計次數,計算每個結點與候選API推薦結點產生數據依賴的概率,概率越高,其結點所表示的變量越有可能成為候選API推薦中的參數;
(5a)根據子步驟(3a)中的統計次數,計算所有候選API推薦與當前代碼結合的緊密程度,概率越高,表示當前候選API推薦與當前代碼的數據依賴越強,結合越緊密,然后結合語句模型給出的當前候選API推薦的概率算出最終概率,最后對所有候選API推薦進行重排序;
(三)代碼推薦,包括以下子步驟:
(1b)用戶輸入包含待完成代碼即窟窿的程序;
(2b)根據用戶的輸入,運行語句模型和參數模型給出API推薦結果;
(3b)用戶根據API推薦結果進行選擇;
(4b)根據用戶的選擇更新當前用戶輸入的程序。
3.如權利要求2所述的基于Tree-LSTM的API使用代碼生成式推薦方法,其特征在于,步驟(1)和步驟(3)中采用Tree-LSTM模型進行語句預測模型訓練和預測,同時采用反映API語句、控制單元及其之間的控制流關系的抽象樹結構表示。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于復旦大學,未經復旦大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201811501452.2/1.html,轉載請聲明來源鉆瓜專利網。





