999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于用戶反饋的API推薦工具①

2021-09-10 07:32:06楊忻瑩
關(guān)鍵詞:排序用戶信息

楊忻瑩,周 宇,2

1(南京航空航天大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,南京 211106)

2(南京航空航天大學(xué) 高安全系統(tǒng)的軟件開發(fā)與驗證技術(shù)工信部重點實驗室,南京 211106)

在軟件開發(fā)過程中,應(yīng)用程序接口(API) 發(fā)揮了重要作用[1],開發(fā)人員可以使用API 更有效地執(zhí)行編程任務(wù).但是由于API的數(shù)量龐大,開發(fā)者不可能熟悉所有的API,也不可能始終為特定的開發(fā)任務(wù)選擇合適的API.當(dāng)遇到不熟悉的編程任務(wù)時,開發(fā)者往往會通過上網(wǎng)搜索相關(guān)功能的案例進(jìn)行代碼復(fù)用,或者搜索相關(guān)的API 文檔,學(xué)習(xí)相關(guān)API的使用方法.能夠針對程序員的需求進(jìn)行合理的API 接口推薦便成為了提高軟件開發(fā)效率的重要途徑之一.為了解決這個問題,國內(nèi)外大量科研人員已在API 接口推薦領(lǐng)域展開了一系列研究工作,并實現(xiàn)了許多API 推薦方法,以減輕開發(fā)人員理解和搜索API的負(fù)擔(dān).

Thung 等通過將歷史特征請求與API 文檔信息相結(jié)合的方式,進(jìn)行API 方法推薦[2].BIKER[3]獲取Stack Overflow 問答網(wǎng)站上的問答信息和JDK的API 文檔信息[4],根據(jù)帖子問題與用戶查詢的相似性推薦API.

這些方法往往基于信息檢索技術(shù)以及自然語言處理相關(guān)技術(shù)提取關(guān)鍵字,來縮小目標(biāo)API的搜索范圍、加快推薦效率.然而他們大多均未考慮用戶交互信息(例如用戶從推薦列表中選擇API),這些信息通常被認(rèn)為能夠大大提高API 推薦性能.

針對這一不足之處,有少數(shù)工作利用了用戶反饋信息.例如,NLP2API[5]利用來自Stack Overflow 網(wǎng)站的問答對來模擬偽用戶交互,從而重新制定查詢語句,實際上并沒有進(jìn)行真正的用戶交互.Wang 等[6]將反饋納入到代碼搜索過程中,提出了一種主動代碼搜索方法,盡管他們的工作利用了反饋信息,但需要用戶明確的對推薦結(jié)果中的每一條信息進(jìn)行相關(guān)性評分,開銷太大.這部分工作雖然將反饋信息從傳統(tǒng)的推薦系統(tǒng)領(lǐng)域引入到代碼推薦領(lǐng)域,但仍有改進(jìn)的空間.

因此,在現(xiàn)有的API 推薦工作上,本文提出一個新穎的API 推薦工具.

首先,記錄用戶使用本工具時產(chǎn)生的真實交互信息(即用戶輸入的查詢語句和用戶從推薦列表中選擇的API),將其作為用戶反饋數(shù)據(jù),即反饋信息,并構(gòu)建反饋庫,將反饋數(shù)據(jù)以<用戶查詢,API>對的形式存入其中.故用戶在使用時不需要主動提供額外信息(如評分),可減輕用戶負(fù)擔(dān).

其次,引入排序?qū)W習(xí)和主動學(xué)習(xí)技術(shù)以提升API推薦性能.通過將API 視為文檔,本工作將排序?qū)W習(xí)技術(shù)應(yīng)用至API 推薦領(lǐng)域中,利用用戶反饋等數(shù)據(jù)構(gòu)建特征向量,訓(xùn)練排序?qū)W習(xí)模型,將用戶反饋有效的融入到API 推薦中,以提高API 推薦結(jié)果的準(zhǔn)確性;為了緩解“冷啟動”問題、加速反饋數(shù)據(jù)的學(xué)習(xí)過程,本工作采用了主動學(xué)習(xí),通過收集Stack Overflow的問答信息,構(gòu)造問答數(shù)據(jù)對,用于輔助訓(xùn)練主動學(xué)習(xí)模型,從而保證即使在反饋數(shù)據(jù)十分稀缺時,仍能實現(xiàn)良好的推薦效果.

