国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于眾包知識的API推薦方法研究

2021-08-03 05:24:58張廷秀
電腦知識與技術(shù) 2021年17期
關(guān)鍵詞:信息檢索

張廷秀

摘要:軟件開發(fā)者在開發(fā)過程中使用應用程序接口(Application Programming Interface ,API)來提高軟件開發(fā)效率,但查找并選取合適的API接口是一項耗時且具有挑戰(zhàn)的任務。已有的研究通常采用API文檔作為語料庫,通過關(guān)鍵詞匹配的方式來推薦適合的API,然而由于開發(fā)者使用的關(guān)鍵詞與需要查找API的差異,因此直接檢索的效果并不是很好。眾包問答網(wǎng)站如Stack Overflow每天產(chǎn)生數(shù)以千計的問答數(shù)據(jù),這些數(shù)據(jù)包含了API名稱及API的描述,可以利用這些眾包問答數(shù)據(jù)提升用戶檢索數(shù)據(jù)結(jié)果?;谶@一思路,提出了一種基于信息檢索技術(shù)和眾包問答數(shù)據(jù)的API推薦方法。該方法利用眾包問答數(shù)據(jù)對用戶輸入的查詢語句進行建模并計算與已有問題的相似度進而根據(jù)已有問題的答案為用戶推薦相關(guān)API。為了驗證該方法的有效性,從Stack Overflow中提取Java相關(guān)的問答數(shù)據(jù),提取其中的API描述信息及API信息進行模擬實驗,結(jié)果表明,該文方法能有效提高API查詢的準確性。

關(guān)鍵詞:眾包知識;API 推薦;信息檢索;問答網(wǎng)站

中圖分類號:TP301? ? ? 文獻標識碼:A

文章編號:1009-3044(2021)17-0076-03

開放科學(資源服務)標識碼(OSID):

Research on API? Recommendation Method Based on Crowdsourcing Knowledge

ZHANG Ting-xiu

(Jiangsu Vocational Institute of Architectural Technology , Xuzhou 221116 , China)

Abstract: Software developers apply application programming interface (API) to improve the efficiency of software development, but it is a time-consuming and challenging task to find the appropriate API. Existing studies usually use API documents as corpus to recommend suitable APIs by keyword matching. However, due to the differences between the keywords used by developers and the APIs they need to find, the effect of direct retrieval is not very good. Crowdsourcing Q & A websites such as stack overflow generate thousands of Q & a data every day. These data include API name and API description, which can be used to improve users' retrieval results. Based on this idea, an API recommendation method based on crowdsourcing Q & a data is proposed. This method uses crowdsourcing Q & a data to model user input query statements and calculate the similarity with existing questions, and then recommends relevant APIs for users according to the answers of existing questions. In order to verify the effectiveness of this method, Java related Q & a data is extracted from stack overflow, and the API description information and API information are extracted for simulation experiments. The results show that this method can effectively improve the accuracy of API query.

Key words:crowdsourced knowledge; API recommendation; information retrieval; Q&A

1 引言

隨著信息技術(shù)的發(fā)展,軟件的規(guī)模越來越大,軟件開發(fā)者需要使用各種各樣的開發(fā)框架和接口來完成開發(fā)任務。然而,當開發(fā)者需要開發(fā)不熟悉的功能時,他們需要確定哪個API或者庫能幫助他們完成開發(fā)任務。通常,開發(fā)者通過互聯(lián)網(wǎng)搜索引擎或者軟件文檔查詢、搜索相關(guān)API及代碼片段來輔助完成開發(fā)任務。但從海量的數(shù)據(jù)或文檔中選擇合適的API并學習API使用模式是一件耗時且具有挑戰(zhàn)性的任務。開發(fā)者需要通過自然語言在互聯(lián)網(wǎng)或者問答網(wǎng)站上檢索,由于同一個功能或者API具有多種不同的描述方式,在檢索時開發(fā)者可能需要多次變換檢索關(guān)鍵字才能找到滿意的結(jié)果,研究表明,開發(fā)者平均花費19%的開發(fā)時間通過互聯(lián)網(wǎng)搜索相關(guān)API或代碼片段完成開發(fā)任務。

