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

?

基于上下文感知并面向多樣性的API 推薦

2023-10-27 02:50:52賴寶強(qiáng)趙瑞蓮郭俊霞
計(jì)算機(jī)研究與發(fā)展 2023年10期
關(guān)鍵詞:子圖關(guān)聯(lián)性調(diào)用

賴寶強(qiáng) 李 征 趙瑞蓮 郭俊霞

(北京化工大學(xué)信息科學(xué)與技術(shù)學(xué)院 北京 100029)

基于軟件復(fù)用和模塊化開發(fā)的原則,現(xiàn)代軟件系統(tǒng)的開發(fā)通常需要使用外部庫.開發(fā)者基于一些基礎(chǔ)庫、第三方庫或者一些常用框架,能夠快速地構(gòu)建編程環(huán)境、實(shí)現(xiàn)編程任務(wù)、提高開發(fā)效率.有研究表明[1],在超過5 000 個(gè)軟件項(xiàng)目的研究中,45%的應(yīng)用程序編程接口(application programming interface,API)是直接從第三方庫導(dǎo)入的.

因此,在軟件開發(fā)過程中,開發(fā)者常常面臨API使用問題.在不熟悉的編程任務(wù)面前,開發(fā)者可能不知道使用哪些API 能對(duì)編程任務(wù)更有幫助.除此之外,如果缺乏相關(guān)的編程經(jīng)驗(yàn),開發(fā)者也可能不了解一些API 的具體使用方法.在這些情況下,開發(fā)者可能會(huì)查閱官方幫助文檔,或者通過代碼開源平臺(tái)和相關(guān)論壇查詢、搜索代碼示例,從而學(xué)習(xí)API 的使用.然而當(dāng)前很多官方文檔存在質(zhì)量問題[2-3],且通常只提供API 的描述信息而不提供代碼示例[4].利用一些非正式的平臺(tái)或者論壇進(jìn)行檢索和學(xué)習(xí)也會(huì)面臨許多障礙[5],并且這些返回的搜索結(jié)果可能是錯(cuò)誤的、不完整的[6].開發(fā)者需要花大量時(shí)間去篩選和測試才能找到自己需要的API 及其使用示例.

近年來,研究者們提出了各種方法為開發(fā)者推薦合適的API 及其使用模式,從而促進(jìn)開發(fā)者對(duì)API的學(xué)習(xí)和使用.API 使用的模式推薦方法通常是從大型代碼庫中挖掘API 的使用模式,然后通過有顯式或者無顯式的查詢匹配這些使用模式[7],最終推薦符合條件的API 元素或者代碼片段.

API 使用模式推薦的關(guān)鍵是API 的預(yù)測與推薦.主要有基于序列模式挖掘的方法、基于自然語言處理的方法以及基于機(jī)器學(xué)習(xí)的方法.基于序列模式挖掘的方法主要是利用序列模式挖掘算法挖掘API調(diào)用序列[8-10],根據(jù)API 使用頻率進(jìn)行預(yù)測,但是得到的模式通常包含很多重復(fù)子序列和無關(guān)子項(xiàng),造成結(jié)果的冗余,即存在模式爆炸問題[11].此后有研究人員提出使用圖結(jié)構(gòu)來表示API 調(diào)用序列[12],并利用NGram 語言模型思想計(jì)算子圖的生成概率,從而預(yù)測對(duì)應(yīng)的API.但是當(dāng)上下文信息變得復(fù)雜時(shí),子圖的生成效率變低,也容易出現(xiàn)長距離依賴問題.有研究人員提出基于神經(jīng)網(wǎng)絡(luò)的方法來解決自然語言處理的長依賴問題.例如利用深度學(xué)習(xí)模型RNN 學(xué)習(xí)API 調(diào)用序列[13-14],從而預(yù)測下一步API 出現(xiàn)的概率.也有利用圖深度學(xué)習(xí)模型GCN 融合拓?fù)湫畔⒑虯PI文本屬性[15]學(xué)習(xí)圖結(jié)構(gòu)的表示,從而預(yù)測潛在的API.這些方法主要利用API 上下文結(jié)構(gòu)信息學(xué)習(xí)API 的特征表示,然而API 之間細(xì)粒度的關(guān)系表示還不夠充分,導(dǎo)致難以區(qū)分API 之間的差異性.

文獻(xiàn)[8-15]方法在基于上下文的API 推薦場景中,以當(dāng)前正在編寫程序的項(xiàng)目或者方法中的API調(diào)用信息作為上下文,然后利用上下文的結(jié)構(gòu)信息或語義信息對(duì)API 進(jìn)行預(yù)測.利用結(jié)構(gòu)信息的方法通常結(jié)合API 調(diào)用序列或者上下文結(jié)構(gòu)進(jìn)行分析,然后基于API 使用頻率對(duì)候選API 進(jìn)行預(yù)測.利用語義信息的方法主要對(duì)上下文的語義特征進(jìn)行分析,然后根據(jù)候選API 與上下文的語義相似性進(jìn)行預(yù)測,最后根據(jù)候選API 預(yù)測值大小進(jìn)行排序推薦.然而這些方法形成的推薦列表,由于上下文信息考慮不充分,會(huì)導(dǎo)致推薦列表中冗余項(xiàng)和同質(zhì)化內(nèi)容的出現(xiàn),影響推薦性能.主要有3 種情況出現(xiàn):

1)基于API 序列結(jié)構(gòu)的方法通常只考慮API 之間的調(diào)用關(guān)系,導(dǎo)致一些與上下文語義不相關(guān)的API也被預(yù)測和推薦.例如,假定API 元素A,B,C能夠組成2 組序列模式L1=(A,B)和L2=(A,C),結(jié)合上下文的API 調(diào)用序列進(jìn)行預(yù)測,當(dāng)推薦A時(shí),根據(jù)使用頻率,B,C也將被預(yù)測成為候選API.如果L1與上下文語義相關(guān),那么C為冗余項(xiàng).當(dāng)冗余項(xiàng)變得越來越多時(shí),一些使用頻率較高但與上下文語義無關(guān)的API因?yàn)轭A(yù)測值大而排在推薦列表前面,推薦性能受到影響.

2)基于上下文結(jié)構(gòu)的方法通常會(huì)考慮上下文的語義關(guān)系而不考慮API 之間的調(diào)用關(guān)系,導(dǎo)致推薦結(jié)果容易出現(xiàn)模式冗余.例如,由1)中2 組序列模式L1=(A,B)和L2=(A,C)可知,如果L1和L2都與上下文語義相關(guān),那么將同時(shí)推薦L1和L2組成的API 使用模式.由于B,C不是有效的使用關(guān)系,同時(shí)推薦B,C容易造成模式冗余,其中,C為模式L1的冗余項(xiàng),B為模式L2的冗余項(xiàng).這種情況造成一些不存在使用關(guān)系的API 作為使用模式被推薦在列表中也會(huì)影響推薦性能.

