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文章
1429瀏覽量
54610 -
代碼
+關(guān)注
關(guān)注
30文章
4723瀏覽量
68236 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1200瀏覽量
24621
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論