最后,為了實現(xiàn)更好的擴(kuò)展性,可利用第三方API 推薦方法作為組件,根據(jù)用戶需求,靈活地嵌套到其他的API 推薦方法之上.

本工具以插件的形式集成到了VS Code IDE中,向用戶提供API 推薦,這將會對API 推薦系統(tǒng)產(chǎn)生積極影響.值得強(qiáng)調(diào)的是,盡管本工作目前專注于Java,但是我們希望可以將其應(yīng)用于其他編程語言的API.本工作不僅提出了一種推薦方法,而且提高了API 推薦性能.本文著重介紹了本工作的工具實現(xiàn),讀者可參考原始論文[7]以獲得更多詳細(xì)信息.

為了評估所提出方法的有效性,本文實驗選擇了最先進(jìn)的API 推薦方法BIKER[3]作為對比,利用Hit@k/Top-k,MAP,MRR 作為評估指標(biāo).實驗結(jié)果表明,對比BIKER,本工具API 推薦的Hit@1 準(zhǔn)確率相對提升了18.2%,高達(dá)51.8%.

1 方法實現(xiàn)

工作流程如下,首先從JDK 8 官方文檔中提取用于描述API 類和方法的總結(jié)句,作為API 文檔,再利用現(xiàn)有API 推薦方法,對用戶輸入的自然語言查詢語句進(jìn)行推薦,得到初始API 推薦列表.通過語義相似度計算模型(1.1 節(jié))進(jìn)行相似度計算,對API 推薦列表中的API 構(gòu)建特征向量(1.2 節(jié)),利用訓(xùn)練好的排序?qū)W習(xí)和主動學(xué)習(xí)模型(1.3 節(jié)),對初始API 推薦列表進(jìn)行重新排序,并向用戶呈現(xiàn)重排序的API 推薦列表(1.4 節(jié)).此外,可將用戶從列表中選擇的最合適的API,與本條查詢語句一起形成反饋數(shù)據(jù),存入反饋庫中(1.5 節(jié)),再根據(jù)反饋數(shù)據(jù)對推薦結(jié)果進(jìn)行優(yōu)先級調(diào)整,使得用戶選擇的推薦項位于推薦結(jié)果列表中更加靠前的位置,從而提高API 推薦準(zhǔn)確率.本工作的具體實現(xiàn)細(xì)節(jié)可以在文獻(xiàn)[7]中找到,在此不做贅述.本工具的整體架構(gòu)如圖1所示.

圖1 方法整體架構(gòu)

1.1 語義相似度計算模型構(gòu)建

本模塊構(gòu)建一個語義相似度計算模型,為特征提取模塊提供相似度計算方法.首先從Stack Overflow[8]問答網(wǎng)站上下載歷史問答信息[9],問答信息以.xml 格式文件保存.由于本工具是針對Java 相關(guān)的API 推薦,因此只提取帶有Java 標(biāo)記的帖子信息.隨后利用NLTK[10]對帖子信息進(jìn)行傳統(tǒng)的文本預(yù)處理操作,包括標(biāo)記和詞干分析.接著使用Word2Vec[11]對詞嵌入模型進(jìn)行訓(xùn)練,并計算預(yù)處理后語料庫中每個單詞的IDF (逆文檔頻率),從而構(gòu)建一個IDF 逆文檔頻率表作為詞嵌入模型的權(quán)重項.利用訓(xùn)練得到Word2Vec 模型和IDF 逆文檔頻率表文檔,構(gòu)建語義相似度計算模型[12].

1.2 特征提取

特征提取模塊主要任務(wù)是根據(jù)構(gòu)建的語義相似度計算模型,進(jìn)行相似度計算,并構(gòu)建特征向量,構(gòu)造完成的特征向量可作為訓(xùn)練模型或預(yù)測模型的輸入數(shù)據(jù).

