Facebook AI發(fā)布了一個(gè)包含編碼問(wèn)題和代碼片段答案的數(shù)據(jù)集,旨在評(píng)估基于AI的自然語(yǔ)言代碼搜索系統(tǒng)。該版本還包括Facebook自己的幾種代碼搜索模型的基準(zhǔn)測(cè)試結(jié)果,以及來(lái)自24,000個(gè)GitHub存儲(chǔ)庫(kù)的超過(guò)400萬(wàn)種Java方法的訓(xùn)練語(yǔ)料庫(kù)。
在arXiv上發(fā)表的一篇論文中,研究人員描述了他們收集數(shù)據(jù)的技術(shù)。訓(xùn)練數(shù)據(jù)語(yǔ)料庫(kù)是從最受歡迎的GitHub Android代碼存儲(chǔ)庫(kù)中收集的,按星數(shù)排序。解析存儲(chǔ)庫(kù)中的每個(gè)Java文件,以標(biāo)識(shí)各個(gè)方法。Facebook在培訓(xùn)代碼搜索系統(tǒng)的研究中使用了所得的語(yǔ)料庫(kù)。為了創(chuàng)建評(píng)估數(shù)據(jù)集,他們從Stack Overflow 的問(wèn)答數(shù)據(jù)轉(zhuǎn)儲(chǔ)開(kāi)始,僅選擇同時(shí)具有“ Java”和“ Android”的問(wèn)題研究人員說(shuō):“其中,他們只保留答案被投票的問(wèn)題,這些問(wèn)題也與訓(xùn)練數(shù)據(jù)語(yǔ)料庫(kù)中確定的一種方法相匹配。結(jié)果將518個(gè)問(wèn)題手動(dòng)過(guò)濾為最終的287個(gè)問(wèn)題。研究人員表示:
我們的數(shù)據(jù)集不僅是當(dāng)前可用于Java的最大數(shù)據(jù)集,而且還是唯一以自動(dòng)化(一致)方式針對(duì)Stack Overflow的真實(shí)答案進(jìn)行驗(yàn)證的數(shù)據(jù)集。
Facebook最近發(fā)表了幾篇關(guān)于神經(jīng)代碼搜索的論文,這是一種用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)回答“如何”編碼問(wèn)題的機(jī)器學(xué)習(xí)技術(shù)。軟件開(kāi)發(fā)人員通常會(huì)使用Stack Overflow來(lái)學(xué)習(xí)如何解決特定的編碼問(wèn)題,例如,如何解決 Android應(yīng)用程序中的錯(cuò)誤。但是,在處理使用專(zhuān)有API或較不常見(jiàn)的編程語(yǔ)言的代碼時(shí),這不是一個(gè)選擇。在這種情況下,程序員自己的組織之外的專(zhuān)家很少(或沒(méi)有)。相反,F(xiàn)acebook和其他公司探索了使用源代碼本身作為培訓(xùn)數(shù)據(jù)來(lái)產(chǎn)生可以回答編碼問(wèn)題的自然語(yǔ)言處理(NLP)系統(tǒng)的想法。
去年,F(xiàn)acebook發(fā)表了一篇關(guān)于無(wú)監(jiān)督學(xué)習(xí)方法的論文,稱(chēng)為神經(jīng)代碼搜索(NCS),該方法接受了從GitHub收集的數(shù)據(jù)的培訓(xùn)。該技術(shù)從源代碼中提取單詞,并學(xué)習(xí)將每個(gè)單詞映射到高維空間中的向量的嵌入。嵌入通常具有向量的性質(zhì),向量在向量空間中彼此“接近”,表示具有相似含義的詞,并且詞之間的關(guān)系可用向量算術(shù)表示。一個(gè)例子是在Wikipedia上訓(xùn)練的word2vec模型,當(dāng)給定向量表達(dá)式“ Paris-France + Spain”時(shí),該模型將返回“ Madrid”。
學(xué)習(xí)了嵌入之后,使用“ 詞袋 ”模型將語(yǔ)料庫(kù)中的每個(gè)Java方法轉(zhuǎn)換為嵌入空間中的向量;通過(guò)嵌入將代碼中的每個(gè)單詞轉(zhuǎn)換為向量,并將向量的加權(quán)總和分配給該方法作為其索引。這會(huì)將每個(gè)Java方法映射到嵌入空間中的一個(gè)點(diǎn)。為了回答編碼問(wèn)題,通過(guò)將查詢(xún)中的每個(gè)單詞都通過(guò)嵌入轉(zhuǎn)換并產(chǎn)生加權(quán)和,可以將該問(wèn)題類(lèi)似地映射到嵌入空間中的某個(gè)點(diǎn)。問(wèn)題的“答案”是Java方法,其索引最接近該點(diǎn)。關(guān)鍵思想是查詢(xún)和代碼都使用相同的嵌入,并且訓(xùn)練不需要在輸入數(shù)據(jù)中出現(xiàn)任何問(wèn)題;它僅從源代碼中學(xué)習(xí)。
這種技術(shù)的一個(gè)缺點(diǎn)是它不會(huì)學(xué)習(xí)源代碼中沒(méi)有的單詞的嵌入。Facebook研究人員發(fā)現(xiàn),在Stack Overflow上,有問(wèn)題的單詞中也只有不到一半的單詞包含在源代碼中。這促使研究人員通過(guò)監(jiān)督學(xué)習(xí)擴(kuò)展了NCS,“以彌合自然語(yǔ)言單詞和源代碼單詞之間的鴻溝”。產(chǎn)生的系統(tǒng)稱(chēng)為嵌入統(tǒng)一(UNIF),學(xué)習(xí)查詢(xún)?cè)~的單獨(dú)嵌入。在此培訓(xùn)過(guò)程中,團(tuán)隊(duì)使用類(lèi)似于收集基準(zhǔn)數(shù)據(jù)集的過(guò)程從Stack Overflow中提取了一組問(wèn)題標(biāo)題和代碼段。該訓(xùn)練數(shù)據(jù)集包含451k個(gè)問(wèn)題-答案對(duì),但都不在基準(zhǔn)測(cè)試中。在基準(zhǔn)上進(jìn)行評(píng)估時(shí),對(duì)這一數(shù)據(jù)進(jìn)行培訓(xùn)的聯(lián)合國(guó)系統(tǒng)的性能略?xún)?yōu)于NCS。兩種系統(tǒng)都以大約三分之一的時(shí)間作為最高結(jié)果返回“正確”答案,并以一半的時(shí)間以“前五項(xiàng)”結(jié)果返回“正確”答案。
-
Facebook
+關(guān)注
關(guān)注
3文章
1432瀏覽量
56174 -
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70241 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1222瀏覽量
25273
發(fā)布評(píng)論請(qǐng)先 登錄
DevEco Studio AI輔助開(kāi)發(fā)工具兩大升級(jí)功能 鴻蒙應(yīng)用開(kāi)發(fā)效率再提升
首創(chuàng)開(kāi)源架構(gòu),天璣AI開(kāi)發(fā)套件讓端側(cè)AI模型接入得心應(yīng)手
TDengine 發(fā)布時(shí)序數(shù)據(jù)分析 AI 智能體 TDgpt,核心代碼開(kāi)源

Banana Pi 發(fā)布 BPI-AI2N & BPI-AI2N Carrier,助力 AI 計(jì)算與嵌入式開(kāi)發(fā)
請(qǐng)問(wèn)NanoEdge AI數(shù)據(jù)集該如何構(gòu)建?
《AI Agent 應(yīng)用與項(xiàng)目實(shí)戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識(shí)庫(kù)
Microchip推出MPLAB AI編碼助手
用于 SPI 絕對(duì)編碼器的 Arduino 示例代碼

三星貼片電容識(shí)別容值代碼方法

base64編碼和解碼的使用方法
學(xué)習(xí)RV32GC對(duì)比X86-32指令集的優(yōu)勢(shì)思考
AI大模型的訓(xùn)練數(shù)據(jù)來(lái)源分析
C2000 DCSM ROM代碼片段/ROP漏洞

AI模擬器
一個(gè)哪夠?是時(shí)候讓一群AI替你打工了

評(píng)論