中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

如何又快又好地搜索代碼?Facebook 提出基于機(jī)器學(xué)習(xí)的新工具!

2019-08-01    來源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

日前,F(xiàn)acebook 提出了新型代碼搜索工具——神經(jīng)代碼搜索(NCS),能夠基于機(jī)器學(xué)習(xí)直接使用自然語言處理(NLP)和信息檢索(IR)技術(shù)處理源代碼文本,可大大提高代碼檢索效率。Facebook 在官網(wǎng)博客上對(duì)這項(xiàng)新成果進(jìn)行了介紹,編譯如下。

當(dāng)工程師能夠很容易地找到代碼示例來指導(dǎo)他們完成特定的編碼任務(wù)時(shí),他們的工作狀態(tài)最佳。對(duì)于一些問題——例如,「如何通過編程關(guān)閉或隱藏 Android 軟鍵盤?」——相關(guān)信息隨時(shí)可以從像 Stack Overflow 這樣的常用資源中獲得。但是,專有代碼或 APIs(或用不太常見的編程語言編寫的代碼)的特定問題需要不同的解決方案,而論壇往往也不會(huì)探討這些問題。

為了滿足這一需求,我們開發(fā)了一個(gè)代碼搜索工具,它能夠直接使用自然語言處理(NLP)和信息檢索(IR)技術(shù)處理源代碼文本。這個(gè)工具叫做神經(jīng)代碼搜索(NCS),它接收自然語言作為查詢,并返回直接從代碼庫中檢索到的相關(guān)代碼片段。而它的前提是有可使用的大型代碼庫,從而有可能搜索到與開發(fā)者的查詢相關(guān)的代碼片段。在本文中,我們將介紹兩種模型來完成這一任務(wù):

NCS 是一種結(jié)合 NLP 和 IR 技術(shù)的無監(jiān)督模型。查看鏈接:https://dl.acm.org/citation.cfm?id=3211353&fbclid=IwAR2kUqUhkBP6tRlMJwvCWA-6vWWKccnckXeybOYEZpT1OpUZlIJ6q1l7SCA

UNIF 是 NCS 的一個(gè)擴(kuò)展,它使用有監(jiān)督的神經(jīng)網(wǎng)絡(luò)模型來提升使用良好監(jiān)督數(shù)據(jù)訓(xùn)練時(shí)的性能。查看鏈接:https://arxiv.org/pdf/1905.03813.pdf?fbclid=IwAR3B0S-IMkHnhzBvCrnTaRu827HzjPJVMIxKDFghNJ8XKXDsGHcElX96HX0

利用開源 Facebook AI 工具(包括 fastText、FAISS 和 PyTorch),NCS 和 UNIF 均將自然語言查詢和代碼片段表示為向量,然后訓(xùn)練一個(gè)網(wǎng)絡(luò),使語義相似的代碼片段和查詢內(nèi)容的向量表征在向量空間中緊密結(jié)合。通過這些模型,我們可以直接從代碼庫中找到代碼片段,從而有效地回答工程師的問題。為了評(píng)估 NCS 和 UNIF,我們使用了在 Stack Overflow 上新創(chuàng)建的公共查詢數(shù)據(jù)集。我們的模型可以準(zhǔn)確的回答這個(gè)數(shù)據(jù)集中的問題,例如:

如何關(guān)閉/隱藏 Android 軟鍵盤?
如何在 Android 中把位圖轉(zhuǎn)換成可繪制的?
如何刪除整個(gè)文件夾和內(nèi)容?
如何處理活動(dòng)中的后退按鈕?