3)當(dāng)前基于語義信息的推薦方法通??紤]的是項(xiàng)目與API 或者方法與API 的語義關(guān)系,缺乏API 之間細(xì)粒度關(guān)系的考量.當(dāng)推薦列表中存在能夠?qū)崿F(xiàn)相同功能的API 時(shí),且這些API 之間具有類似的屬性,那么API 之間差異性小,由于不區(qū)分API 之間的差異性,容易造成部分結(jié)果同質(zhì)化.當(dāng)一些具有類似屬性的同質(zhì)化API 也被推薦系統(tǒng)考慮而占用了推薦列表位置時(shí),會(huì)影響推薦性能.

針對(duì)這3 種情況,本文從不同粒度考慮API 的使用關(guān)系,充分利用上下文結(jié)構(gòu)和語義信息,對(duì)現(xiàn)有不同粒度的研究方法進(jìn)行改進(jìn),使它們能夠利用更多的特征信息,得到更好的推薦結(jié)果;然后再對(duì)這些方法推薦的相關(guān)結(jié)果配以關(guān)聯(lián)性分析結(jié)果后進(jìn)行重排,減少推薦列表中前排冗余項(xiàng)和同質(zhì)項(xiàng),從而增加推薦列表中有效API 的比例,提高推薦準(zhǔn)確率和平均精度.本文以圖模型為對(duì)象,提出一種基于上下文感知并面向多樣性的API 推薦方法,(context-aware based API recommendation with diversity,CAPIRD).

本文的主要貢獻(xiàn)有4 點(diǎn):

1)提出一種名為AHC (GAPI hierarchy call graph)的API 層次調(diào)用圖模型,從不同粒度上表示API 的上下文關(guān)系,為相關(guān)性和關(guān)聯(lián)性的分析服務(wù);

2)基于AHCG 模型分別構(gòu)造項(xiàng)目上下文和方法上下文的協(xié)同信號(hào),進(jìn)而感知相似的API 上下文,縮小候選API 的范圍,減少上下文冗余項(xiàng)的出現(xiàn),并度量相關(guān)性;

3)基于AHCG 模型構(gòu)建API 關(guān)聯(lián)圖,考慮細(xì)粒度的API 結(jié)構(gòu)關(guān)系,挖掘已選API 的關(guān)聯(lián)模式,減少模式冗余項(xiàng)的產(chǎn)生,并度量關(guān)聯(lián)性;

4)提出一種相關(guān)性與關(guān)聯(lián)性的線性組合算法,并從標(biāo)準(zhǔn)模式中學(xué)習(xí)最佳權(quán)重組合,對(duì)候選API 進(jìn)行重排推薦,降低推薦列表中同質(zhì)化API 出現(xiàn)的可能性,提高推薦結(jié)果的準(zhǔn)確率.

1 相關(guān)工作

研究人員提出了許多API 推薦方法和工具,來幫助開發(fā)者搜索和學(xué)習(xí)API 的使用.根據(jù)API 推薦場景,目前主要有2 類方式,即有顯式查詢推薦和無顯式查詢的推薦[7].

1.1 有顯式查詢的API 推薦

有顯式查詢方法主要是根據(jù)關(guān)鍵字或者自然語言顯式地表達(dá)開發(fā)者的意圖,然后進(jìn)行代碼或API的搜索,最終推薦相關(guān)的API 使用模式.例如,RACK[16],NLP2API[17]通過自然語言查詢Stack Overflow 上Q&A中的API 使用知識(shí).DeepAPI[14]將用戶查詢作為源語言,API 調(diào)用序列作為目標(biāo)語言,利用RNN 編碼-解碼器模型解決問題.CODEnn[18]將自然語言描述和代碼片段嵌入到高維的向量空間,使用戶可以通過自然語言查詢相關(guān)的代碼片段.BIKER[19]融合Stack Overflow 上的Q&A 和API 文檔來彌補(bǔ)自然語言和代碼之間的詞法和知識(shí)代溝.SSAPIR[20]將API 描述信息和查詢信息構(gòu)建為同一向量空間模型,利用TF-IDF算法計(jì)算向量空間中每個(gè)詞袋的語義特征,然后基于語義相似度匹配API 使用模式.GeAPI[21]使用圖嵌入技術(shù)學(xué)習(xí)API 圖的語義表示,根據(jù)用戶查詢返回相似的子圖.PreMA[22]提取了API 文檔中的功能性詞匯用于計(jì)算用戶查詢和功能語句的相似性.BRAID[23]利用開發(fā)者的反饋信息,通過主動(dòng)學(xué)習(xí)和學(xué)習(xí)排序(LTR)技術(shù),使得推薦結(jié)果更穩(wěn)定.

1.2 無顯式查詢的API 推薦

無顯式查詢方法主要是從API 上下文中研究開發(fā)者的編程意圖,從而挖掘或者預(yù)測相關(guān)的API 信息.一些經(jīng)典的工具如MAPO[8],UPMiner[9],PAM[10],分別通過序列挖掘算法、聚類算法和EM 算法挖掘API 調(diào)用序列并用于API 推薦.文獻(xiàn)[24]通過將API使用對(duì)象和共現(xiàn)關(guān)系構(gòu)建為關(guān)系網(wǎng),將網(wǎng)絡(luò)中相似對(duì)象的使用作為相似API 使用模式.SALAD[25]使用隱馬爾可夫模型學(xué)習(xí)API 調(diào)用序列,從而根據(jù)上下文中的API 調(diào)用序列預(yù)測下一步候選API 被使用的概率.FOCUS[26]將客戶端方法視為用戶,將API 調(diào)用視為物品,利用協(xié)同過濾算法推薦相似的API 使用模式.HiRec[27]通過分析API 調(diào)用之間的層次結(jié)構(gòu),利用層次推理模型預(yù)測可能匹配的API.APIRec-CST[28]利用門控圖神經(jīng)網(wǎng)絡(luò)(GG-NNs)學(xué)習(xí)結(jié)構(gòu)信息的向量表示,利用序列神經(jīng)網(wǎng)絡(luò)(如LSTM)學(xué)習(xí)文本信息的向量表示,連接GG-NNs 和LSTM,然后對(duì)目標(biāo)Hole 位置的API 進(jìn)行預(yù)測.GAPI[15]融合API 調(diào)用的結(jié)構(gòu)信息和API 的文本屬性,利用圖學(xué)習(xí)技術(shù)從API的調(diào)用關(guān)系中捕捉高階協(xié)同信號(hào),從而發(fā)現(xiàn)與API上下文相似的候選API.

2 相關(guān)定義

API 使用模式推薦示意如圖1 所示,假設(shè)開發(fā)者編寫到光標(biāo)處時(shí)遇到API 使用問題,不知道調(diào)用哪些API 或者怎么使用這些API 才能完成當(dāng)前客戶端方法myWork 中的剩余編程任務(wù).記開發(fā)者編程現(xiàn)場的上下文信息為Q.相關(guān)定義為:

Fig.1 Illustration of API usage patterns recommendation圖1 API 使用模式推薦示意圖

定義1.實(shí)體.表示遇到API 使用問題時(shí)所涉及的研究對(duì)象,有3 種,即項(xiàng)目實(shí)體、方法實(shí)體和API 實(shí)體.

