Facebook AI發(fā)布了一個(gè)包含編碼問(wèn)題和代碼片段答案的數據集,旨在評估基于A(yíng)I的自然語(yǔ)言代碼搜索系統。該版本還包括Facebook自己的幾種代碼搜索模型的基準測試結果,以及來(lái)自24,000個(gè)GitHub存儲庫的超過(guò)400萬(wàn)種Java方法的訓練語(yǔ)料庫。

在arXiv上發(fā)表的一篇論文中,研究人員描述了他們收集數據的技術(shù)。訓練數據語(yǔ)料庫是從最受歡迎的GitHub Android代碼存儲庫中收集的,按星數排序。解析存儲庫中的每個(gè)Java文件,以標識各個(gè)方法。Facebook在培訓代碼搜索系統的研究中使用了所得的語(yǔ)料庫。為了創(chuàng )建評估數據集,他們從Stack Overflow 的問(wèn)答數據轉儲開(kāi)始,僅選擇同時(shí)具有“ Java”和“ Android”的問(wèn)題研究人員說(shuō):“其中,他們只保留答案被投票的問(wèn)題,這些問(wèn)題也與訓練數據語(yǔ)料庫中確定的一種方法相匹配。結果將518個(gè)問(wèn)題手動(dòng)過(guò)濾為最終的287個(gè)問(wèn)題。研究人員表示:
我們的數據集不僅是當前可用于Java的最大數據集,而且還是唯一以自動(dòng)化(一致)方式針對Stack Overflow的真實(shí)答案進(jìn)行驗證的數據集。

Facebook最近發(fā)表了幾篇關(guān)于神經(jīng)代碼搜索的論文,這是一種用于訓練神經(jīng)網(wǎng)絡(luò )回答“如何”編碼問(wèn)題的機器學(xué)習技術(shù)。軟件開(kāi)發(fā)人員通常會(huì )使用Stack Overflow來(lái)學(xué)習如何解決特定的編碼問(wèn)題,例如,如何解決 Android應用程序中的錯誤。但是,在處理使用專(zhuān)有API或較不常見(jiàn)的編程語(yǔ)言的代碼時(shí),這不是一個(gè)選擇。在這種情況下,程序員自己的組織之外的專(zhuān)家很少(或沒(méi)有)。相反,Facebook和其他公司探索了使用源代碼本身作為培訓數據來(lái)產(chǎn)生可以回答編碼問(wèn)題的自然語(yǔ)言處理(NLP)系統的想法。
去年,Facebook發(fā)表了一篇關(guān)于無(wú)監督學(xué)習方法的論文,稱(chēng)為神經(jīng)代碼搜索(NCS),該方法接受了從GitHub收集的數據的培訓。該技術(shù)從源代碼中提取單詞,并學(xué)習將每個(gè)單詞映射到高維空間中的向量的嵌入。嵌入通常具有向量的性質(zhì),向量在向量空間中彼此“接近”,表示具有相似含義的詞,并且詞之間的關(guān)系可用向量算術(shù)表示。一個(gè)例子是在Wikipedia上訓??練的word2vec模型,當給定向量表達式“ Paris-France + Spain”時(shí),該模型將返回“ Madrid”。

學(xué)習了嵌入之后,使用“ 詞袋 ”模型將語(yǔ)料庫中的每個(gè)Java方法轉換為嵌入空間中的向量;通過(guò)嵌入將代碼中的每個(gè)單詞轉換為向量,并將向量的加權總和分配給該方法作為其索引。這會(huì )將每個(gè)Java方法映射到嵌入空間中的一個(gè)點(diǎn)。為了回答編碼問(wèn)題,通過(guò)將查詢(xún)中的每個(gè)單詞都通過(guò)嵌入轉換并產(chǎn)生加權和,可以將該問(wèn)題類(lèi)似地映射到嵌入空間中的某個(gè)點(diǎn)。問(wèn)題的“答案”是Java方法,其索引最接近該點(diǎn)。關(guān)鍵思想是查詢(xún)和代碼都使用相同的嵌入,并且訓練不需要在輸入數據中出現任何問(wèn)題;它僅從源代碼中學(xué)習。
這種技術(shù)的一個(gè)缺點(diǎn)是它不會(huì )學(xué)習源代碼中沒(méi)有的單詞的嵌入。Facebook研究人員發(fā)現,在Stack Overflow上,有問(wèn)題的單詞中也只有不到一半的單詞包含在源代碼中。這促使研究人員通過(guò)監督學(xué)習擴展了NCS,“以彌合自然語(yǔ)言單詞和源代碼單詞之間的鴻溝”。產(chǎn)生的系統稱(chēng)為嵌入統一(UNIF),學(xué)習查詢(xún)詞的單獨嵌入。在此培訓過(guò)程中,團隊使用類(lèi)似于收集基準數據集的過(guò)程從Stack Overflow中提取了一組問(wèn)題標題和代碼段。該訓練數據集包含451k個(gè)問(wèn)題-答案對,但都不在基準測試中。在基準上進(jìn)行評估時(shí),對這一數據進(jìn)行培訓的聯(lián)合國系統的性能略?xún)?yōu)于NCS。兩種系統都以大約三分之一的時(shí)間作為最高結果返回“正確”答案,并以一半的時(shí)間以“前五項”結果返回“正確”答案。