NCS 的表現(xiàn)顯示,相對(duì)簡(jiǎn)單的方法在源代碼領(lǐng)域可以表現(xiàn)良好。UNIF 的表現(xiàn)顯示,當(dāng)有標(biāo)記的數(shù)據(jù)可用時(shí),一個(gè)簡(jiǎn)單的有監(jiān)督學(xué)習(xí)方法可以帶來顯著的額外收益。本項(xiàng)目與其他 Facebook 構(gòu)建的系統(tǒng)(如 Aroma 和 Getafix)一起,能為我們的工程師提供了一個(gè)廣泛的、不斷增長(zhǎng)的 基于機(jī)器學(xué)習(xí) 工具包,幫助他們更有效地編寫和管理代碼。

NCS 如何使用嵌入

NCS 模型通過使用嵌入來捕獲程序語義(在本例中是代碼段的意思),即當(dāng)適當(dāng)計(jì)算連續(xù)向量表征時(shí),能夠獲得將語義相似的實(shí)體彼此靠近放置在向量空間中的期望屬性。在下面的示例中,有兩個(gè)不同的方法體,它們都與關(guān)閉或隱藏 Android 軟鍵盤(上面的第一個(gè)問題)有關(guān)。因?yàn)樗鼈兙哂邢嗨频恼Z義意思,即使它們沒有完全相同的代碼行,它們也由向量空間中彼此接近的點(diǎn)表示。

 

 

此圖顯示了相似的代碼段在向量空間中是如何聚集的。