在接收到查詢語句、初始API 推薦列表之后,結(jié)合反饋庫數(shù)據(jù),為初始API 推薦列表中每個API 提取一個特征向量,特征向量包括兩個部分,相關(guān)信息特征和反饋特征.相關(guān)信息特征可從API 文檔中獲取,由API 路徑功能和API 描述功能組成,分別表示推薦的API與用戶查詢和相關(guān)文檔描述的相關(guān)性;反饋特征可從反饋庫中提取,代表與反饋庫中API的相關(guān)性.

1.3 排序?qū)W習(xí)和主動學(xué)習(xí)模型訓(xùn)練

本模塊用于訓(xùn)練排序?qū)W習(xí)和主動學(xué)習(xí)模型,為API 重排序模塊提供模型支撐.通過1.2 節(jié)中特征提取過程,對反饋庫中的每條反饋數(shù)據(jù)提取特征向量,以構(gòu)建訓(xùn)練集.

通過將特征向量輸入到排序?qū)W習(xí)模型,最終得到訓(xùn)練良好的排序?qū)W習(xí)模型.

訓(xùn)練主動學(xué)習(xí)模型之前,先利用來自Stack Overflow的問答信息構(gòu)造<查詢,API>問答數(shù)據(jù)對,其中查詢與問題相對應(yīng),API與接受的答案中的API 相對應(yīng).這些問答數(shù)據(jù)對可對主動學(xué)習(xí)模型選取的樣本提供標(biāo)注,將其放入訓(xùn)練集中再次訓(xùn)練模型.通過迭代此過程,可以獲得訓(xùn)練好的主動學(xué)習(xí)模型.

1.4 API 重排序推薦

本模塊的目的是根據(jù)訓(xùn)練好的模型,得到用戶輸入查詢對應(yīng)的重排序API 推薦列表,供用戶選擇.對于用戶輸入查詢語句,首先通過1.2 節(jié)得到其對應(yīng)的API 特征向量,將其分別輸入到訓(xùn)練好的排序?qū)W習(xí)和主動學(xué)習(xí)模塊中,得到各個模塊的預(yù)測值,計算出API 推薦列表中每個API的分?jǐn)?shù).列表中的API 排名位置根據(jù)分?jǐn)?shù)降序排列,得到重排序API 推薦列表,供用戶進(jìn)行選擇,使得用戶選擇的API 在列表中位于更加靠前的位置.API 綜合得分的計算公式如下:

其中,S coreQ(i)表示第i個API 在初始API 列表中的排序?qū)W習(xí)預(yù)測值,ALrelevQ(i) 表示列表中第i個API的排序?qū)W習(xí)預(yù)測值.S coremax和S coremin分別為排序分?jǐn)?shù)的最大值和最小值,用于進(jìn)行歸一化處理.相關(guān)性得分的權(quán)重是一個動態(tài)值,它依賴于第i個API 在列表中所處的位置,即posi.

1.5 用戶反饋

用戶反饋模塊負(fù)責(zé)更新反饋庫.用戶從重排序API 推薦列表中,根據(jù)自身需求,選擇API,將查詢語句和用戶所選API 作為反饋數(shù)據(jù),存入反饋庫,為后續(xù)推薦提供反饋信息.

2 工具實現(xiàn)

本工具以插件的形式集成到VS Code IDE中,采用客戶端/服務(wù)器架構(gòu).服務(wù)器端對VS Code 獲取的用戶輸入數(shù)據(jù)進(jìn)行處理,返回數(shù)據(jù)處理結(jié)果,并通過客戶端將結(jié)果展示給用戶.

為方便用戶在編程過程中快速查詢所遇到的問題,本工具直接內(nèi)嵌在VS Code IDE中,不涉及另外的系統(tǒng)界面.用戶可以在源碼編程面板任意位置點擊右鍵,或者使用快捷鍵喚醒.

