小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

?新預(yù)訓練模型CodeBERT出世,編程語言和自然語言都不在話下,哈工大、中山大學、MSRA出品

 板橋胡同37號 2020-02-22

選自arXiv

作者:Zhangyin Feng等

機器之心編譯

參與:魔王、蛋醬
對于自然語言處理從業(yè)者來說,BERT 這個概念一定不陌生,自從誕生以來,它在諸多任務(wù)檢測中都有著非常優(yōu)秀的表現(xiàn)。近日,來自哈爾濱工業(yè)大學、中山大學和微軟亞洲研究院的研究者合作提出了一個可處理雙模態(tài)數(shù)據(jù)的新預(yù)訓練模型 CodeBERT,除了自然語言(NL),編程語言(PL)如今也可以進行預(yù)訓練了。


在這篇名為《CodeBERT: A Pre-Trained Model for Programming and Natural Languages》的論文中,來自哈工大、中山大學和微軟的研究人員詳細介紹了這一新預(yù)訓練模型,該模型可處理雙模態(tài)數(shù)據(jù):編程語言(PL)和自然語言(NL)。
CodeBERT 學習能夠支持下游 NL-PL 應(yīng)用的通用表示,比如自然語言代碼搜索、代碼文檔生成,經(jīng)實驗 CodeBERT 模型在兩項任務(wù)均取得 SOTA 效果,同時研究者構(gòu)建了 NL-PL 探測數(shù)據(jù)集,CodeBERT 在 zero-shot 設(shè)置中的性能表現(xiàn)也持續(xù)優(yōu)于 RoBERTa。


論文鏈接:https:///abs/2002.08155
CodeBERT 模型使用基于 Transformer 的神經(jīng)架構(gòu)構(gòu)建而成,訓練所用的混合目標函數(shù)包括了替換 token 檢測(replaced token detection,RTD)預(yù)訓練任務(wù)。RTD 使用從生成器采樣的合理替代 token 來替換部分輸入 token 從而破壞輸入,然后訓練一個判別器來預(yù)測受損輸入中的每個 token 是否被生成器樣本替換。
這就使得 CodeBERT 模型可利用雙模態(tài)數(shù)據(jù) NL-PL 對和單模態(tài)數(shù)據(jù),前者為模型訓練提供輸入 token,后者有助于學得更好的生成器,研究者通過模型調(diào)參的方式評估了 CodeBERT 在兩個 NL-PL 應(yīng)用中的性能。
CodeBERT
CodeBERT 既能處理自然語言又能處理編程語言,比如 Python、Java、JavaScript 等。它可以捕捉自然語言和編程語言之間的語義連接,并輸出可廣泛支持 NL-PL 理解任務(wù)(如自然語言代碼搜索)和生成任務(wù)(如代碼文檔生成)的通用表示。CodeBERT 模型基于多層 Transformer 構(gòu)建而成,Transformer 如今已被廣泛應(yīng)用于大型預(yù)訓練模型中。
為了利用雙模態(tài)數(shù)據(jù)實例 NL-PL 對和大量可用單模態(tài)代碼,研究者使用混合目標函數(shù)來訓練 CodeBERT,函數(shù)包括標準遮蔽語言建模(MLM)和替換 token 檢測(RTD),替換 token 檢測利用單模態(tài)代碼學得更好的生成器,從而輸出更好的替換 token。
研究使用了 6 種編程語言訓練 CodeBERT,其中雙模態(tài)數(shù)據(jù)點是具備函數(shù)級自然語言文檔的代碼。CodeBERT 模型的訓練設(shè)置與多語言 BERT (Pires et al., 2019) 類似,即針對 6 種編程語言學習一個預(yù)訓練模型,且不使用顯式標記來標注輸入編程語言。
研究者在兩項 NL-PL 任務(wù)(自然語言代碼搜索和代碼文檔生成)上評估了 CodeBERT 的性能。實驗結(jié)果表明調(diào)參后的 CodeBERT 模型可在這兩項任務(wù)上達到當前最優(yōu)性能。為了進一步了解 CodeBERT 學得的知識類型,研究者構(gòu)建了 NL-PL 探測數(shù)據(jù)集,并在 zero-shot 設(shè)置中測試 CodeBERT,即不對 CodeBERT 調(diào)參。測試結(jié)果表明,CodeBERT 的性能持續(xù)優(yōu)于僅基于自然語言的預(yù)訓練模型 RoBERTa。
以下內(nèi)容將詳細介紹 CodeBERT,包括模型架構(gòu)、輸入和輸出表示、目標函數(shù)、訓練數(shù)據(jù),以及將 CodeBERT 應(yīng)用于下游任務(wù)時應(yīng)如何調(diào)參。
模型架構(gòu)
研究者遵循 BERT (Devlin et al., 2018) 和 RoBERTa (Liu et al., 2019),并使用了多層雙向 Transformer 作為 CodeBERT 的模型架構(gòu)。
具體而言,CodeBERT 的模型架構(gòu)與 RoBERTa-base 基本一致,包括 12 個層,每一層有 12 個自注意力頭,每個自注意力頭的大小為 64。隱藏維度為 768,前饋層的內(nèi)部隱藏層大小為 3072。模型參數(shù)總量為 1.25 億。
輸入/輸出表示
在預(yù)訓練階段,研究者將輸入設(shè)置為兩個片段和一個特殊分隔符的組合,即 [CLS], w1, w2, ..wn, [SEP], c1, c2, ..., cm, [EOS]。其中一個片段是自然語言文本,另一個則是以某種編程語言寫成的代碼。
CodeBERT 的輸出包括:1)每個 token 的語境向量表示(適用于自然語言和代碼);2)[CLS] 的表示,作為聚合序列表示(aggregated sequence representation)。
預(yù)訓練數(shù)據(jù)
研究者使用雙模態(tài)數(shù)據(jù)訓練 CodeBERT,即自然語言-代碼對平行數(shù)據(jù)。此外,還使用單模態(tài)數(shù)據(jù),即不具備平行自然語言文本的代碼和不具備對應(yīng)代碼的自然語言。