(此圖顯示的公共代碼來源于 Github(https://github.com/kabouzeid/Phonograph/blob/master/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java#L162-L167,https://github.com/RooyeKhat-Media/iGap-Android/blob/master/app/src/main/java/net/iGap/module/SoftKeyboard.java#L78-L83),在 GNU 通用公共許可證下可共享使用。

我們使用這個(gè)概念來構(gòu)建 NCS 模型。在高層次上,模型生成過程中的每個(gè)代碼片段都以方法級(jí)粒度嵌入到向量空間中。一旦模型建立完成,給定的查詢將映射到相同的向量空間,并使用向量距離來評(píng)估代碼片段與查詢的相關(guān)性。本節(jié)將更詳細(xì)地描述模型生成和搜索檢索管道,如下圖所示。

 

 

此圖顯示了 NCS 的整體模型生成和搜索檢索過程。

模型生成

要生成模型,NCS 必須提取單詞,構(gòu)建單詞嵌入,然后構(gòu)建文檔嵌入。(這里的「文檔」參考了一種方法體。)

提取單詞

 

 

NCS 從源代碼中提取單詞并標(biāo)記它們以生成單詞的線性序列。

(這里顯示的示例數(shù)據(jù)來自 GitHub 上公開可用的代碼,這些代碼在 Apache 2.0 許可下共享使用,地址為 https://github.com/sockeqwe/SecureBitcoinWallet/blob/master/app/src/main/java/de/tum/in/securebitcoinwallet/util/DimensUtils.java#L33-L36)

為了生成表示方法體的向量,我們將源代碼視為文本,并從以下語法類別中提。悍椒、方法調(diào)用、枚舉、字符串文本和注釋。然后,我們根據(jù)標(biāo)準(zhǔn)的英語慣例(如空格、標(biāo)點(diǎn)符號(hào))和與代碼相關(guān)的標(biāo)點(diǎn)符號(hào)(如蛇形命名法和駝峰命名法)對(duì)其進(jìn)行標(biāo)記。例如,對(duì)于上圖中的方法體「pxToDp」,源代碼可以被視為單詞的集合:「converts pixelin dp px to dp get resources get display metrics」。

對(duì)于語料庫中的每個(gè)方法體,我們可以用這種方式標(biāo)記源代碼,并學(xué)習(xí)每個(gè)單詞的嵌入。在此步驟之后,我們?yōu)槊總(gè)方法體提取的單詞列表類似于自然語言文檔。

構(gòu)建單詞嵌入

 

 

在這個(gè)矩陣中,如果相應(yīng)的單詞經(jīng)常出現(xiàn)在相似的上下文中,那么兩個(gè)向量表征就會(huì)很接近。我們使用與此相反的語句來幫助定義語義關(guān)系:向量越近的單詞應(yīng)該具有相關(guān)的含義。這在 NLP 文獻(xiàn)(相關(guān)文獻(xiàn)鏈接:https://www.tandfonline.com/doi/abs/10.1080/00437956.1954.11659520?fbclid=IwAR1xVI93AjRCAUKVRIr0g4PqzHi1ehZwwqDVdjumfshNVEEy14RK2e_5cAY)中被稱為分布假設(shè),我們認(rèn)為同樣的概念也適用于源文本。

構(gòu)建文檔嵌入

下一步是使用方法體中出現(xiàn)的單詞來表達(dá)方法體的總體意圖。為此,我們對(duì)方法體中單詞集的單詞嵌入向量取加權(quán)平均值。我們稱之為文檔嵌入。

 

 

上式中,d 是代表方法體的單詞組,是單詞 w 的 fastText 單詞嵌入,C 是包含所有文檔的語料庫,u 是一個(gè)歸一化函數(shù)。

 

我們使用詞頻-逆本文頻率函數(shù)(TF-IDF),它為給定文檔中的給定單詞分配權(quán)重。它的目標(biāo)是突出文檔中最具代表性的單詞——如果一個(gè)單詞經(jīng)常出現(xiàn)在文檔中,它的權(quán)重就會(huì)更高,但是如果它出現(xiàn)在語料庫中過多的文檔里,它也會(huì)受到懲罰。

在這一步的末尾,我們有了語料庫中每個(gè)方法體到其文檔向量表征的索引,并且模型生成已經(jīng)完成。

搜索檢索

搜索查詢用自然語言語句進(jìn)行表示,如「關(guān)閉/隱藏軟鍵盤」或「如何創(chuàng)建沒有標(biāo)題的對(duì)話框」。我們采用與源代碼相同的方式對(duì)查詢進(jìn)行標(biāo)記,并使用相同的 fastText 嵌入矩陣 T,我們對(duì)單詞的向量表征進(jìn)行簡(jiǎn)單平均來為查詢語句創(chuàng)建文檔嵌入;不含查詢單詞的詞會(huì)被刪除。然后,我們使用標(biāo)準(zhǔn)的相似度搜索算法 FAISS 來找到距離查詢余弦距離最近的文檔向量,并返回 topn 結(jié)果(加上一些后處理的排序,該文有進(jìn)一步解釋,論文鏈接:https://dl.acm.org/citation.cfm?id=3211353)。

 

 

這兩個(gè)方法體和查詢被映射到同一向量空間中相鄰的點(diǎn)。這意味著查詢和這兩個(gè)方法體在語義上是相似的,并且與查詢相關(guān)。

結(jié)果

我們使用 Stack Overflow 問題評(píng)估了 NCS 的性能,用標(biāo)題進(jìn)行查詢,回答中的代碼片段作為所需的代碼答案。給定一個(gè)查詢,測(cè)量我們的模型是否能夠從 GitHub 存儲(chǔ)庫的集合中檢索并在前 1、5 和 10 個(gè)結(jié)果中得出正確答案(分別在下面的表中標(biāo)記為 Answered@1、5、10)。我們還給出了平均倒數(shù)秩(MRR),以衡量 NCS 能夠在第幾個(gè)結(jié)果中正確地回答問題。我們將在下文更詳細(xì)地解釋實(shí)驗(yàn)設(shè)置。在我們創(chuàng)建的 Stack Overflow 評(píng)估數(shù)據(jù)集里的 287 個(gè)問題中,NCS 在前 10 個(gè)結(jié)果中正確地回答了 175 個(gè)問題;這相當(dāng)于整個(gè)數(shù)據(jù)集的 60% 以上。我們還將 NCS 的表現(xiàn)與傳統(tǒng)的 IR 技術(shù) BM25 進(jìn)行了比較。如表所示,NCS 優(yōu)于 BM25。

 

 

NCS 表現(xiàn)良好的一個(gè)問題例子是「從 APP 中啟動(dòng) Android 市場(chǎng)」,其中 NCS 返回的第一個(gè)結(jié)果如下:

 

 

(該代碼片段來自 Github 上公開可用的代碼,在 MIT 許可下共享使用,鏈接:https://github.com/mobulum/android-receipts/blob/master/app/src/main/java/tech/receipts/ui/activity/MainActivity.java?fbclid=IwAR3so6yP5Tr0NkwBakiS_kioKckldh_Z97IpxmDy8H8O2scBfKKAK31MHhs#L388-L395)

UNIF:探索監(jiān)督方法

NCS 的關(guān)鍵在于它使用了單詞嵌入。因?yàn)?NCS 是一個(gè)無監(jiān)督的模型,它有幾個(gè)顯著的優(yōu)點(diǎn):它可以通過搜索語料庫直接學(xué)習(xí),并且可以快速、方便地進(jìn)行訓(xùn)練。NCS 假定查詢中的單詞與從源代碼中提取的單詞來自同一域,因?yàn)椴樵兒痛a片段都映射到同一向量空間。然而,情況并非總是如此。例如,查詢「Get free space on internal memory」中沒有任何單詞出現(xiàn)在下面的代碼段中。我們想要的是將查詢?cè)~「free space」映射到代碼中的「available」一詞。

 

 

(該代碼片段取自 Stack Overflow 上的公開可用代碼,在 CC-By-SA 3.0 許可下共享使用,鏈接:https://stackoverflow.com/questions/4595334/get-free-space-on-internal-memory?fbclid=IwAR1wMoa6js7pSDmzuXZERspW4FUqdwY6tEtmbvOlN8hVFbu8OAAWCa2yDdE)

從 14,005 個(gè) Stack Overflow 帖子的數(shù)據(jù)集中,我們分析了查詢中的單詞與源代碼中的單詞的重疊情形。我們發(fā)現(xiàn),在查詢中的 13,972 個(gè)單獨(dú)單詞中,只有不到一半(6,072 個(gè)單詞)同時(shí)存在于源代碼域中。這表明,如果查詢包含源代碼中不存在的單詞,那么我們的模型將不能進(jìn)行有效地正確檢索,因?yàn)槲覀儎h除了與查詢?cè)~無關(guān)的單詞。這種觀察促使我們探索監(jiān)督學(xué)習(xí),將查詢中的單詞映射到源代碼中的單詞。

 

 

我們決定使用 UNIF(NCS 技術(shù)的監(jiān)督最小擴(kuò)展)進(jìn)行實(shí)驗(yàn),以彌補(bǔ)自然語言單詞和源代碼單詞之間的差距。在該模型中,我們使用監(jiān)督學(xué)習(xí)方法對(duì)嵌入矩陣 T 進(jìn)行修改,生成兩個(gè)分別用于代碼和查詢標(biāo)記的嵌入矩陣 。我們還用一種學(xué)習(xí)的注意力機(jī)制權(quán)重方案替換了代碼標(biāo)記嵌入的 TF-IDF 權(quán)重方案。

 

UNIF 模型如何工作

我們對(duì) UNIF 進(jìn)行與 NCS 相同的(c,q)數(shù)據(jù)點(diǎn)集合的訓(xùn)練,其中 c 和 q 分別表示代碼和查詢符號(hào)(有關(guān)此數(shù)據(jù)集的詳細(xì)信息,請(qǐng)參見下面的部分)。模型體系結(jié)構(gòu)可描述如下:令

為兩個(gè)嵌入矩陣,分別將每個(gè)單詞從自然語言描述和代碼符號(hào)映射到一個(gè)長(zhǎng)度為 d 的向量(為查詢?cè)~匯語料庫,為代碼詞匯語料庫)。使用相同的初始權(quán)重 T 初始化這兩個(gè)矩陣,并在訓(xùn)練期間分別進(jìn)行修正(與 fastText 對(duì)應(yīng))。為了將每組代碼符號(hào)向量合成一個(gè)文檔向量,我們使用注意力機(jī)制來進(jìn)行加權(quán)平均計(jì)算。注意力權(quán)重是訓(xùn)練中學(xué)習(xí)到的一個(gè) d 維向量,與 TF-IDF 對(duì)應(yīng)。給定一組代碼字嵌入向量 {e1,…,en},每一個(gè) ei 的注意力權(quán)重 ai 計(jì)算如下:

 

 

 