開發(fā)人員在編程環(huán)境中正在編寫的項(xiàng)目稱為活動(dòng)項(xiàng)目,正在編寫的客戶端方法稱為活動(dòng)方法,活動(dòng)方法所在項(xiàng)目即為活動(dòng)項(xiàng)目.

定義2.上下文信息.用來刻畫某狀態(tài)下的實(shí)體關(guān)系和屬性信息,用四元組Q=(E,V,R,T)來表示.其中,E表示上下文中所研究的實(shí)體;V表示上下文中實(shí)體的屬性;R表示實(shí)體間的關(guān)系;T表示時(shí)間,反映某一時(shí)刻編程現(xiàn)場的上下文信息.

定義3.上下文相關(guān)性.表示上下文信息與API存在邏輯關(guān)系,定義為R1={(Q,i)|sim1(Q,i)≥λ1,i∈Ei}.其中,Q表示上下文信息,i表示API 實(shí)體,Ei表示API實(shí)體集合,λ1表示閾值,sim1表示邏輯推斷函數(shù).

定義4.API 關(guān)聯(lián)性.表示API 之間的邏輯聯(lián)系,通過API 實(shí)體之間的共同使用關(guān)系或?qū)傩孕畔?biāo)識(shí),其定義為R2={(mi,mj)|sim2(mi,mj)≥λ2,mi,mj∈Ei},R2表示API 實(shí)體mi和mj具有相似的使用關(guān)系或語義信息,mi和mj存在關(guān)聯(lián)性.其中,Ei表示API 實(shí)體集合,λ2表示閾值,sim2表示相似性函數(shù).

定義5.API 層次調(diào)用圖(API hierarchy call graph,AHCG).定義GAHCG={V,E},其中節(jié)點(diǎn)集合V有3 種類型的節(jié)點(diǎn),包括項(xiàng)目、方法和API;邊集合E表示項(xiàng)目和方法,以及方法和API 之間的層次關(guān)系.項(xiàng)目節(jié)點(diǎn)包括語料庫項(xiàng)目和客戶端項(xiàng)目;方法節(jié)點(diǎn)表示項(xiàng)目中定義的方法聲明;API 節(jié)點(diǎn)表示方法中的API 調(diào)用,其包括內(nèi)置API 調(diào)用、第三方API 調(diào)用和本地方法調(diào)用.

3 面向多樣性的API 推薦框架

基于開發(fā)者活動(dòng)項(xiàng)目的上下文信息,本文提出CAPIRD,整體框架如圖2 所示.CAPIRD 模型主要由4 個(gè)模塊組成:元數(shù)據(jù)結(jié)構(gòu)提取模塊、相關(guān)性分析模塊、關(guān)聯(lián)性分析模塊和重排推薦模塊.元數(shù)據(jù)結(jié)構(gòu)提取模塊主要是從項(xiàng)目源碼庫中提取項(xiàng)目、方法與API 的層次結(jié)構(gòu),并基于這些信息構(gòu)建AHCG 圖;相關(guān)性分析模塊主要從項(xiàng)目和方法粒度上,計(jì)算上下文的特征表示,然后基于特征相似性感知相似的上下文,進(jìn)而推斷與上下文相關(guān)API,并度量相關(guān)性;關(guān)聯(lián)性分析模塊從API 的粒度上,構(gòu)建API 之間的細(xì)粒度使用關(guān)系,然后從中挖掘頻繁使用模式作為API關(guān)聯(lián)圖以獲得更充分的API 結(jié)構(gòu)關(guān)系,并從圖中度量關(guān)聯(lián)性;API 多樣性重排從多樣性角度將相關(guān)性和關(guān)聯(lián)性進(jìn)行線性組合,提升推薦性能.

Fig.2 The overall framework of CAPIRD圖2 CAPIRD 的整體框架

3.1 AHCG 圖模型構(gòu)建

AHCG 圖用來表達(dá)API 與項(xiàng)目和方法之間的層次關(guān)系,從而能夠更好地利用元數(shù)據(jù)集中API 的結(jié)構(gòu)信息對(duì)客戶端項(xiàng)目進(jìn)行建模,并從不同粒度上表達(dá)API 在項(xiàng)目中的結(jié)構(gòu)特性.

利用靜態(tài)分析工具解析每個(gè)項(xiàng)目的類文件信息,將提取的方法名稱、方法參數(shù)、方法體、API 名稱、API 參數(shù)作為元數(shù)據(jù)集.對(duì)于給定項(xiàng)目元數(shù)據(jù)集,AHCG 圖的構(gòu)建過程為:

1)確定圖的項(xiàng)目節(jié)點(diǎn)集合P.確定元數(shù)據(jù)集中涉及的項(xiàng)目文件,并對(duì)不同項(xiàng)目進(jìn)行編號(hào),添加到P中.

2)確定方法節(jié)點(diǎn)集合U,以及項(xiàng)目和方法的關(guān)系邊E1.從項(xiàng)目起始編號(hào)開始,獲取項(xiàng)目所有類中定義的方法聲明,然后對(duì)這些方法進(jìn)行編號(hào),添加到U中,最后再建立該項(xiàng)目和方法的關(guān)系邊.例如,項(xiàng)目p解析后提取了方法u,那么p和u存在一條邊,即e1=(p,u),e1∈E1.

3)確定API 節(jié)點(diǎn)集合I,以及方法和API 的關(guān)系邊E2.從方法起始編號(hào)開始,依次提取方法中涉及的API 調(diào)用.然后判斷該API 是否存在,不存在,則添加新的API 節(jié)點(diǎn)編號(hào)到I中;否則從I中取出已存在的API 節(jié)點(diǎn)編號(hào).最后建立方法和API 的關(guān)系邊.例如方法u中提取了API 節(jié)點(diǎn)i,那么u和i存在一條邊,即e2=(u,i),e2∈E2.

根據(jù)1)~3)步驟構(gòu)建的結(jié)果示例如圖3 所示,節(jié)點(diǎn)Pi(i=0,1,2,3)表示項(xiàng)目節(jié)點(diǎn),節(jié)點(diǎn)Uj(j=0,1,…,4)表示方法節(jié)點(diǎn),節(jié)點(diǎn)Ik(k=1,2,…,7)表示API 節(jié)點(diǎn),關(guān)系邊E1和E2都表示層次關(guān)系.E1表示P到U這一類邊的集合,E2表示U到I這一類邊的集合.

Fig.3 Illustration of AHCG model construction圖3 AHCG 模型構(gòu)建示意

3.2 相關(guān)性分析

相關(guān)性分析模塊主要是基于上下文相似性對(duì)API進(jìn)行預(yù)測,并盡可能減少冗余項(xiàng)的出現(xiàn).上下文信息的分析包括活動(dòng)項(xiàng)目上下文和活動(dòng)方法上下文的分析.

