'輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼'

"

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“如何關閉或隱藏Android軟鍵盤?”

如果你是個Android入門開發者,去Stack Overflow論壇去尋找上非常熱門的Android開發問題,很快會有別人貼出一段代碼。


"

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“如何關閉或隱藏Android軟鍵盤?”

如果你是個Android入門開發者,去Stack Overflow論壇去尋找上非常熱門的Android開發問題,很快會有別人貼出一段代碼。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


遇到編程問題,程序員恐怕首先想到的是去技術論壇搜索結果,然後從回答中尋找代碼。

然而有很多冷門問題,通常並不會在論壇中討論,如果能在廣闊的GitHub代碼庫中快速找到答案就好了。

為此,Facebook開發了一種代碼搜索工具,可將自然語言處理(NLP)和信息檢索(IR)技術直接應用於源代碼文本。

這套工具稱為神經代碼搜索(NCS),它接受自然語言形式的查詢,並直接從GitHub庫中檢索返回相關代碼片段。

除了NCS之外,另外還有一種用監督數據提高網絡性能的UNIF

小試牛刀

Facebook使用Stack Overflow上Android開發的問題評估NCS的性能,看看模型是否能夠從GitHub中找到正確的答案。

在Stack Overflow評估數據集中的287個問題中,NCS的前10個查詢結果能夠正確回答175個問題,佔整個數據集的60%以上。與傳統的信息檢索技術BM25相比,有了非常大的提升。


"

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“如何關閉或隱藏Android軟鍵盤?”

如果你是個Android入門開發者,去Stack Overflow論壇去尋找上非常熱門的Android開發問題,很快會有別人貼出一段代碼。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


遇到編程問題,程序員恐怕首先想到的是去技術論壇搜索結果,然後從回答中尋找代碼。

然而有很多冷門問題,通常並不會在論壇中討論,如果能在廣闊的GitHub代碼庫中快速找到答案就好了。

為此,Facebook開發了一種代碼搜索工具,可將自然語言處理(NLP)和信息檢索(IR)技術直接應用於源代碼文本。

這套工具稱為神經代碼搜索(NCS),它接受自然語言形式的查詢,並直接從GitHub庫中檢索返回相關代碼片段。

除了NCS之外,另外還有一種用監督數據提高網絡性能的UNIF

小試牛刀

Facebook使用Stack Overflow上Android開發的問題評估NCS的性能,看看模型是否能夠從GitHub中找到正確的答案。

在Stack Overflow評估數據集中的287個問題中,NCS的前10個查詢結果能夠正確回答175個問題,佔整個數據集的60%以上。與傳統的信息檢索技術BM25相比,有了非常大的提升。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


我們將NCS和UNIF與Stack Overflow評估數據集進行比較,證實UNIF改善了大大超過NCS回答的問題數量。


"

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“如何關閉或隱藏Android軟鍵盤?”

如果你是個Android入門開發者,去Stack Overflow論壇去尋找上非常熱門的Android開發問題,很快會有別人貼出一段代碼。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


遇到編程問題,程序員恐怕首先想到的是去技術論壇搜索結果,然後從回答中尋找代碼。

然而有很多冷門問題,通常並不會在論壇中討論,如果能在廣闊的GitHub代碼庫中快速找到答案就好了。

為此,Facebook開發了一種代碼搜索工具,可將自然語言處理(NLP)和信息檢索(IR)技術直接應用於源代碼文本。

這套工具稱為神經代碼搜索(NCS),它接受自然語言形式的查詢,並直接從GitHub庫中檢索返回相關代碼片段。

除了NCS之外,另外還有一種用監督數據提高網絡性能的UNIF

小試牛刀

Facebook使用Stack Overflow上Android開發的問題評估NCS的性能,看看模型是否能夠從GitHub中找到正確的答案。