然后將文檔向量計(jì)算為注意力權(quán)重加權(quán)后的單詞嵌入向量之和:

 

 

 

 

 

 

UNIF網(wǎng)絡(luò)

檢索的工作方式與 NCS 的方式相同。對(duì)于給定的查詢,我們使用上述方法將其表示為文檔向量,并使用 FAISS 查找與查詢余弦距離最近的文檔向量。(原則上,UNIF 也會(huì)像 NCS 一樣從后處理排名中受益。)

與 NCS 進(jìn)行結(jié)果比較

我們基于 Stack Overflow 評(píng)估數(shù)據(jù)集將 NCS 和 UNIF 進(jìn)行比較,看看模型是否能在前 1、5 和 10 個(gè)結(jié)果中正確地回答查詢,以及相應(yīng)的 MRR 評(píng)分。下表顯示,相比 NCS,UNIF 顯著提高了回答的問題數(shù)量。

 

 

這突出表明,如果能夠訪問理想的訓(xùn)練語料庫,監(jiān)督技術(shù)可以提供令人印象深刻的搜索性能。例如,使用搜索查詢「如何退出應(yīng)用程序并顯示主屏幕?」,NCS 返回結(jié)果:

 

 

(第一個(gè)代碼片段來自于 GitHub 上的公共可用代碼,在 Apache 2.0 許可下共享使用,鏈接:https://github.com/selendroid/selendroid/blob/master/selendroid-test-app/src/main/java/io/selendroid/testapp/WebViewActivity.java?fbclid=IwAR222brn93ZC3KK8kcTJhDhNMv8hc6JYSxv6KfQSSaklcm5WtLvmsc0uBQ0#L111-L114。第二個(gè)來自于 GitHub,在 MIT 許可下共享使用,鏈接:https://github.com/JosielSantos/android-metronome/blob/master/app/src/main/java/com/josantos/metronome/ui/activity/Base.java?fbclid=IwAR2xhso5v0vCAQBcNJ0DDg1DZLVdtC1hf5doVqwC1ib_rTB5bm38VSzLomo#L28-L36)

另一個(gè)例子是查詢「如何獲得 ActionBar 的高度?」NCS 返回結(jié)果:

 

 

(第一個(gè)代碼片段來自于 GitHub 上的公共可用代碼,在 Apache 2.0 許可下共享使用,鏈接:https://github.com/RealMoMo/Android_Utils/blob/master/SystemBarTintManager.java?fbclid=IwAR0SaLCK1xR18fxlfSvG72wcD4RBLnh7aZLNvCIls-Pe926LOpQ-2rmKPd0#L495-L497。第二個(gè)來自于 GitHub,同樣在 Apache 2.0 許可下共享使用,鏈接:https://github.com/hearsilent/Universal-CollapsingTabLayout/blob/master/app/src/main/java/hearsilent/universalcollapsingtoolbarlayouttablayoutexample/libs/Utils.java?fbclid=IwAR38dLHvVRwZWGZoFTW6aniRbWQ0OAXAptH1lF-t1zyFuhopAJJVbGzkMpU#L36-L47)

本文還提供了關(guān)于 UNIF 表現(xiàn)的其他數(shù)據(jù),鏈接:https://arxiv.org/abs/1905.03813?fbclid=IwAR10r1Y_3kKQ1nJ6OBWILQSa3xPS4rDjOBPQ2FC_SnwyNgJ532jwy-QfDHg。

構(gòu)建基于機(jī)器學(xué)習(xí)的有效工具

創(chuàng)建一個(gè)成功的機(jī)器學(xué)習(xí)工具,關(guān)鍵之一在于獲得高質(zhì)量的訓(xùn)練數(shù)據(jù)集。對(duì)于我們的模型,我們使用了來自 GitHub 的大型開源代碼庫。此外,擁有高質(zhì)量的評(píng)估數(shù)據(jù)集對(duì)于評(píng)估模型的質(zhì)量同等重要。在探索一個(gè)相對(duì)較新的研究領(lǐng)域(如代碼搜索)時(shí),缺乏可用的評(píng)估數(shù)據(jù)集會(huì)限制我們通過各種代碼搜索工具進(jìn)行評(píng)估的能力。因此,為了幫助在這方面進(jìn)行基準(zhǔn)測(cè)試,我們從 Stack Overflow 整理了 287 個(gè)公共可用數(shù)據(jù)點(diǎn)的數(shù)據(jù)集,其中每個(gè)數(shù)據(jù)點(diǎn)由一個(gè)自然語言查詢和一個(gè)「黃金」代碼片段回答組成。

創(chuàng)建一個(gè)訓(xùn)練數(shù)據(jù)集

通過在 GitHub 上挑選 26,109 個(gè)最受歡迎的 Android 項(xiàng)目,我們直接在搜索語料庫上訓(xùn)練我們的無監(jiān)督模型 NCS。這也成為 NCS 返回代碼片段的搜索語料庫。

為了對(duì)我們的 UNIF 模型進(jìn)行監(jiān)督,我們需要一對(duì)對(duì)齊的數(shù)據(jù)點(diǎn)來學(xué)習(xí)映射。我們對(duì) UNIF 進(jìn)行了(c,q)數(shù)據(jù)點(diǎn)集合的訓(xùn)練,其中 q 是自然語言描述或查詢,c 是相應(yīng)的代碼片段。我們通過從 Stack Exchange(CC-BY-SA 3.0 許可)公開發(fā)布的數(shù)據(jù)(鏈接:https://archive.org/details/stackexchange)中提取 Stack Overflow 問題標(biāo)題和代碼片段來獲得這個(gè)數(shù)據(jù)集。在使用各種啟發(fā)式方法過濾問題之后——例如,代碼片段必須有一個(gè) Android 標(biāo)記,或者必須有一個(gè)方法調(diào)用,或者不能包含 XML 標(biāo)記——我們最終得到了 451,000 個(gè)訓(xùn)練數(shù)據(jù)點(diǎn)。這個(gè)數(shù)據(jù)集與評(píng)估查詢不相交。(這反映了訓(xùn)練數(shù)據(jù)集的最佳可用性;正如我們?cè)谝黄撐?該論文鏈接:https://arxiv.org/abs/1905.03813?fbclid=IwAR16thFXpe8iOKKfTNpGni9tpYDbYAxqRF8GotMPP-Jwhtja4CvBSvHmG0s)中所注意到的,基于文檔字符串的訓(xùn)練沒有得到好的結(jié)果。)

評(píng)估數(shù)據(jù)集

我們使用 Stack Overflow 問題評(píng)估 NCS 的有效性。Stack Overflow 是一種有用的評(píng)估資源,因?yàn)樗罅康淖匀徽Z言查詢,以及可以作為可接受響應(yīng)處理的向上投票的答案。給定一個(gè) Stack Overflow 問題作為查詢標(biāo)題,NCS 從 GitHub 檢索方法列表。在我們創(chuàng)建和改進(jìn) NCS 的工作中,我們認(rèn)為如果來自 NCS 的 topn 結(jié)果中至少有一個(gè)與 Stack Overflow 應(yīng)答代碼片段中描述的方法匹配,那么搜索就成功了。(對(duì)于我們的評(píng)估,我們使用 top1、top5 和 top10 進(jìn)行計(jì)算。)

我們使用腳本選擇 Stack Overflow 問題,標(biāo)準(zhǔn)如下:1)問題包含「Android」和「Java」標(biāo)簽;2)有一個(gè)向上投票的代碼答案;3)真值代碼片段在我們的 GitHub Android repos 語料庫中至少有一個(gè)匹配。通過人工處理確保問題是可接受的,我們得到了 287 個(gè)問題的數(shù)據(jù)集。