2 個(gè)項(xiàng)目的相似性可由項(xiàng)目特征項(xiàng)的集合進(jìn)行計(jì)算[29],因此可以根據(jù)活動(dòng)項(xiàng)目上下文的特征集合感知相似的項(xiàng)目集合,從而縮小候選API 搜索范圍.此外,為了給活動(dòng)方法提供相關(guān)的API 使用建議,還需要研究活動(dòng)方法上下文的API 使用信息.

基于AHCG 的圖模型可知,項(xiàng)目節(jié)點(diǎn)和方法節(jié)點(diǎn)這2 類節(jié)點(diǎn)包含的API 使用信息規(guī)模不同,因此針對(duì)這2 類節(jié)點(diǎn)的上下文信息,分別使用不同的特征提取方法提取特征.然后從相似項(xiàng)目集合中計(jì)算活動(dòng)方法與目標(biāo)API 的相似性.

3.2.1 基于項(xiàng)目上下文的特征提取

項(xiàng)目上下文反映項(xiàng)目中的API 使用情況,本文通過評(píng)估不同項(xiàng)目中API 的被使用情況反映項(xiàng)目上下文的特征,利用TF-IDF 算法進(jìn)行計(jì)算.其中,特征TF表示API 在當(dāng)前項(xiàng)目中的使用頻率,特征IDF反映API 在整個(gè)項(xiàng)目源碼庫中的普遍性.

從AHCG 中的項(xiàng)目節(jié)點(diǎn)開始,通過層次遍歷能夠得到API 節(jié)點(diǎn)集合.給定項(xiàng)目的API 節(jié)點(diǎn)集合p={i1,i2,…,in},API 節(jié)點(diǎn)ik的特征TF計(jì)算如式(1)所示:

其中n表示集合p中API 節(jié)點(diǎn)的數(shù)量,表示API 節(jié)點(diǎn)ik的出現(xiàn)次數(shù).

API 節(jié)點(diǎn)ik的特征IDF計(jì)算如式(2)所示:

其中|P|表示AHCG中項(xiàng)目節(jié)點(diǎn)的數(shù)量,表示AHCG中使用了ik的項(xiàng)目節(jié)點(diǎn)數(shù)量.

在整個(gè)項(xiàng)目源碼庫的體系下,API 節(jié)點(diǎn)ik在項(xiàng)目p中的被使用情況的計(jì)算公式為

給定項(xiàng)目集合p,那么p的特征可以用API 被使用情況的向量表示,即?p=

3.2.2 基于方法上下文的特征提取

方法上下文反映了方法中的API 使用情況,同時(shí)以方法為單位的程序在一定程度上隱含了代碼的語義信息,因此考慮方法和API 的文本屬性應(yīng)該能夠增強(qiáng)上下文的語義表示.圖卷積神經(jīng)網(wǎng)絡(luò)(GCN)[30]利用圖結(jié)構(gòu)信息和節(jié)點(diǎn)屬性信息,能夠?qū)W習(xí)圖的特征表示.本文利用GCN 進(jìn)行方法上下文的特征提取,其網(wǎng)絡(luò)結(jié)構(gòu)主要由3 部分組成:輸入層、圖卷積層和輸出層.

1)輸入層.AHCG 圖的結(jié)構(gòu)信息、節(jié)點(diǎn)初始化特征表示為e0,如式(4)所示.

其中x代表節(jié)點(diǎn)文本屬性信息,Θin是編碼函數(shù)Encode(·)待學(xué)習(xí)的參數(shù),e0是編碼后的節(jié)點(diǎn)向量表示,分為方法u節(jié)點(diǎn)表示和APIi節(jié)點(diǎn)表示.

2)圖卷積層.其主要目的是聚合鄰居節(jié)點(diǎn)的協(xié)同信號(hào),從而實(shí)現(xiàn)消息傳遞.主要任務(wù)是協(xié)同信號(hào)的獲取和節(jié)點(diǎn)向量的更新.

協(xié)同信號(hào)的獲取公式為

根據(jù)聚合函數(shù)的消息傳遞機(jī)制,AHCG 中節(jié)點(diǎn)最新的特征表示通過與鄰居節(jié)點(diǎn)的聚合更新得到,如式(6)所示:

其中聚合函數(shù)f(·)使用ReLU 函數(shù)實(shí)現(xiàn).

3)輸出層.其獲得方法節(jié)點(diǎn)u和API 節(jié)點(diǎn)i的最終特征表示如式(7)所示.通過線性轉(zhuǎn)換層輸出k層卷積層的節(jié)點(diǎn)表示,然后對(duì)API 節(jié)點(diǎn)進(jìn)行預(yù)測.

其中連接函數(shù)concat(·)將每一層節(jié)點(diǎn)的特征表示順序連接.

3.2.3 相關(guān)性度量

相關(guān)性度量的主要目的是根據(jù)上下文提取的不同粒度特征對(duì)目標(biāo)API 進(jìn)行預(yù)測,預(yù)測值越大,則API 與上下文越相關(guān).因此,定義函數(shù)context(·)作為相似性度量的計(jì)算方法,從而適應(yīng)不同粒度的研究方法.輸入是上下文信息Q和目標(biāo)APIi,返回值是Q與i的相關(guān)性,如式(8)所示:

若Q是項(xiàng)目上下文信息,context(·)采用缺失評(píng)分算法[31]實(shí)現(xiàn)API 的預(yù)測并返回預(yù)測結(jié)果;若Q是方法上下文信息,根據(jù)式(7)中方法節(jié)點(diǎn)u和API 節(jié)點(diǎn)i的向量內(nèi)積進(jìn)行預(yù)測,即

3.3 關(guān)聯(lián)性分析

關(guān)聯(lián)性分析模塊的主要目的是從相似上下文中獲取API 關(guān)聯(lián)信息,并分別從結(jié)構(gòu)和語義上分析API之間的相似性.從另一個(gè)角度看,相似API 可以反映相似的上下文[32],因此相似的上下文中有可能隱含相似API.本文基于活動(dòng)方法上下文和AHCG 圖模型構(gòu)建API 關(guān)聯(lián)圖,增強(qiáng)細(xì)粒度的API 結(jié)構(gòu)表征,并從中挖掘API 的關(guān)聯(lián)模式;再基于關(guān)聯(lián)模式,分別從結(jié)構(gòu)關(guān)系和語義信息上度量API 之間的關(guān)聯(lián)強(qiáng)度.

基于AHCG 圖模型,API 關(guān)聯(lián)性分析模塊的分析對(duì)象是方法節(jié)點(diǎn)和API 節(jié)點(diǎn).

3.3.1 關(guān)系構(gòu)建

基于方法特征的向量表示,利用余弦相似性計(jì)算活動(dòng)方法與其他方法的相似性,將相似性值大于0 的方法作為相似方法.將這些相似方法中使用的API 作為節(jié)點(diǎn)、共現(xiàn)關(guān)系作為邊,構(gòu)建API 關(guān)聯(lián)圖.如圖4 左圖所示,節(jié)點(diǎn)I 表示API,邊表示2 個(gè)API 在方法中具有共同使用關(guān)系,邊權(quán)重表示2 個(gè)API 在方法中的共現(xiàn)次數(shù).為了挖掘目標(biāo)API 在相似上下文中的關(guān)聯(lián)程度,本文基于AHCG 圖模型將關(guān)聯(lián)關(guān)系保存在圖數(shù)據(jù)庫中,如式(9)所示:

Fig.4 Illustration of subgraph mining for associated target nodes圖4 關(guān)聯(lián)目標(biāo)節(jié)點(diǎn)的子圖挖掘示意圖

其中Ui為AHCG 中第i個(gè)相似的方法節(jié)點(diǎn),表示節(jié)點(diǎn)Ui構(gòu)建的API 關(guān)聯(lián)圖,和分別表示Ui中的API 節(jié)點(diǎn)和共現(xiàn)關(guān)系構(gòu)成的邊.

3.3.2 關(guān)聯(lián)模式挖掘

基于AHCG 圖模型,本文將API 之間關(guān)聯(lián)關(guān)系的發(fā)現(xiàn)轉(zhuǎn)化為頻繁子圖的挖掘.為了避免圖匹配過程的子圖同構(gòu)問題[33]和挖掘的模式出現(xiàn)冗余問題,本文鎖定目標(biāo)節(jié)點(diǎn)避免子圖任意擴(kuò)展,將挖掘的關(guān)聯(lián)模式覆蓋在目標(biāo)節(jié)點(diǎn)關(guān)聯(lián)的子圖上避免冗余輸出,進(jìn)而提出關(guān)聯(lián)目標(biāo)節(jié)點(diǎn)的子圖挖掘方法.首先將目標(biāo)節(jié)點(diǎn)作為初始節(jié)點(diǎn),基于AGM 算法[34]思想,通過添加新節(jié)點(diǎn)產(chǎn)生候選子圖,為防止候選子圖任意擴(kuò)展,對(duì)目標(biāo)節(jié)點(diǎn)的高階鄰居節(jié)點(diǎn)進(jìn)行剪枝,使挖掘的子圖作為目標(biāo)節(jié)點(diǎn)關(guān)聯(lián)的子圖.記錄目標(biāo)節(jié)點(diǎn)關(guān)聯(lián)新節(jié)點(diǎn)的2 階子圖的支持度,丟棄支持度不符合條件的候選2 階子圖,針對(duì)圖4(a)關(guān)聯(lián)圖的挖掘結(jié)果如圖4 右圖所示.

具體的關(guān)聯(lián)目標(biāo)節(jié)點(diǎn)的子圖挖掘算法如算法1所示,主要有4 個(gè)步驟:

1)首先設(shè)定支持度閾值,然后從相似的數(shù)據(jù)集合中構(gòu)建關(guān)聯(lián)圖數(shù)據(jù)庫,將不同的API 節(jié)點(diǎn)進(jìn)行編號(hào);

2)在目標(biāo)節(jié)點(diǎn)上添加新節(jié)點(diǎn)進(jìn)行子圖擴(kuò)展,對(duì)目標(biāo)節(jié)點(diǎn)的高階鄰居進(jìn)行剪枝,只保留與目標(biāo)節(jié)點(diǎn)有直接關(guān)聯(lián)關(guān)系的目標(biāo)子圖;

3)計(jì)算目標(biāo)節(jié)點(diǎn)與新節(jié)點(diǎn)構(gòu)成的2 階子圖的支持度,將未達(dá)到閾值的子圖丟棄;

4)將滿足條件的2 階子圖添加到目標(biāo)子圖上,當(dāng)所有節(jié)點(diǎn)都被訪問時(shí),生成最終的關(guān)聯(lián)目標(biāo)節(jié)點(diǎn)的子圖d(i),其中i表示目標(biāo)API 節(jié)點(diǎn).

最終,API 關(guān)聯(lián)子圖d中包含了API 之間各種可能的使用模式,可以為開發(fā)者展示更多可能性.

算法1.關(guān)聯(lián)目標(biāo)節(jié)點(diǎn)的子圖挖掘算法.

輸入:上下文信息Q,API 節(jié)點(diǎn)i,支持度minsup;

輸出:節(jié)點(diǎn)i關(guān)聯(lián)的子圖Gi.

3.3.3 關(guān)聯(lián)性度量

關(guān)聯(lián)性度量的主要目的是度量2 個(gè)API 之間的相似性,分別從結(jié)構(gòu)關(guān)系和語義關(guān)系上進(jìn)行度量.關(guān)聯(lián)性越強(qiáng),說明2 個(gè)API 相似的可能性越大.本文定義函數(shù)correlation(·)作為關(guān)聯(lián)性度量的計(jì)算方法,從而融合不同類型關(guān)系表示的研究方法.輸入是2 個(gè)API 節(jié)點(diǎn)i和j,返回值是i和j的關(guān)聯(lián)性,如式(10)所示:

若度量API 的結(jié)構(gòu)關(guān)系,correlation(·)計(jì)算節(jié)點(diǎn)i與j的權(quán)重系數(shù),由節(jié)點(diǎn)i和j的2 階子圖的支持度與圖數(shù)據(jù)庫數(shù)量的比值得出;若度量API 的語義關(guān)系,利用圖嵌入技術(shù)[15]將圖d中i節(jié)點(diǎn)的特征表示zi和節(jié)點(diǎn)j的特征表示zj進(jìn)行內(nèi)積,從而計(jì)算2 個(gè)節(jié)點(diǎn)的語義相似性,即

3.4 API 多樣性重排推薦

API 多樣性重排推薦的目的是優(yōu)化有效API 在推薦列表中的排名,減少冗余項(xiàng)和同質(zhì)化內(nèi)容的產(chǎn)生,使得推薦結(jié)果在保障推薦性能的前提下具有更好的多樣性.

根據(jù)最大邊緣相關(guān)(MMR)算法[35]的思想,通過結(jié)合查詢內(nèi)容的相關(guān)性和推薦內(nèi)容的新穎性能夠增加推薦結(jié)果的多樣性.新穎性反映了推薦內(nèi)容之間的差異性程度,若推薦內(nèi)容之間差異性小容易造成內(nèi)容同質(zhì)化,即相同結(jié)構(gòu)關(guān)系或功能屬性的API 同時(shí)被推薦.適當(dāng)調(diào)整一些同質(zhì)化內(nèi)容在推薦列表中的排名,能夠改變推薦內(nèi)容的多樣性.

本文在保持上下文相關(guān)性的同時(shí),協(xié)調(diào)推薦內(nèi)容之間的差異性來增加推薦結(jié)果的多樣性.推薦內(nèi)容之間的差異性可以通過API 之間的關(guān)聯(lián)性進(jìn)行度量,調(diào)整相關(guān)性和關(guān)聯(lián)性權(quán)重能夠使推薦列表展示更多可能的情況.因此,重排推薦的目標(biāo)是找到合適的平衡參數(shù),從而降低推薦列表中同質(zhì)化內(nèi)容出現(xiàn)的可能性,提升有效API 被推薦的可能性.相關(guān)性分析模塊和關(guān)聯(lián)性分析模塊分別度量了上下文與API之間的相關(guān)性和與API 的關(guān)聯(lián)性.利用式(11)之間將相關(guān)性和關(guān)聯(lián)性進(jìn)行線性組合來度量每個(gè)API 被推薦的可能性:

其中Q表示上下文信息,R表示候選API 集合,S表示R中已被選擇的API 集合,RS表示R中未被選擇的API 集合;1用于上下文信息和API 之間相關(guān)性的度量,用于API 之間關(guān)聯(lián)性的度量,參數(shù) λ用來度量sim1和sim2的權(quán)重.

根據(jù)式(11),當(dāng)參數(shù) λ=1 時(shí),MMR表示標(biāo)準(zhǔn)的相關(guān)性API 推薦結(jié)果;當(dāng)參數(shù) λ=0 時(shí),MMR表示最大的多樣性推薦結(jié)果.這些API 推薦結(jié)果是一種線性組合,本文利用算法2 所示方法從標(biāo)準(zhǔn)模式的訓(xùn)練數(shù)據(jù)集中獲取能夠平衡相關(guān)性和關(guān)聯(lián)性的最佳參數(shù).

算法2.Top-N參數(shù)優(yōu)化算法.

輸入:上下文信息Q,API 候選集合R;

輸出:Top-N(N=1,5,10,15,20)的最佳參數(shù)topNLambdas.

給定訓(xùn)練數(shù)據(jù)集,首先計(jì)算相關(guān)性條件下的性能指標(biāo),并以該指標(biāo)作為該訓(xùn)練集的基準(zhǔn).然后結(jié)合API 多樣性重排算法計(jì)算不同參數(shù)下Top-N的評(píng)價(jià)指標(biāo),迭代計(jì)算每一次參數(shù)采樣的評(píng)分,選擇評(píng)分最優(yōu)時(shí)Top-N取得的參數(shù)作為該數(shù)據(jù)集的最佳參數(shù).

4 實(shí)驗(yàn)與結(jié)果

為了驗(yàn)證所提API 推薦方法的有效性,本文使用真實(shí)的軟件項(xiàng)目模擬開發(fā)者的編程場景,并在3個(gè)不同的數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)驗(yàn)證,且與方法FOCUS和GAPI 進(jìn)行對(duì)比實(shí)驗(yàn).

本文實(shí)驗(yàn)的硬件和系統(tǒng)環(huán)境為Intel Xeon Gold 6148 處理器、256.0 GB RAM、Nvidia V100 GPU 的Linux 64 位服務(wù)器;Intel?CoreTMi7-10700 2.90 GHz 處理器、16.0 GB RAM 的Windows 10 64 位操作系統(tǒng);使用的軟件環(huán)境有JDK 1.8,Python3,PyTorch 等.

4.1 數(shù)據(jù)集

本文采用文獻(xiàn)[26]中所使用的開源數(shù)據(jù)集,其中數(shù)據(jù)集SHL 是從Github 軟件遺產(chǎn)存儲(chǔ)庫中任意提取的610 個(gè)Java 項(xiàng)目;數(shù)據(jù)集SHS 是在SHL 中篩選出的200 個(gè)最小項(xiàng)目;數(shù)據(jù)集MV 是從Maven 中央倉庫中提取的1 600 個(gè)JAR 項(xiàng)目,且不同版本的同一JAR 項(xiàng)目只保留其中一個(gè)版本.

基于原始數(shù)據(jù)集,首先解析項(xiàng)目源碼庫構(gòu)建元數(shù)據(jù)集,并從中構(gòu)建AHCG 模型,提取初始特征.表1詳細(xì)統(tǒng)計(jì)了上述3 個(gè)數(shù)據(jù)集的相關(guān)信息,包括用于上下文模型輸入的項(xiàng)目特征和方法特征.其中項(xiàng)目特征指每個(gè)項(xiàng)目中API 的TF-IDF 特征,由于每個(gè)項(xiàng)目的API 不同,本文統(tǒng)計(jì)了每個(gè)項(xiàng)目平均調(diào)用的API數(shù)作為該數(shù)據(jù)集的平均項(xiàng)目特征數(shù).方法特征采用文獻(xiàn)[15]的方法,利用駝峰式拆分法將方法名稱和API 名稱拆分為單詞序列并作為節(jié)點(diǎn)的文本屬性,這些單詞在相同的向量空間中進(jìn)行編碼和對(duì)齊,方法節(jié)點(diǎn)的特征維度與單詞數(shù)有關(guān),因此統(tǒng)計(jì)數(shù)據(jù)集中不同單詞數(shù)作為方法特征數(shù).

Table 1 Meta Datasets Statistics for Experiments表1 實(shí)驗(yàn)元數(shù)據(jù)集統(tǒng)計(jì)數(shù)據(jù)

4.2 實(shí)驗(yàn)設(shè)置

為了評(píng)價(jià)本文方法的有效性并與其他方法形成對(duì)比,遵循前人的研究方法對(duì)實(shí)驗(yàn)進(jìn)行離線評(píng)估.實(shí)驗(yàn)將軟件項(xiàng)目中的部分代碼抽取出來,從而模擬開發(fā)者編程現(xiàn)場及API 上下文的使用情況.具體規(guī)則是:將項(xiàng)目節(jié)點(diǎn)P下的方法節(jié)點(diǎn)U按照編號(hào)順序排成數(shù)組,然后按照不同比例劃分為訓(xùn)練集和測試集.測試集中每個(gè)方法節(jié)點(diǎn)下的API 節(jié)點(diǎn)按照編號(hào)順序排成數(shù)組,然后保留前4 個(gè)API 節(jié)點(diǎn)來模擬開發(fā)者已完成的代碼,剩余的API 節(jié)點(diǎn)作為該測試方法的標(biāo)準(zhǔn)數(shù)據(jù),用以驗(yàn)證在當(dāng)前開發(fā)情景下的推薦性能.本文使用10 折交叉驗(yàn)證法,將數(shù)據(jù)集劃分成10 份.每一份進(jìn)行1 輪訓(xùn)練與驗(yàn)證,并且每一輪驗(yàn)證的時(shí)候,將其中9 份數(shù)據(jù)作為訓(xùn)練集,1 份作為測試集.最后取這10 輪測試結(jié)果的平均值作為該數(shù)據(jù)集的最終實(shí)驗(yàn)結(jié)果.

4.3 評(píng)價(jià)指標(biāo)

API 使用模式推薦場景中,一般通過Top-N的API排名情況評(píng)價(jià)推薦結(jié)果的有效性.本文使用成功率(S@k),精確度(P@k),召回率(R@k)和平均精度(MAP)來評(píng)價(jià)方法在Top-N上的推薦性能.給定測試集合M,其中的測試項(xiàng)表示方法節(jié)點(diǎn),用來模擬當(dāng)開發(fā)者遇到API 使用問題時(shí),給該方法節(jié)點(diǎn)對(duì)應(yīng)的方法聲明提供API 使用建議,推薦列表中將包含開發(fā)者接下來可能調(diào)用的API.設(shè)RECk(q)表示本文CAPIRD模型在一個(gè)測試項(xiàng)q中輸出Top-N的API 推薦結(jié)果集合,GT(q)表示一個(gè)測試項(xiàng)q的標(biāo)準(zhǔn)API 集合.

