臉書為了讓開發者可以快速找到需要功能的程式碼片段,開發了新的程式碼搜尋工具NCS(Neural Code Search),開發者可以直接使用自然語言進行程式碼搜尋。

NCS使用GitHub儲存庫當作訓練資料庫,以熱門開發者論壇Stack Overflow上的問題進行搜尋,而模型可以正確回答諸如「如何隱藏Android螢幕鍵盤?」以及「如何刪除整個資料夾以及內容?」等問題,回傳相關的程式碼片段。

NCS是一種結合自然語言以及資訊搜尋技術的應用,臉書提到,不少開發者的需求,早就已經存在於大型程式碼儲存庫當中,因此可以使用自然語言描述問題,直接從程式碼庫中得到答案,將能加快開發工作。NCS還附有擴充套件UNIF,當有足夠的監督式資料,便能使用這個擴充套件進行監督式訓練,以改進模型的效能。

NCS模型以嵌入(Embedding)的方式擷取程式語意,也就是說,經過適當地計算,語意相似的程式碼實體在向量空間會相當靠近,像是(下圖)隱藏或是關閉Android螢幕鍵盤的問題,即便兩個功能程式碼不同,但是在向量空間相當靠近。

臉書以這個概念建構NCS模型,在建置模型的階段,每個程式碼片段都會被嵌入到向量空間中,而在執行查詢的時候,使用者的查詢會被映射到同一個向量空間中,向量的距離是估計程式碼片段和查詢相關的程度。

GitHub存儲庫中的程式碼,被當作訓練NCS模型的資料,在Stack Overflow上評估NCS的效能,臉書把Stack Overflow上的標題作為查詢,並把答案中的程式碼當成是解答,然後評量NCS對查詢的回應,出現在Stack Overflow解答前1、前5以及前10的次數。在創建的287個問題中,NCS的回答出現在前10的有175個問題,相當是整個資料集的60%,其中前5的有136個問題,回答就跟問題的最佳解答相同的有83題。

最近臉書在搜尋程式碼研究進行了不少研究,在不久前才剛發表了程式碼推薦工具Aroma,讓開發者以程式碼搜程式碼的方式,針對相同問題,探索其他更好的解決方式。


Advertisement

更多 iThome相關內容