本文約1600字,建議閱讀5分鐘
本文介紹了微軟亞洲研究院自然語言計算組在該研究領域的一系列最新進展。
微軟亞洲研究院副院長周明老師報告:From Language Intelligence to Code Intelligence Based on Pre-trained Models
感謝周明老師的分享以及Windy同學的筆記,完整報告內容文末閱讀原文一鍵直達。
TL;DR程式碼智慧(Code Intelligence)旨在使計算機具備理解和生成程式碼的能力,並利用程式語言知識和上下文進行推理,支援程式碼檢索、補全、翻譯、糾錯、問答等場景。
以深度學習為代表的人工智慧演算法,近年來在視覺、語音和自然語言理解任務上取得了飛躍式的突破。最近基於Transformer的預訓練模型大大推動了自然語言處理和多模態的技術進步。而基於最新的自然語言技術與程式語言知識相融合的程式碼智慧的研究也受到越來越多的關注。
本報告將介紹微軟亞洲研究院自然語言計算組在該研究領域的一系列最新進展,包括針對程式碼智慧的預訓練模型(CodeBERT/CodeGPT)、基準資料集(CodeXGLUE)和融合了程式語言句法和語義資訊的新的評價指標(CodeBLEU)。最後,本報告研討該領域目前存在的主要問題並探索未來的發展方向。
報告筆記如下。
一、語言智慧和預訓練這幾年NLP領域裡程碑式的工作word embedding (2013)
sentence embedding
encoder-decoder with attention (2014)
Transformer(2016)考慮到RNN並行能力弱(self-attention),只有一個特徵抽取 (multi-head)
Pre-trained Model (self-supervised地把大規模語料中上下文相關的語義表示學出來,再fine-tuning)
為什麼要做預訓練模型?顯式表徵了句法和語義知識
體現了遷移學習的特點,幫助低資源情況
幾乎支援所有NLP任務,而且都取得了不錯的效果
可擴充套件性比較好,降低了NLP門檻
Self-supervised Learning方法利用資料自然特點,不需要人工標註
autoregressive(AR) LM
auto-encoding (AE)
總結預訓練模型的相關工作(見下圖)預訓練模型的發展趨勢模型越來越大(消耗資源,且不利於非企業研究)
預訓練方法和模型不斷創新
從單語到多語,到多模態,到程式語言
模型壓縮,知識蒸餾
微軟工作總覽微軟預訓練模型介紹1.「UniLM」(Dong et al.,2019)
GPT是單向,適合做生成;
Bert是雙向,適合做理解;
能否合成?用了一個統一架構三個部分做多工學習。
2.「Unicoder for Understanding」 (Huang et al.,2019)
多語言;
增加contrastive learning任務判斷是否構成互譯。
3.「Unicoder for Generation」 (Liang et al.,2020)
由於2不能做生成而提出;
對輸入加噪,試圖在解碼時去噪。
4.「Unicoder一VL for Images」 (Li et al, 2020)
到影象上的預訓練,考慮圖片+註釋。
5. 「Unicoder一VL for Videos」 (Luo et al., 2020)
同理,做影片的預訓練,多工訓練得到,融入了文字資訊。
6.「LayoutLM: Text+Layout Pre 一training」
文件的預訓練(考慮了排版的資訊,OCR結果的位置資訊)
應用QA
Question Generation
Multilingual QA
Multilingual News Headline Generation
Image Search
Document Understanding
Video Chaptering
XCLUE基準二、程式碼智慧 (基於預訓練模型)能不能把自然語言的方法應用到程式碼領域,提高效率?
已有工作excel檢測已經完成的部分
從自然語言的query透過parsing到SQL
GPT-3程式碼生成(從自然語言描述到程式碼塊)
現成資源模型「CodeBERT」 (Model-1)
baseline,在資料基礎上直接訓練一個Bert。
「CodeBERT (Model-2): Pre-Train with Code + Text」
考慮到程式碼有自己的特點(註釋)。
「CodeBERT (Model-3): Pre-Train with Code + Text + Structure」
除了註釋還考慮到程式碼有結構(AST),變數有依賴或順序關係。
「CodeGPT」
下游任務找到和輸入自然語言串符合的code
寫了一段程式碼,補足下一個詞
找到bug並且修改
不同語言的程式碼之間的翻譯(低資源問題,如何應用單語資料)
CodeXGLUE資料集和任務彙總成本估算評測基於3點:不同詞的權重不同,AST的匹配,語義一致(看變數是否一致)
評測本身是否好?(看哪種評價和人工評價最吻合)
總結未來的工作方向提問問:從高校的角度如何在預訓練方面工作?答:
不要軍備競賽或者拼蠻力,應該做方法論,例如如何融入知識;
小模型能否做很好的工作;模型壓縮,知識萃取;
fine-tune也有很多工作,什麼樣的方法微調會比較好;
擴充套件應用領域;
跨學科工作。
問:程式碼自動生成的規則是硬約束還是自動學習,如何保證正確性?答:NLP工作者只知道串對串,對幾個詞的不同比較寬容,但程式設計只要錯一點就沒法執行。如何評測是需要考慮的,目前沒有很好的辦法數字化衡量,例如可執行性,但邏輯性效率等都可以做一些模擬工作,希望大家未來想辦法自動評價
問:想關注跨模態工作前景?答:以前從其他領域借鑑了很多方法,挪到了NLP;後來NLP的transformer等等,有更好的預訓練模型,可以反攻其他領域了。這件事是NLP工作者應該好好考慮的,一切序列化的任務都可以看作自然語言任務,提高相關領域的技術發展,反哺其他領域。
校對:汪雨晴