S@k反映測試集預(yù)測成功的比例.

其中count表示滿足條件的測試項(xiàng)數(shù)量.

P@k反映在推薦列表中有效API 的占有比例.

R@k反映推薦列表中有效API 的數(shù)量在標(biāo)準(zhǔn)列表中的比例.

MAP的計(jì)算公式為

4.4 基線方法

為了更好地評(píng)價(jià)本文方法,設(shè)計(jì)了2 個(gè)對(duì)比實(shí)驗(yàn),分別與相同場景下的2 個(gè)基線方法進(jìn)行比較.

1)FOCUS.FOCUS 發(fā)表于2019 年,是近3 年高被引用的方法.FOCUS 基于項(xiàng)目上下文,使用協(xié)同過濾技術(shù)挖掘并推薦API 使用模式.它將方法聲明視為用戶,將API 調(diào)用視為物品.因此,F(xiàn)OCUS 能夠推薦相似項(xiàng)目中類似的API 使用模式,從而縮小搜索范圍,減少冗余.

2)GAPI.GAPI 發(fā)表于2021 年,是目前公開文獻(xiàn)中在相同實(shí)驗(yàn)數(shù)據(jù)集下實(shí)驗(yàn)效果最好的方法.GAPI是一種基于方法上下文和GNN 技術(shù)的API 使用模式推薦方法.它利用項(xiàng)目中方法與API 的交互關(guān)系,融合API 文本屬性,從拓?fù)渚W(wǎng)絡(luò)上學(xué)習(xí)API 的Embedding 表示,從而給相似的方法推薦相似的API使用模式.

4.5 實(shí)驗(yàn)結(jié)果分析

從推薦性能和多樣性表現(xiàn)2 個(gè)方面進(jìn)行實(shí)驗(yàn)設(shè)計(jì),針對(duì)提出的2 個(gè)研究問題,依次進(jìn)行實(shí)驗(yàn)驗(yàn)證與分析.

問題1:本文CAPIRD 模型在API 推薦性能上表現(xiàn)如何.

為了檢驗(yàn)CAPIRD 在API 推薦上的效果,本文在3 個(gè)數(shù)據(jù)集上分別比較Top-N推薦結(jié)果在不同指標(biāo)上的性能表現(xiàn).實(shí)驗(yàn)前,對(duì)比實(shí)驗(yàn)設(shè)置了相同的實(shí)驗(yàn)環(huán)境;實(shí)驗(yàn)時(shí),針對(duì)不同類型上下文的基線方法FOCUS 和GAPI,在CAPIRD 相關(guān)性分析中實(shí)現(xiàn)不同類型基線方法的相關(guān)性計(jì)算,計(jì)算結(jié)果作為基線各自的相關(guān)性分析結(jié)果,并將該結(jié)果作為后續(xù)重排模塊的參數(shù)優(yōu)化基準(zhǔn).然后再融合CAPIRD 方法的關(guān)聯(lián)性推薦和重排推薦,最終將推薦結(jié)果分別記為CAPIRD-FOCUS 和CAPIRD-GAPI.根據(jù)最終結(jié)果驗(yàn)證CAPIRD 融合基線方法在API 多樣性推薦上的有效性.在3 個(gè)數(shù)據(jù)集上S@k和MAP的實(shí)驗(yàn)結(jié)果分別如表2~4 所示.

Table 2 Comparison Result of S@k and MAP on SHS Data Set表2 SHS 數(shù)據(jù)集上S@k 和MAP 對(duì)比結(jié)果

Table 3 Comparison Results of S@k and MAP on SHL Data Set表3 SHL 數(shù)據(jù)集上S@k 和MAP 對(duì)比結(jié)果

Table 4 Comparison Results of S@k and MAP on MV Data Set表4 MV 數(shù)據(jù)集上S@k 和MAP 對(duì)比結(jié)果

由表2~4 結(jié)果中的MAP指標(biāo)可以看出,CAPIRD 在MAP的表現(xiàn)明顯優(yōu)于基線方法.尤其是在SHS 數(shù)據(jù)集上,在GAPI 方法的基礎(chǔ)上融合本文方法后,MAP由0.292 4 提升至0.370 9,其推薦的平均精度提升約27%,在S@1 上由0.377 提升至0.577,提升了約53%.而在數(shù)據(jù)集MV 上相對(duì)來說并不太顯著,尤其是在以圖學(xué)習(xí)模型為基礎(chǔ)的GAPI 上MAP及S@k 上提升相對(duì)較小.這是因?yàn)殡S著數(shù)據(jù)量的增加,圖學(xué)習(xí)機(jī)制作用顯著,能夠捕捉更多高階協(xié)同信號(hào),使得API 推薦的多樣性也增加.而融合本文方法依然有小幅度提升,說明CAPIRD 依然能夠在保持原有多樣性推薦結(jié)果的基礎(chǔ)上,通過增加候選結(jié)果的差異性,使得推薦性能較原推薦性能有所提升.在以傳統(tǒng)協(xié)同過濾算法為基礎(chǔ)的FOCUS 上融合CAPIRD 后的MAP提升在3%~15%,在大數(shù)據(jù)集上相對(duì)穩(wěn)定.因此,在3 類不同的數(shù)據(jù)集上,本文CAPIRD 模型在MAP指標(biāo)上都得到了有效提升.

在實(shí)際的開發(fā)場景中,假設(shè)開發(fā)人員遇到API使用問題,當(dāng)系統(tǒng)為其提供合適的API 推薦列表時(shí),那么開發(fā)人員更希望列表中靠前的API 是對(duì)其有幫助的.為了體現(xiàn)CAPIRD 模型在這種場景中的推薦性能優(yōu)勢,需要分析S@1 和S@5,同時(shí)結(jié)合S@20 的成功率和MAP,分析模型的有效性.

由表2~4 所示,CAPIRD 模型在S@1 和S@5 相比S@20 具有顯著效果.在S@1 上,CAPIRD 模型在所有數(shù)據(jù)集上平均提升約13%,說明第1 個(gè)推薦的API 與上下文最相關(guān)且又能夠區(qū)別于其他已使用的API,因此也更可能是開發(fā)者在當(dāng)前編程場景下想使用的API.S@5 在所有數(shù)據(jù)集上平均提升約6%,其中CAPIRD 在SHS 數(shù)據(jù)集和基線方法GAPI 比,S@5 由0.692 提升到0.813,提升約17.5%.

在S@20 上,所有數(shù)據(jù)集相差不大,平均提升僅約2%,說明在Top-20 推薦列表中,CAPIRD 模型推薦的API 與基線方法推薦的API 差異不大,而結(jié)合CAPIRD 改變了原有推薦結(jié)果的排序,在所有數(shù)據(jù)集的MAP指標(biāo)上平均提升約9%.說明Top-20 推薦列表中有效API 的排名得到提升,達(dá)到本文多樣性重排推薦的預(yù)期.因此,CAPIRD 模型在API 使用模式推薦場景中能夠有效提高S@k,同時(shí)提高有效API在推薦列表中的排名.