然而,當開發(fā)者不熟悉某個API時很難使用準確的關(guān)鍵字描述API,因此開發(fā)者直接從API文檔中查找需要使用的API具有一定難度,同時在找到合適的API時,如何使用這些API即掌握API的調(diào)用序列是開發(fā)者在使用API過程中面臨的第二個問題。如果開發(fā)者選擇通過互聯(lián)網(wǎng)搜索相關(guān)API,也要面臨選擇合適關(guān)鍵詞作為檢索詞及API調(diào)用序列學習的問題。同時當開發(fā)者面臨開發(fā)任務或者難以解決的編程任務時也會到眾包問答網(wǎng)站,如Stack Overflow上提問,眾多具有豐富經(jīng)驗的開發(fā)者可以根據(jù)提問者的描述給出自己的答案,提問者可以根據(jù)回答者的回答進行編程測試,并根據(jù)測試結(jié)果選擇合適的解決方案。如圖1所示,從著名眾包編程問答網(wǎng)站Stack Overflow上截取的編程問答實際案例。Stack Overflow包含數(shù)以千萬計的問答數(shù)據(jù),并且新的問題也在不斷地被提出,每個問題包含了不同級別開發(fā)者對于問題的不同描述,問題的回答者也會根據(jù)問題內(nèi)容給出具體API和代碼片段。因此研究如何利用眾包編程問答網(wǎng)站產(chǎn)生的問答數(shù)據(jù)幫助開發(fā)者快速找到合適的API及API調(diào)用序列是具有重大意義和亟待解決的問題。

2 問題描述及相關(guān)工作

2.1問題描述

API推薦是根據(jù)用戶輸入的Q,返回相關(guān)的代碼片段、單個API方法或者API調(diào)用序列及API Library。根據(jù)輸入Q的類型不同,可以分為以自由文本作為出入、API名稱作為輸入及其他類型的輸入。本文研究的內(nèi)容為根據(jù)用戶的自由文本輸入推薦API名稱及API調(diào)用序列。

2.2相關(guān)工作

2.2.1基于自由文本輸入API推薦研究現(xiàn)狀

傳統(tǒng)基于自由文本輸入API推薦主要是基于信息檢索技術(shù),計算用戶輸入和API代碼注釋的文本相似度進行API推薦。張云帆等人提出了基于用戶輸入和GitHub開源項目API注釋的文本相似度的API推薦方法。張睿峰等人提出了基于注意力機制的API使用模式推薦方法,解決了自由文本輸入時關(guān)鍵詞出現(xiàn)順序不同導致語義不同的情形。Jiang 等人結(jié)合信息檢索和監(jiān)督學習方法為開發(fā)者推薦代碼片段。Qiao等人提出了BIKER方法解決API推薦問題,該方法使用詞嵌入技術(shù)計算文本相似度得分,解決了傳統(tǒng)基于文本相似度算法中的詞空缺問題。

2.2.2基于API名稱輸入等其他類型輸入API推薦研究現(xiàn)狀

基于API名稱的推薦研究主要集中在類庫方面。Zheng W提出了一種基于搜索引擎的API Library推薦方法可以根據(jù)API名稱推薦功能相同的API Library。Thung F提出了一種基于協(xié)同過濾的方式為開源軟件特性功能更新請求推薦API。Yu H提出了一種基于圖算法API推薦算法,可以根據(jù)API調(diào)用上下文信息進行API名稱推薦。Gao W提出了一種基于協(xié)同過濾算法和個性化權(quán)重排序算法的Web API推薦算法。D'Souza A R通過提取GitHub上面開源項目并使用KNN算法對相似的使用語法進行提取然后根據(jù)BMN算法對結(jié)果進行排序形成最終的API推薦列表。

3 整體框架

圖2給出了算法的整體框架。根據(jù)前文所述API代碼推薦使用場景描述,當用戶輸入查詢語句時,算法會根據(jù)用戶輸入推薦處與用戶輸入內(nèi)容前10個最相關(guān)的API代碼調(diào)用序列。整個算法總共分為三個部分:句子向量化表示、API調(diào)用序列提取、句子相似度計算。

3.1數(shù)據(jù)提取

本文從Stack Overflow官方的數(shù)據(jù)鏡像中下載了Posts.xml,并從中提取了208432對有效問答數(shù)據(jù)。由于我們只關(guān)注Java相關(guān)的問答數(shù)據(jù)所以我們在提取時只提出了Tag為java的問答數(shù)據(jù)。被采納的回答數(shù)據(jù)中包含了用戶對答案的描述及代碼片段,經(jīng)過觀察發(fā)現(xiàn),回答中的代碼片段總是包裹在標簽中,因此我們可以通過正則表達式提取原始HTML數(shù)據(jù)中的代碼片段和回答描述信息。通過以上步驟我們可以將原始數(shù)據(jù)中的代碼片段和表述信息分離以便下一步處理計算使用。

3.2句子向量化表示