根據(jù)用戶交互信息,本工具為用戶提供了個性化的API 推薦列表,實現(xiàn)了API 個性化推薦功能.系統(tǒng)架構(gòu)主要分為兩個模塊:用戶輸入查詢模塊和API 推薦反饋模塊.

2.1 用戶輸入查詢模塊

用戶輸入查詢模塊的整體流程如圖2所示,該模塊的目的是提供一個接口,以獲取用戶輸入的自然語言查詢語句,傳遞給后臺服務(wù)器進(jìn)行API 推薦的后續(xù)處理工作.

圖2 用戶輸入查詢流程

具體來說,當(dāng)用戶在編程環(huán)境中,想要獲取API 推薦,可以通過圖2中的操作(a)、(b)或(c)打開文本輸入框(d)以進(jìn)行自然語言查詢輸入.客戶端從文本輸入框中獲得查詢語句,傳給服務(wù)器端進(jìn)行處理,再將得到的推薦結(jié)果返回給用戶,即API 推薦列表頁面(圖3).

圖3 API 推薦列表頁面

2.2 API 推薦反饋模塊

服務(wù)器獲取自然語言查詢語句后,會返回相關(guān)的API,客戶端為用戶展示如圖3所示的API 推薦列表頁面.用戶可在該頁面上進(jìn)行API 選擇,客戶端將查詢語句連同用戶選擇的API 視為反饋數(shù)據(jù)傳遞給服務(wù)器.服務(wù)器將其放入反饋庫,用以優(yōu)化模型.

2.2.1 API 推薦

服務(wù)器將與查詢語句最相關(guān)的前30 個API 返回給客戶端,客戶端以每頁10 個API的方式分頁展示,用戶可以通過圖3中操作(g)切換頁面,以瀏覽更多的API.本工具不僅為列表中每個API 提供API 方法名(e),還提供對應(yīng)的描述語句(f),為用戶選擇反饋提供參考依據(jù).

2.2.2 用戶反饋

用戶可以選中一個API(h),此時會彈出一個對話框,向用戶確認(rèn)是否將該API 作為反饋信息存入反饋庫中.

若用戶選擇“是”,則該API與本次輸入的自然語言查詢語句一起構(gòu)成反饋數(shù)據(jù),存入反饋庫,為下一次用戶查詢提供更加個性化的推薦;若用戶選擇“否”,則會返回至API 推薦列表界面.

3 應(yīng)用場景

本章通過示例來說明本工具如何提升API 推薦性能.在通常情況下,API 方法名和文檔描述信息有助于用戶了解API的用途.對于諸如:How to convert int to string的查詢語句,用戶在瀏覽API 方法名時可以快速找到正確的答案:java.lang.Integer.toString.但是,在許多情況下,僅通過API 方法名來判斷該API是否有用是很困難的.例如,給定查詢:Make a negative number positive,其對應(yīng)的答案:java.lang.Math.abs 在語義上與查詢語句沒有重疊,但借助文檔描述信息(即:返回參數(shù)的絕對值),可以很容易判斷該API是正確答案.

當(dāng)用戶了解API的用法之后,可以選擇他認(rèn)為合適的答案,放入反饋庫中保存,這些反饋信息對于后續(xù)的推薦有顯著幫助.例如,對于查詢語句:killing a running thread in java,在反饋庫中沒有相關(guān)查詢語句的情況下,根據(jù)API 方法名和描述信息,用戶能很快確定排名第7的API:java.lang.Thread.interrupt是正確答案,并對其進(jìn)行選擇,放入反饋庫中存儲.當(dāng)用戶之后再次查詢類似的語句,例如:how to stop a thread,通過檢索反饋庫數(shù)據(jù),本工具能將原本排在第8 位的:java.lang.Thread.interrupt 提升到第1 位.使得用戶瀏覽API 推薦結(jié)果時,能迅速找到正確答案,極大提升了API 推薦效率.

4 實驗評估