表 1:CodeBERT 訓練數(shù)據(jù)集的數(shù)據(jù)統(tǒng)計信息。
下圖 1 展示了數(shù)據(jù)示例:

圖 1:NL-PL 對示例,其中 NL 是函數(shù)文檔(黑色虛線框)中的第一段(紅色框)。
預(yù)訓練 CodeBERT
本節(jié)將介紹訓練 CodeBERT 使用的兩個目標函數(shù)。
第一個目標函數(shù)是遮蔽語言建模(masked language modeling,MLM),MLM 在多項研究中被證明是有效的方法。研究者在雙模態(tài)數(shù)據(jù) NL-PL 對上應(yīng)用遮蔽語言建模。
第二個目標函數(shù)是替換 token 檢測(RTD),它使用大量單模態(tài)數(shù)據(jù),如不具備對應(yīng)自然語言文本的代碼。
MLM 目標旨在預(yù)測被遮蔽的原始 token,其公式如下所示:


RTD 的損失函數(shù)如下所示,θ 表示判別器,δ(i) 表示指示函數(shù),p^D2 表示預(yù)測第 i 個單詞真實概率的判別器。


值得注意的是,RTD 目標應(yīng)用于輸入的每個位置,它與 GAN 的不同之處在于:如果生成器輸出了正確的 token,該 token 的標簽是「real」而非「fake」。

圖 2:RTD 目標圖示。NL 生成器和代碼生成器都是語言模型,它們基于上下文語境為遮蔽位置生成合理的 token。NL-Code 判別器是目標預(yù)訓練模型,其訓練方式是檢測采樣自 NL 和 PL 生成器的合理替換 token。NL-Code 判別器用于在調(diào)參階段輸出通用表示,而 NL 生成器和代碼生成器均不出現(xiàn)在調(diào)參階段。
實驗
這一部分內(nèi)容將介紹 CodeBERT 的實驗結(jié)果。首先使用 CodeBERT 進行自然語言代碼搜索(對 CodeBERT 執(zhí)行調(diào)參),然后在 NL-PL 探測任務(wù)中以 zero-shot 設(shè)置評估 CodeBERT 的性能(不對 CodeBERT 進行調(diào)參)。最后,研究者在生成問題(即代碼文檔生成任務(wù))上評估 CodeBERT,并進一步使用訓練階段未見過的編程語言來評估 CodeBERT 的性能。
自然語言代碼搜索
給定自然語言作為輸入,代碼搜索的目標是從一堆代碼中找出語義最相關(guān)的代碼。研究者在 CodeSearchNet 語料庫上進行實驗。

表 3:CodeSearchNet 語料庫的數(shù)據(jù)統(tǒng)計信息。
下表 2 展示了不同方法在 CodeSearchNet 語料庫上的性能結(jié)果。

表 2:不同方法在自然語言代碼檢索任務(wù)中的結(jié)果?;€包括四種 NL 和 PL 聯(lián)合嵌入(第一組),RoBERTa 使用遮蔽語言建模在代碼上執(zhí)行訓練(第二組),PT 表示預(yù)訓練。研究者使用不同設(shè)置訓練 CodeBERT(第三組),包括不同的初始化和不同的學習目標。
NL-PL 探測
給出一個 NL-PL 對 (c, w),NL-PL 探測的目標是測試模型在多個干擾詞中準確預(yù)測/恢復感興趣的遮蔽 token(代碼 token c_i 或單詞 token w_j)的能力。
下表 4 展示了不同方法的準確率,即對于每種編程語言,模型準確預(yù)測的實例與全部實例數(shù)量的比例。表 4 前兩行列舉了數(shù)據(jù)統(tǒng)計信息。

表 4:NL-PL 探測任務(wù)的數(shù)據(jù)統(tǒng)計信息,以及不同預(yù)訓練模型的性能。此表報告了模型的準確率(%),每一組中的最佳結(jié)果以加粗形式顯示。
研究者進一步對 PL-NL 探測任務(wù)進行了案例研究。圖 4 展示了 Python 代碼示例。該示例分別遮蔽了 NL token 和 PL token,然后報告 RoBERTa 和 CodeBERT 的預(yù)測概率。

圖 4:PL-NL 探測任務(wù)案例研究(以 Python 語言代碼為例)。該示例分別遮蔽 NL token(藍色)和 PL token(黃色),并報告了 RoBERTa 和 CodeBERT 的預(yù)測概率。

代碼文檔生成

本節(jié)涉及 code-to-NL 生成任務(wù),報告了在 CodeSearchNet 語料庫上六種編程語言的文檔生成任務(wù)結(jié)果。
下表 5 展示了不同模型的代碼-文檔生成任務(wù)結(jié)果:

表 5:代碼-文檔生成任務(wù)結(jié)果,該實驗在 CodeSearchNet 語料庫上展開,得到的結(jié)果為平滑 BLEU-4 分數(shù)。    

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多