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

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

2021-09-10 07:32:06楊忻瑩
計算機系統應用 2021年8期
關鍵詞:排序用戶信息

楊忻瑩,周 宇,2

1(南京航空航天大學 計算機科學與技術學院,南京 211106)

2(南京航空航天大學 高安全系統的軟件開發與驗證技術工信部重點實驗室,南京 211106)

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

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

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

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

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

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

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

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

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

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

1 方法實現

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

圖1 方法整體架構

1.1 語義相似度計算模型構建

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

1.2 特征提取

特征提取模塊主要任務是根據構建的語義相似度計算模型,進行相似度計算,并構建特征向量,構造完成的特征向量可作為訓練模型或預測模型的輸入數據.

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

1.3 排序學習和主動學習模型訓練

本模塊用于訓練排序學習和主動學習模型,為API 重排序模塊提供模型支撐.通過1.2 節中特征提取過程,對反饋庫中的每條反饋數據提取特征向量,以構建訓練集.

通過將特征向量輸入到排序學習模型,最終得到訓練良好的排序學習模型.

訓練主動學習模型之前,先利用來自Stack Overflow的問答信息構造<查詢,API>問答數據對,其中查詢與問題相對應,API與接受的答案中的API 相對應.這些問答數據對可對主動學習模型選取的樣本提供標注,將其放入訓練集中再次訓練模型.通過迭代此過程,可以獲得訓練好的主動學習模型.

1.4 API 重排序推薦

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

其中,S coreQ(i)表示第i個API 在初始API 列表中的排序學習預測值,ALrelevQ(i) 表示列表中第i個API的排序學習預測值.S coremax和S coremin分別為排序分數的最大值和最小值,用于進行歸一化處理.相關性得分的權重是一個動態值,它依賴于第i個API 在列表中所處的位置,即posi.

1.5 用戶反饋

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

2 工具實現

本工具以插件的形式集成到VS Code IDE中,采用客戶端/服務器架構.服務器端對VS Code 獲取的用戶輸入數據進行處理,返回數據處理結果,并通過客戶端將結果展示給用戶.

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

根據用戶交互信息,本工具為用戶提供了個性化的API 推薦列表,實現了API 個性化推薦功能.系統架構主要分為兩個模塊:用戶輸入查詢模塊和API 推薦反饋模塊.

2.1 用戶輸入查詢模塊

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

圖2 用戶輸入查詢流程

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

圖3 API 推薦列表頁面

2.2 API 推薦反饋模塊

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

2.2.1 API 推薦

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

2.2.2 用戶反饋

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

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

3 應用場景

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

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

4 實驗評估

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

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

4.1 增加反饋數據量

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

表1 增加反饋數據量對工具的影響

4.2 有效性分析

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

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

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

4.3 模擬用戶反饋場景

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

表2 模擬用戶反饋場景

5 結論與展望

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

猜你喜歡
排序用戶信息
排序不等式
恐怖排序
節日排序
刻舟求劍
兒童繪本(2018年5期)2018-04-12 16:45:32
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
主站蜘蛛池模板: 精品无码视频在线观看| 国产毛片不卡| 亚洲欧美自拍一区| 国产精品美女网站| 夜夜拍夜夜爽| 国产乱论视频| 天堂在线视频精品| 亚洲国产精品一区二区第一页免| 亚洲欧洲美色一区二区三区| 波多野结衣一区二区三区AV| 高清大学生毛片一级| 日本爱爱精品一区二区| 91香蕉国产亚洲一二三区 | 日本91在线| 国产爽妇精品| 国产国语一级毛片| 99热这里只有成人精品国产| 国产成人高清精品免费5388| 亚洲第一香蕉视频| 国产成人成人一区二区| 天堂亚洲网| 亚洲高清无码精品| 免费无码网站| 波多野结衣爽到高潮漏水大喷| 久久性妇女精品免费| 99精品免费在线| 國產尤物AV尤物在線觀看| 精品少妇人妻无码久久| 日本免费精品| 野花国产精品入口| 欧美中文字幕无线码视频| 亚洲综合国产一区二区三区| 久久国产精品麻豆系列| 国产在线精品美女观看| 中文无码伦av中文字幕| 99re这里只有国产中文精品国产精品 | 成人免费网站在线观看| 欧美五月婷婷| 天堂网亚洲系列亚洲系列| 精品国产香蕉在线播出| 午夜国产大片免费观看| 91网在线| 亚洲国产看片基地久久1024| 日韩精品久久久久久久电影蜜臀| 99热线精品大全在线观看| 波多野结衣第一页| 国产精品理论片| 日韩毛片免费观看| 成年人久久黄色网站| 99久久精品久久久久久婷婷| 日韩在线第三页| 国产精品极品美女自在线看免费一区二区| 日韩免费成人| 亚洲制服丝袜第一页| 日本午夜精品一本在线观看 | 成人欧美在线观看| 草草影院国产第一页| 国产97视频在线| 性视频一区| 亚洲精品无码高潮喷水A| 精品成人一区二区| 九色91在线视频| 国产亚洲精品自在线| 亚洲国产亚综合在线区| 国产精品无码制服丝袜| 欧美日韩成人| 激情视频综合网| 老色鬼欧美精品| 成人小视频在线观看免费| 中文字幕永久视频| 久久久久九九精品影院| 在线看国产精品| 国产综合无码一区二区色蜜蜜| 久久综合婷婷| 婷婷色中文网| 97视频精品全国免费观看 | 青青青伊人色综合久久| 欧美性精品| 999在线免费视频| 最新国产在线| 色偷偷一区| 男人天堂亚洲天堂|