使用 Aroma 進(jìn)行自動(dòng)評(píng)價(jià)

我們發(fā)現(xiàn),手工評(píng)估搜索結(jié)果正確性的操作很難重復(fù)進(jìn)行,因?yàn)椴煌淖髡吆筒煌娜丝赡軙?huì)有不同的觀點(diǎn)。我們決定使用 Aroma 實(shí)現(xiàn)一個(gè)自動(dòng)化的評(píng)估管道。Aroma 給出搜索結(jié)果與真值代碼片段之間的相似性評(píng)分,以評(píng)估在得分超過閾值的情形下查詢是否被正確回答。有了這個(gè)管道,我們可以用一種可重現(xiàn)的方式對(duì)模型進(jìn)行評(píng)估。我們使用 Stack Overflow 上找到的代碼答案作為評(píng)估的真值。

我們使用的上述評(píng)估過程不僅比較了 UNIF 和 NCS,還將 UNIF 與文獻(xiàn)中其他一些代碼搜索解決方案進(jìn)行了比較。(相關(guān)比較的詳細(xì)鏈接如下:https://arxiv.org/pdf/1812.01158.pdf?fbclid=IwAR0x2bvo-ItQHCeqdSb4f139HBpJdyzuQU0Famiwx52jCsWQKQu3MWuNdN4)

一個(gè)用于編寫和編輯代碼的基于機(jī)器學(xué)習(xí)的擴(kuò)展工具包

隨著大型代碼存儲(chǔ)庫在當(dāng)今生產(chǎn)環(huán)境中廣泛可用,機(jī)器學(xué)習(xí)可以提取模式和觀點(diǎn),從而提高工程師的工作效率。在 Facebook,這些機(jī)器學(xué)習(xí)工具包括帶有 Aroma 的代碼到代碼推薦和帶有 Getafix 的自動(dòng) bug 修復(fù)。NCS 和 UNIF 是代碼搜索模型的例子,它們可以在自然語言查詢和查找相關(guān)代碼片段之間架起橋梁。使用諸如此類的工具,工程師將能夠輕松地找到并使用相關(guān)代碼片段,即使是在使用專有源代碼或使用不太常用的編程語言編寫代碼時(shí)也是如此。未來,我們希望在綜合領(lǐng)域探索其他的深度學(xué)習(xí)模式,進(jìn)一步提高工程師的工作效率。

相關(guān)文章

(1)Aroma: Using machine learning for code recommendation

鏈接:https://ai.facebook.com/blog/aroma-ml-for-code-recommendation/

(2)Recap of first-ever Glow Summit

鏈接:https://ai.facebook.com/blog/glow-summit-recap/

(3)Getafix: How Facebook tools learn to fix bugs automatically

鏈接:https://ai.facebook.com/blog/getafix-how-facebook-tools-learn-to-fix-bugs-automatically/

Via:https://ai.facebook.com/blog/neural-code-search-ml-based-code-search-using-natural-language-queries/

標(biāo)簽: Facebook 機(jī)器學(xué)習(xí)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:計(jì)算機(jī)視覺前景及應(yīng)用如何?大牌分析師這樣看

下一篇:什么是數(shù)據(jù)科學(xué)?數(shù)據(jù)科學(xué)相關(guān)的名詞解釋