為了能夠計算用戶輸入查詢和系統(tǒng)中已存在問題的相似度,需要對用戶的輸入查詢語句進行向量化表示。如圖2所示,對于語料庫中的數(shù)據(jù),我們會對其進行自然語言處理并建立doc2vec模型,該方法基于word2vec的思想,在訓練時為每個句子加入唯一標識段落id,保證訓練過程中每個句子都有一個唯一的id。該id和傳統(tǒng)word2vec算法中的word一樣,也是先映射成一個向量,即段落向量。雖然段落向量與詞向量的維數(shù)一樣,但來自兩個不同的向量空間。后續(xù)計算過程中,段落向量和詞向量累加或者連接起來,作為softmax層的輸入。同一個句子或者文檔的訓練過程中段落編號保持不變,共享段落向量,相當于每次在預測單詞的概率時,都利用了整個句子的語義。算法原理圖如圖3所示。

3.3 API類和方法提取

根據(jù)已有研究結(jié)果,從代碼片段中提取API調(diào)用序列主要有兩種方式。一種是將代碼轉(zhuǎn)換成為AST表達式樹的方式抽取代碼調(diào)用序列;另外一種是通過正則表達式組合及孤島解析技術(shù)提取API調(diào)用模式或者方法。前一種適合完整可運行的代碼片段,而第二種技術(shù)適用場景比較廣泛且本文所研究數(shù)據(jù)基于眾包問答網(wǎng)站數(shù)據(jù),用戶的回答所包含的代碼不一定是完整可運行的,所以本文采用第二種提取方式。首先從原始數(shù)據(jù)中提取出標簽中所包含的代碼片段,之后采用論文中的方法提取API類和方法,為了保證提取出API類和方法的正確性,在提取出API方法和類時會和官方文檔中的類名和方法名對比,只有對比通過的數(shù)據(jù)才會作為有效數(shù)據(jù)存儲。經(jīng)過本步驟的提取最終形成<問題表述向量,API調(diào)用序列,API方法名>三元組。

3.4 API推薦

API推薦主要包含兩個部分,第一部分是對用戶輸入的查詢內(nèi)容進行自然語言處理,轉(zhuǎn)換成句向量。第二部分將生成的句向量依次與已有的三元組中的問題描述句向量計算相似度,將相似度最高的前N個三元組中的API調(diào)用序列、API方法名作為推薦結(jié)果輸出。

4實驗分析

4.1實驗步驟

根據(jù)實驗步驟3.1-3.4算法步驟和從Stack Overflow中提取的數(shù)據(jù)訓練算法模型。設(shè)計多個API查詢場景的自然語言查詢語句,如“how to parse html in java”,在推薦的結(jié)果中查詢是否有合適的API出現(xiàn),如果有則視為有效推薦,否則視為無效推薦。

4.2評價指標

為了評價算法的有效性,本文通過準確率和累計增益評價對TOP-N推薦結(jié)果進行評價。準確率(Precision)是通過計算推薦結(jié)果列表中包含用戶所需要API個數(shù)進行評測,用來評價結(jié)果的質(zhì)量。則推薦結(jié)果的準確率定義為:

其中, R(u)表示在根據(jù)訓練數(shù)據(jù)給用戶做出的推薦列表, T(u)表示用戶根據(jù)測試數(shù)據(jù)給用戶做出的推薦列表,則為推薦列表中最終有效的推薦結(jié)果。

為了衡量推薦結(jié)果的排序?qū)λ惴ㄓ行缘挠绊?,我們采用折損累積增益(Discounted Cumulative Gain,DCG)作為評價指標,其基本思想是用戶需要的API越靠前越能提高用戶的體驗。用戶往往只會查看排名靠前的TOP-N個結(jié)果。DCG的定義為:

其中,i代表推薦結(jié)果排序的位置,如果該推薦結(jié)果與查詢相關(guān)則reli 為1,否則為0, DCGp為推薦列表前 Top?K 項得分的累加值,其值越大表示用戶興趣度越高。

4.3實驗結(jié)果

本文使用傳統(tǒng)的TF-IDF文本相似度算法做對比實驗,對比結(jié)果如圖4,圖5所示。

由圖4可知,隨著推薦結(jié)果K的增長,兩種推薦算法的準確率都呈現(xiàn)了下降趨勢。當K值為5時兩種算法的準確率都達到了最高水平。對比來看,本文算法同等條件下準確率較高且隨著K值的增長準確率減少速度相對較慢。由此可知,本文算法推薦效果更好,穩(wěn)定性更強。

從圖5的DCG指標來看,同等推薦數(shù)據(jù)設(shè)置情況下,隨著推薦數(shù)量K的增加,TF-IDF算法和本文算法DCG值均會提高,但是相對而言,本文算法提高速度更快。由此可知,本文算法不僅在準確率上優(yōu)于TF-IDF算法,而且能夠適應用戶的喜好,更好地滿足項目的推薦效果。