為了驗證方法的有效性,本文使用目前最先進(jìn)的API 推薦方法之一的BIKER[3]作為對比實驗.BIKER和現(xiàn)有的大多數(shù)API 推薦方法一樣,僅利用了語義相似度技術(shù),根據(jù)文本相似度分?jǐn)?shù)向用戶推薦API.而本文提出了一種基于用戶反饋的API 推薦工具,將用戶反饋融入到API 推薦過程中,并且采用了排序?qū)W習(xí)和主動學(xué)習(xí)技術(shù),通過語義相似度構(gòu)建特征向量,訓(xùn)練模型進(jìn)行預(yù)測,根據(jù)模型預(yù)測綜合得分,為用戶提供個性化的API 推薦.

為了確保與對比實驗進(jìn)行公平的比較,本文實驗的數(shù)據(jù)集復(fù)用BIKER 發(fā)布的數(shù)據(jù)集,即來自Stack Overflow 上與Java API 相關(guān)的413 個問答對.為了評估實驗性能,實驗設(shè)置遵循標(biāo)準(zhǔn)的10 折交叉驗證,即將數(shù)據(jù)集隨機(jī)分割為9:1,每次使用1 折作為測試數(shù)據(jù),其余9 折用于模型訓(xùn)練.重復(fù)實驗5 次,將結(jié)果記錄下來,并計算平均值作為最終結(jié)果.為了避免偏差,反饋庫與測試集中不存在相同的查詢語句.讀者可以查看之前的工作[7],以獲取有關(guān)實驗結(jié)果的更多詳細(xì)信息.

4.1 增加反饋數(shù)據(jù)量

通過從訓(xùn)練集中隨機(jī)選擇問答對,來構(gòu)建反饋庫.反饋庫的大小從訓(xùn)練集的10%到100%不等,且增幅為10%.實驗結(jié)果如表1所示,結(jié)果表明,在可接受的開銷條件下,與BIKER 相比,隨著反饋數(shù)據(jù)的增加,本工具的推薦性能穩(wěn)步提升,Hit@1 準(zhǔn)確率最高提升了18.2%,MAP和MRR 提升了12%左右,Hit@5 突破了80%.實驗結(jié)果驗證了反饋信息有助于提升API 推薦性能.

表1 增加反饋數(shù)據(jù)量對工具的影響

4.2 有效性分析

為了評估實驗結(jié)果的意義,本節(jié)對得到的結(jié)果進(jìn)行了統(tǒng)計分析.根據(jù)Mann-Whitney U 檢驗[13],可從統(tǒng)計意義上判定實驗是否有顯著的改善.此外,通過Vargha和Delaneys的測量(一種標(biāo)準(zhǔn)化的非參數(shù)效應(yīng)量測量) 來評估分析效應(yīng)量的改進(jìn)程度.一般來說,對于A和B兩種算法,如果為0.5,則認(rèn)為這兩種算法是等價的.如果大于0.5,則算法A 優(yōu)于算法B.通過以下統(tǒng)計量計算:

其中,R1是第一個數(shù)據(jù)組的秩和,m和n分別是第一個和第二個數(shù)據(jù)樣本中的觀察次數(shù).在本文實驗中,運行了相同次數(shù)的兩種算法,即m和n的值都設(shè)置為5.

結(jié)果表明,大多數(shù)p值在0.003 到0.005 范圍內(nèi),效應(yīng)量為1,表明在96%的置信度上,該提升具有統(tǒng)計學(xué)意義.在50 個案例中有2 個案例(反饋數(shù)據(jù)量為10%時的Hit@3和Hit@5),其中p值大于0.005(即,應(yīng)否定原假設(shè)).

4.3 模擬用戶反饋場景

本節(jié)設(shè)計了一個偽用戶來模擬真實場景下的用戶推薦及反饋過程.實驗隨機(jī)選擇50 個查詢,將其作為偽用戶在編程環(huán)境中輸入的查詢語句,依次進(jìn)行自然語言查詢.在每次查詢期間,本工具都會根據(jù)反饋庫信息推薦API,而偽用戶則會從推薦結(jié)果中選擇API.查詢語句和選擇的API 用于擴(kuò)展反饋庫.實驗結(jié)果如表2所示,通過記錄每次用戶查詢的評價指標(biāo),可計算出評價指標(biāo)的平均值(表2Avg.Tool),通過計算本文方法與對比方法的絕對提升值和相對提升值(表2Abs.Imp.和Rel.Imp.),可以更清晰的看出本工作相對于對比實驗的優(yōu)越性.