在Stack Overflow評估數據集中的287個問題中,NCS的前10個查詢結果能夠正確回答175個問題,佔整個數據集的60%以上。與傳統的信息檢索技術BM25相比,有了非常大的提升。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


我們將NCS和UNIF與Stack Overflow評估數據集進行比較,證實UNIF改善了大大超過NCS回答的問題數量。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


結果顯示監督技術在獲得理想的訓練語料庫時可以提供的更優的搜索性能。

例如,搜索查詢“如何退出應用程序並顯示主屏幕”這個問題,NCS返回:

public void showHomeScreenDialog(View view) {
Intent nextScreen = new Intent(getApplicationContext(), HomeScreenActivity.class);
startActivity(nextScreen);
}

而UNIF提供了更適合的代碼段:

public void clickExit(MenuItem item) {
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
metr.stop();
startActivity(intent);
finish();
}

原理

Facebook利用了開源AI工具fastText、FAISS和PyTorch,NCS和UNIF將自然語言查詢和代碼片段表示為向量,然後訓練網絡,使得語義相似的代碼片段和查詢的向量表示緊密相連在向量空間。

通過這些模型,可以直接從代碼語料庫中找到代碼片段,有效地回答程序員的問題。

NCS

NCS模型通過使用嵌入來獲取程序語義,在向量空間中語義相似的實體具有彼此接近的期望屬性。在下面的例子裡,有兩個不同的代碼,它們都與關閉或隱藏Android鍵盤有關。由於它們具有相似的語義含義,即使它們代碼不完全相同,再向量空間中的距離也很近。


"

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“如何關閉或隱藏Android軟鍵盤?”

如果你是個Android入門開發者,去Stack Overflow論壇去尋找上非常熱門的Android開發問題,很快會有別人貼出一段代碼。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


遇到編程問題,程序員恐怕首先想到的是去技術論壇搜索結果,然後從回答中尋找代碼。

然而有很多冷門問題,通常並不會在論壇中討論,如果能在廣闊的GitHub代碼庫中快速找到答案就好了。

為此,Facebook開發了一種代碼搜索工具,可將自然語言處理(NLP)和信息檢索(IR)技術直接應用於源代碼文本。

這套工具稱為神經代碼搜索(NCS),它接受自然語言形式的查詢,並直接從GitHub庫中檢索返回相關代碼片段。

除了NCS之外,另外還有一種用監督數據提高網絡性能的UNIF

小試牛刀

Facebook使用Stack Overflow上Android開發的問題評估NCS的性能,看看模型是否能夠從GitHub中找到正確的答案。

在Stack Overflow評估數據集中的287個問題中,NCS的前10個查詢結果能夠正確回答175個問題,佔整個數據集的60%以上。與傳統的信息檢索技術BM25相比,有了非常大的提升。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


我們將NCS和UNIF與Stack Overflow評估數據集進行比較,證實UNIF改善了大大超過NCS回答的問題數量。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


結果顯示監督技術在獲得理想的訓練語料庫時可以提供的更優的搜索性能。

例如,搜索查詢“如何退出應用程序並顯示主屏幕”這個問題,NCS返回:

public void showHomeScreenDialog(View view) {
Intent nextScreen = new Intent(getApplicationContext(), HomeScreenActivity.class);
startActivity(nextScreen);
}

而UNIF提供了更適合的代碼段:

public void clickExit(MenuItem item) {
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
metr.stop();
startActivity(intent);
finish();
}

原理

Facebook利用了開源AI工具fastText、FAISS和PyTorch,NCS和UNIF將自然語言查詢和代碼片段表示為向量,然後訓練網絡,使得語義相似的代碼片段和查詢的向量表示緊密相連在向量空間。

通過這些模型,可以直接從代碼語料庫中找到代碼片段,有效地回答程序員的問題。

NCS