綜上所述,以TF-IDF算法為基準算法做對比,本文算法在準確率和折損累積增益兩個指標上均有所提升。表明本文推薦算法不僅能夠挖掘出用戶需要的 API接口,而且可以取得更高的準確率和用戶滿意度,其推薦效果和質(zhì)量均優(yōu)于傳統(tǒng)的TF-IDF算法。

5 結(jié)論

本文基于眾包編程問答網(wǎng)站Stack Overflow數(shù)據(jù)作為語料庫構(gòu)建了基于句子相似度的API推薦算法,這彌補了傳統(tǒng)基于API文檔等語料庫數(shù)據(jù)更新不及時的缺點。實驗證明眾包編程問答網(wǎng)站的數(shù)據(jù)可以用來做API推薦語料庫,且基于本文算法推薦API比傳統(tǒng)TF-IDF算法具有更優(yōu)的推薦效果。

參考文獻

[1] 余力,劉魯,李雪峰,等.用戶多興趣下的個性化推薦算法研究[J].計算機集成制造系統(tǒng) ,2004,10(12):1610-1615.

[2] 李鑫.一種面向Mashup應用的API推薦方法[J].計算機技術(shù)與發(fā)展,2021,31(2):38-43.

[3] 楊延嬌,趙國濤,王丕棟.基于語義與情感的句子相似度計算方法[J/OL].[2021-01-20].https://kns.cnki.net/kcms/detail/11.2127.TP.20201120.1549.017.html.

[4] 李浩,鐘聲,康雁,等.融合領(lǐng)域知識的API推薦模型[J].計算機科學,2020,47(S2):544-548.

[5] 高順峰,張再躍.面向句法塊向量的句子相似度計算方法[J].軟件導刊,2020,19(10):106-110.

[6] 李鑫.多維數(shù)據(jù)融合的API服務可信推薦方法研究[D].開封:河南大學,2020.

[7] 吳涵.基于Mashup服務功能語義聚類的Web API推薦方法研究[D].杭州:浙江工業(yè)大學,2020.

[8] 朱書苗.基于Mashup服務語義表達聚類的API推薦方法研究[D].杭州:浙江工業(yè)大學,2020.

[9] 張云帆,周宇,黃志球.基于語義相似度的API使用模式推薦[J].計算機科學,2020,47(3):34-40.

[10] 韓院彬,趙輝,檀蓉,等.改進型協(xié)同過濾的API服務推薦方法研究[J].現(xiàn)代電子技術(shù),2019,42(21):86-89.

[11] 夏艷敏,唐兵,唐明董,等.利用關(guān)聯(lián)規(guī)則挖掘的Web API組合模式發(fā)現(xiàn)[J].小型微型計算機系統(tǒng),2019,40(10):2195-2201.

[12] 張睿峰,王鵬程,吳鳴,等.基于注意力機制的Java API序列推薦方法[J].計算機系統(tǒng)應用,2019,28(9):209-214.

【通聯(lián)編輯:唐一東】

猜你喜歡
信息檢索
基于同態(tài)加密支持模糊查詢的高效隱私信息檢索協(xié)議
基于信息檢索課的大學生信息檢索行為調(diào)查研究
高職院校圖書館開設(shè)信息檢索課的必要性探討
基于MOOC理念的“翻轉(zhuǎn)課堂”教學改革探索——以海南大學《文獻信息檢索與利用》課程為例
網(wǎng)絡環(huán)境下數(shù)字圖書館信息檢索發(fā)展
山西青年(2018年5期)2018-01-25 16:53:40
醫(yī)學期刊編輯中文獻信息檢索的應用
新聞傳播(2016年18期)2016-07-19 10:12:06
在網(wǎng)絡環(huán)境下高職院校開設(shè)信息檢索課的必要性研究
新聞傳播(2016年11期)2016-07-10 12:04:01
基于神經(jīng)網(wǎng)絡的個性化信息檢索模型研究
地理信息檢索中空間相似性度量的一種模糊方法
教學型大學《信息檢索》公選課的設(shè)計與實施
河南科技(2014年11期)2014-02-27 14:10:19
自贡市| 开远市| 甘孜| 洪雅县| 海晏县| 涪陵区| 桃源县| 都匀市| 崇阳县| 双江| 石狮市| 廊坊市| 平利县| 方山县| 会同县| 比如县| 临汾市| 平果县| 泾源县| 加查县| 宁南县| 永昌县| 柳江县| 南召县| 赣榆县| 乌恰县| 郯城县| 抚顺县| 乌兰县| 罗平县| 天门市| 栾城县| 沅陵县| 阿图什市| 龙里县| 崇礼县| 汉寿县| 普宁市| 襄城县| 霍邱县| 彰武县|