表2 模擬用戶反饋場景

5 結(jié)論與展望

本文提出了一種新的工具來提升API 推薦方法的性能,并將其以插件的形式集成到VS Code IDE中.在用戶編程環(huán)境中,通過獲取用戶輸入的自然語言查詢語句,推薦相關(guān)API.受傳統(tǒng)推薦系統(tǒng)中的用戶反饋信息的啟發(fā),本工作通過不斷收集用戶對于API 推薦列表的反饋,提高推薦準(zhǔn)確率.實驗表明,本工具的推薦性能優(yōu)于對比實驗,隨著反饋信息數(shù)量的增加,API 推薦的有效性也顯著提升.未來的工作計劃是擴(kuò)展工具以支持更多的編程語言.此外,本文中提出的方法實際上具有更廣泛的適用性,因此計劃將其擴(kuò)展到軟件工程中的其他推薦場景.

猜你喜歡
排序用戶信息
排序不等式
恐怖排序
節(jié)日排序
刻舟求劍
兒童繪本(2018年5期)2018-04-12 16:45:32
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
如何獲取一億海外用戶
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
主站蜘蛛池模板: 四虎永久在线精品国产免费| 久久亚洲高清国产| 视频一区视频二区中文精品| 直接黄91麻豆网站| 爆操波多野结衣| 人人爽人人爽人人片| 萌白酱国产一区二区| 久无码久无码av无码| 亚洲国产91人成在线| 亚洲成人免费看| 99热在线只有精品| 久久国产精品国产自线拍| 亚洲一级毛片| 婷婷亚洲天堂| www精品久久| 亚洲无码91视频| 五月六月伊人狠狠丁香网| 99热国产这里只有精品9九| 久久黄色一级视频| 国产精品黄色片| 亚洲国产亚综合在线区| 88av在线| 国产凹凸视频在线观看| 国产成人做受免费视频| 精品久久高清| 久久青草精品一区二区三区| 国产精品第三页在线看| 久久国产精品夜色| 国产成人精品一区二区免费看京| 欧美成人怡春院在线激情| 国产精品性| 亚洲福利一区二区三区| 成人在线不卡视频| 国产欧美视频在线观看| 国禁国产you女视频网站| 女同国产精品一区二区| 成人免费午夜视频| 99热线精品大全在线观看| 激情六月丁香婷婷| 99视频精品全国免费品| 日本成人一区| 99视频精品全国免费品| 国产精品林美惠子在线观看| 88国产经典欧美一区二区三区| 亚洲日本在线免费观看| 91欧洲国产日韩在线人成| 亚洲视频欧美不卡| 尤物国产在线| 亚洲国产AV无码综合原创| 国产免费网址| 99视频在线免费| 国产午夜不卡| 毛片最新网址| 五月天久久婷婷| 亚洲男人的天堂网| 五月天久久婷婷| 蜜臀AV在线播放| 亚洲中文字幕在线观看| 国产99视频免费精品是看6| 亚洲无卡视频| 国产探花在线视频| 操操操综合网| 强乱中文字幕在线播放不卡| 99在线观看视频免费| 亚洲视频免费在线看| 思思99热精品在线| 欧美中日韩在线| 亚洲天堂网在线播放| 精品国产三级在线观看| 亚洲成人手机在线| 亚洲欧州色色免费AV| 99视频在线免费观看| 亚洲中文字幕久久精品无码一区 | 久久国产精品波多野结衣| 无码啪啪精品天堂浪潮av| 91精品网站| 一区二区无码在线视频| 国产美女主播一级成人毛片| 亚洲美女久久| 国产尤物jk自慰制服喷水| 尤物精品视频一区二区三区| 国产精品福利在线观看无码卡|