NCS模型通過使用嵌入來獲取程序語義,在向量空間中語義相似的實體具有彼此接近的期望屬性。在下面的例子裡,有兩個不同的代碼,它們都與關閉或隱藏Android鍵盤有關。由於它們具有相似的語義含義,即使它們代碼不完全相同,再向量空間中的距離也很近。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


Facebook使用這個概念來構建NCS模型。在高級別中,模型生成的每個代碼片段以方法級粒度嵌入到向量空間中。構建模型後,某個查詢將映射到同一向量空間,向量距離用於估計代碼段與查詢的相關性。


"

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“如何關閉或隱藏Android軟鍵盤?”

如果你是個Android入門開發者,去Stack Overflow論壇去尋找上非常熱門的Android開發問題,很快會有別人貼出一段代碼。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


遇到編程問題,程序員恐怕首先想到的是去技術論壇搜索結果,然後從回答中尋找代碼。

然而有很多冷門問題,通常並不會在論壇中討論,如果能在廣闊的GitHub代碼庫中快速找到答案就好了。

為此,Facebook開發了一種代碼搜索工具,可將自然語言處理(NLP)和信息檢索(IR)技術直接應用於源代碼文本。

這套工具稱為神經代碼搜索(NCS),它接受自然語言形式的查詢,並直接從GitHub庫中檢索返回相關代碼片段。

除了NCS之外,另外還有一種用監督數據提高網絡性能的UNIF

小試牛刀

Facebook使用Stack Overflow上Android開發的問題評估NCS的性能,看看模型是否能夠從GitHub中找到正確的答案。

在Stack Overflow評估數據集中的287個問題中,NCS的前10個查詢結果能夠正確回答175個問題,佔整個數據集的60%以上。與傳統的信息檢索技術BM25相比,有了非常大的提升。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


我們將NCS和UNIF與Stack Overflow評估數據集進行比較,證實UNIF改善了大大超過NCS回答的問題數量。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


結果顯示監督技術在獲得理想的訓練語料庫時可以提供的更優的搜索性能。

例如,搜索查詢“如何退出應用程序並顯示主屏幕”這個問題,NCS返回:

public void showHomeScreenDialog(View view) {
Intent nextScreen = new Intent(getApplicationContext(), HomeScreenActivity.class);
startActivity(nextScreen);
}

而UNIF提供了更適合的代碼段:

public void clickExit(MenuItem item) {
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
metr.stop();
startActivity(intent);
finish();
}

原理

Facebook利用了開源AI工具fastText、FAISS和PyTorch,NCS和UNIF將自然語言查詢和代碼片段表示為向量,然後訓練網絡,使得語義相似的代碼片段和查詢的向量表示緊密相連在向量空間。

通過這些模型,可以直接從代碼語料庫中找到代碼片段,有效地回答程序員的問題。

NCS

NCS模型通過使用嵌入來獲取程序語義,在向量空間中語義相似的實體具有彼此接近的期望屬性。在下面的例子裡,有兩個不同的代碼,它們都與關閉或隱藏Android鍵盤有關。由於它們具有相似的語義含義,即使它們代碼不完全相同,再向量空間中的距離也很近。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


Facebook使用這個概念來構建NCS模型。在高級別中,模型生成的每個代碼片段以方法級粒度嵌入到向量空間中。構建模型後,某個查詢將映射到同一向量空間,向量距離用於估計代碼段與查詢的相關性。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


要生成模型,NCS必須提取單詞,構建單詞嵌入,然後構建文檔嵌入。


"

曉查 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

“如何關閉或隱藏Android軟鍵盤?”

如果你是個Android入門開發者,去Stack Overflow論壇去尋找上非常熱門的Android開發問題,很快會有別人貼出一段代碼。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


遇到編程問題,程序員恐怕首先想到的是去技術論壇搜索結果,然後從回答中尋找代碼。

然而有很多冷門問題,通常並不會在論壇中討論,如果能在廣闊的GitHub代碼庫中快速找到答案就好了。