問題2:CAPIRD 模型中決定相關(guān)性和關(guān)聯(lián)性推薦所占比重的參數(shù)對(duì)結(jié)果的影響如何.

在API 多樣性重排模塊,本文利用MMR 算法將相關(guān)性和關(guān)聯(lián)性進(jìn)行線性組合.以方法CAPIRD-FOCUS為例,當(dāng)參數(shù)λ=1時(shí),方法CAPIRD-FOCUS 與基線方法FOCUS 的結(jié)果是一樣的,因?yàn)榇藭r(shí)關(guān)聯(lián)性度量的權(quán)重為0.實(shí)驗(yàn)通過調(diào)整參數(shù) λ,使得關(guān)聯(lián)度的權(quán)重發(fā)生變化,觀察在不同參數(shù) λ下模型的表現(xiàn)能力.采用等間距的控制重排采樣樣本調(diào)節(jié)參數(shù) λ,觀察MAP在不同參數(shù) λ下的影響.MAP在不同數(shù)據(jù)集上的變化趨勢如圖5~7 所示.

Fig.5 The changes of MAP on SHS data set圖5 MAP 在SHS 數(shù)據(jù)集上的變化

Fig.6 The changes of MAP on SHL data set圖6 MAP 在SHL 數(shù)據(jù)集上的變化

Fig.7 The changes of MAP on MV data set圖7 MAP 在MV 數(shù)據(jù)集上的變化

圖5~7 中,橫軸表示參數(shù) λ的取值,縱軸表示該數(shù)據(jù)集上的MAP.實(shí)線表示基線方法,由于不需要進(jìn)行重排,因此基線的曲線不發(fā)生變化.虛線表示增加重排后的結(jié)果,在3 個(gè)不同數(shù)據(jù)集上其對(duì)應(yīng)曲線都發(fā)生了變化.

圖5~7 中,虛線對(duì)應(yīng)曲線整體上都表現(xiàn)出了類似的變化趨勢,即隨著 λ的增大,對(duì)應(yīng)的MAP值整體呈現(xiàn)先增后減的趨勢.虛線對(duì)應(yīng)曲線位于實(shí)線對(duì)應(yīng)曲線上方的部分表示增加重排后的MAP優(yōu)于基線方法的MAP.由圖5~7 中的6 個(gè)曲線圖可以看出,MAP在這個(gè)部分能夠達(dá)到某個(gè)峰值,該峰值對(duì)應(yīng)λ的值為該樣本空間內(nèi)的最佳參數(shù).例如在圖5(b)的曲線圖中,λ取值在0.7~0.8 之間時(shí),MAP的值達(dá)到峰值.說明 λ在該區(qū)間內(nèi),關(guān)聯(lián)性的度量發(fā)揮了最大作用.

當(dāng) λ發(fā)生變化即關(guān)聯(lián)性的權(quán)重發(fā)生變化,MAP也發(fā)生變化,說明推薦列表中候選API 的排名也發(fā)生了變化.進(jìn)一步觀察3 類數(shù)據(jù)集最佳參數(shù)的取值,發(fā)現(xiàn)隨著測試集數(shù)據(jù)量的增加,達(dá)到最佳參數(shù)的取值越接近1,說明數(shù)據(jù)量越大,要達(dá)到MAP最優(yōu)時(shí)的關(guān)聯(lián)性權(quán)重越小.這是由于數(shù)據(jù)量變大時(shí),API 之間關(guān)聯(lián)性的差異性變小,使得MAP提升的表現(xiàn)并不明顯,但是推薦結(jié)果仍發(fā)生變化.

綜合以上分析,本文提出的CAPIRD 模型,能夠通過關(guān)聯(lián)性分析增加候選API 的多樣性,同時(shí)也能夠保證推薦結(jié)果的有效性,提高推薦性能.

5 結(jié)論

本文為了提高API 推薦性能,提出了基于上下文感知并面向多樣性的API 推薦方法CAPIRD.CAPIRD 是一種結(jié)合上下文相關(guān)性和API 關(guān)聯(lián)性的推薦方法.通過相關(guān)性分析,發(fā)現(xiàn)上下文相關(guān)API,然后度量相關(guān)性值;通過關(guān)聯(lián)性分析,挖掘API 的關(guān)聯(lián)模式,發(fā)現(xiàn)與目標(biāo)API 關(guān)聯(lián)的其他API,然后度量關(guān)聯(lián)性值;最后利用MMR 算法線性組合相關(guān)性和關(guān)聯(lián)性,協(xié)調(diào)純相關(guān)API 與純關(guān)聯(lián)API 的比重,增加候選API 中的差異性,提高推薦性能.

采用3 個(gè)數(shù)據(jù)集進(jìn)行驗(yàn)證實(shí)驗(yàn),在與2 個(gè)基線方法的對(duì)比實(shí)驗(yàn)中,CAPIRD 在MAP,S@1,S@5 都有提升,其中在MAP的平均提升率約為9%,S@1 的平均提升率約13%.實(shí)驗(yàn)結(jié)果充分表明,CAPIRD 在API使用模式推薦場景中具有更好的表現(xiàn).

CAPIRD 利用的上下文信息有限,如何更充分地利用上下文信息來推斷開發(fā)者的編程意圖,是未來工作需要探索和思考的.

作者貢獻(xiàn)聲明:賴寶強(qiáng)負(fù)責(zé)論文方法的設(shè)計(jì)與實(shí)現(xiàn),并撰寫論文;李征負(fù)責(zé)論文整體結(jié)構(gòu)的審核;趙瑞蓮負(fù)責(zé)論文的指導(dǎo)與校對(duì);郭俊霞提供方法和實(shí)驗(yàn)指導(dǎo),并修改和審核論文.

猜你喜歡
子圖關(guān)聯(lián)性調(diào)用
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
臨界完全圖Ramsey數(shù)
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
四物湯有效成分的關(guān)聯(lián)性分析
中成藥(2017年3期)2017-05-17 06:09:05
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
如何準(zhǔn)確認(rèn)定排污行為和環(huán)境損害之間的關(guān)聯(lián)性
基于頻繁子圖挖掘的數(shù)據(jù)服務(wù)Mashup推薦
CRP檢測與新生兒感染的關(guān)聯(lián)性
不含2K1+K2和C4作為導(dǎo)出子圖的圖的色數(shù)
關(guān)于矩陣的關(guān)聯(lián)性
修水县| 屏山县| 凉城县| 秦皇岛市| 拉孜县| 康乐县| 安平县| 故城县| 新田县| 雅江县| 蓬溪县| 高平市| 南木林县| 莱州市| 肇东市| 应城市| 尼木县| 博野县| 杭锦旗| 莫力| 河北区| 永年县| 岚皋县| 二连浩特市| 余庆县| 高要市| 梨树县| 湖口县| 五家渠市| 正宁县| 合水县| 开原市| 阿克苏市| 鄂伦春自治旗| 西吉县| 湘潭县| 闻喜县| 遂平县| 乐昌市| 平潭县| 会东县|