為此,Facebook開發了一種代碼搜索工具,可將自然語言處理(NLP)和信息檢索(IR)技術直接應用於源代碼文本。

這套工具稱為神經代碼搜索(NCS),它接受自然語言形式的查詢,並直接從GitHub庫中檢索返回相關代碼片段。

除了NCS之外,另外還有一種用監督數據提高網絡性能的UNIF

小試牛刀

Facebook使用Stack Overflow上Android開發的問題評估NCS的性能,看看模型是否能夠從GitHub中找到正確的答案。

在Stack Overflow評估數據集中的287個問題中,NCS的前10個查詢結果能夠正確回答175個問題,佔整個數據集的60%以上。與傳統的信息檢索技術BM25相比,有了非常大的提升。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


我們將NCS和UNIF與Stack Overflow評估數據集進行比較,證實UNIF改善了大大超過NCS回答的問題數量。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


結果顯示監督技術在獲得理想的訓練語料庫時可以提供的更優的搜索性能。

例如,搜索查詢“如何退出應用程序並顯示主屏幕”這個問題,NCS返回:

public void showHomeScreenDialog(View view) {
Intent nextScreen = new Intent(getApplicationContext(), HomeScreenActivity.class);
startActivity(nextScreen);
}

而UNIF提供了更適合的代碼段:

public void clickExit(MenuItem item) {
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
metr.stop();
startActivity(intent);
finish();
}

原理

Facebook利用了開源AI工具fastText、FAISS和PyTorch,NCS和UNIF將自然語言查詢和代碼片段表示為向量,然後訓練網絡,使得語義相似的代碼片段和查詢的向量表示緊密相連在向量空間。

通過這些模型,可以直接從代碼語料庫中找到代碼片段,有效地回答程序員的問題。

NCS

NCS模型通過使用嵌入來獲取程序語義,在向量空間中語義相似的實體具有彼此接近的期望屬性。在下面的例子裡,有兩個不同的代碼,它們都與關閉或隱藏Android鍵盤有關。由於它們具有相似的語義含義,即使它們代碼不完全相同,再向量空間中的距離也很近。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


Facebook使用這個概念來構建NCS模型。在高級別中,模型生成的每個代碼片段以方法級粒度嵌入到向量空間中。構建模型後,某個查詢將映射到同一向量空間,向量距離用於估計代碼段與查詢的相關性。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


要生成模型,NCS必須提取單詞,構建單詞嵌入,然後構建文檔嵌入。


輸入一段問題,自動給你推薦代碼,Facebook用自然語言搜索代碼


為了生成表示代碼的向量,Facebook將源代碼視為文本,並從以下語法類別中提取:方法名稱,方法調用,枚舉,字符串文字和註釋。然後我們根據標準英語慣例(例如空格,標點符號)和與代碼相關的標點符號對其進行標記。

例如,對於上圖中的方法體“pxToDp”,可以將源代碼視為單詞集合:“將dp px中的px轉換為dp獲取資源、獲取顯示指標”。

fastText為詞彙語料庫中的所有單詞構建單詞嵌入。fastText使用兩層密集神經網絡計算向量表示,該網絡可以在大型語料庫上無人監督地進行訓練。

而UNIF是NCS的擴展,當有監督數據可用於訓練時,可以用來提高性能。

在GitHub上挑選26,109個最受歡迎的Android項目,直接在搜索語料庫上訓練我們的無監督模型NCS。這也成為NCS返回代碼片段的搜索語料庫。

至於UNIF模型,我Facebook提取Stack Overflow論壇中問題標題和代碼片段來獲取數據集。在使用各種啟發式過濾問題後,最終得到451,000個訓練樣本。

論文地址:

https://arxiv.org/pdf/1905.03813.pdf

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回覆“招聘”兩個字。

量子位 QbitAI · 頭條號簽約作者

վ'ᴗ' ի 追蹤AI技術和產品新動態

"

相關推薦

推薦中...