我們的 NAACL 2021 工作《程式理解與產生的統一預訓練》的正式程式碼發布。
***** PLBART 在下游任務上的表現記錄在此電子表格中。 *****
新聞 • 設定 • 預訓練 • 微調 • 常見問題 • 致謝 • 授權 • 引用
輸入噪音 | 原始序列 |
---|---|
0 是[MASK]斐波那契[MASK]嗎? | |
公共靜態主(字串參數[]){日期=日期();系統 。出去 。 (String.format("目前日期:%tc",)); } | |
def addThreeNumbers ( x , y , z ) : NEW_LINE INDENT return [MASK] | |
我們可以設定一個conda環境來執行PLBART實驗,第一步是下載依賴項。我們假設 anaconda 已安裝。可以透過執行以下腳本來安裝附加要求(在requirements.txt中註明):
bash install_env.sh
前往data/github
目錄並按照說明進行操作。
前往data/stackoverflow
目錄並按照說明進行操作。
cd pretrain
bash binarize.sh
bash pretrain.sh GPU_IDS
[注意]我們在 8 個GeForce RTX 2080
(11gb) GPU 上預訓練了 PLBART(大約花了 11.5 天)。如果您想使用更多 GPU 或具有更多記憶體的 GPU 來預先訓練 PLBART,請相應調整MAX_SENTENCES
、 MAX_TOKENS
、 UPDATE_FREQ
以保持有效批次大小為 2048。
PER_GPU_TRAIN_BATCH_SIZE * NUM_GPU * UPDATE_FREQ
請注意, MAX_TOKENS
是指每個小批量的大小,以令牌數量表示。在我們的實驗中,我們注意到在 11GB GPU 中,最多可以容納 2048 個令牌,相當於 4-5 個範例。因此,我們將UPDATE_FREQ
設定為 60,這樣我們就可以實現約 2048 的有效批量大小。
我們針對三種類型的下游任務對 PLBART 進行微調和評估。
類型 | 任務 | 語言 | 數據 | 腳本 | 檢查站 |
---|---|---|---|---|---|
程式碼到文字 | 程式碼總結 | Python、Java、Ruby、 PHP、Javascript、Go | [關聯] | [關聯] | [關聯] |
文字到程式碼 | 程式碼生成 | 爪哇 | [關聯] | [關聯] | [關聯] |
代碼到代碼 | 程式碼翻譯 | Java、C# | [關聯] | [關聯] | [關聯] |
程式碼細化 | 爪哇 | [關聯] | [關聯] | ||
克隆檢測 | 爪哇 | [關聯] | [關聯] | ||
缺陷檢測 | C/C++ | [關聯] | [關聯] |
cd pretrain
bash download.sh
cd ..
cd data/codeXglue
bash download.sh
cd ../..
cd evaluation/CodeBLEU/parser
bash build.sh
cd ../../..
例如,我們想要在Text-to-Code
任務上微調 PLBART。然後,
cd scripts/text_to_code
bash prepare.sh
bash run.sh GPU_IDS
cd ../..
筆記。我們在 1 個GeForce RTX 2080
(11GB) GPU 上對 PLBART 進行了微調。
[注意] 我們在此介紹此儲存庫的檔案結構。
如何從 Google BigQuery 下載 Github 資料?
我們在這裡提供了詳細的指南。
論文中報告的效能與使用已發佈的檢查點實現的效能不符。
論文中提到的 PLBART 性能與已發布的檢查點實現的性能之間存在差異。我們在這裡注意到了它們。請注意,超參數設定沒有變化。我們提供了與 bash 腳本中使用的完全相同的值。我們觀察到的性能差異可能是由於在不同時間點運行實驗所造成的。雖然我們沒有,但我們建議使用多個不同的種子微調 PLBART 並報告平均分數。
fairseq==0.9.0
官方版本中不存在mbart_base
任務。
雖然我們使用了fairseq==0.9.0
但我們使用了不同的提交,其中包含mbart_base
任務。您可以執行以下操作,這應該有效。
git clone https://github.com/pytorch/fairseq
cd fairseq
git checkout 698e3b91ffa832c286c48035bdff78238b0de8ae
pip install .
否則,您可以考慮安裝fairseq==0.10.0
。其他調整請參考此問題。
PLBART 的最大輸入和輸出長度是多少?
最大長度為 512。
PLBART 使用 Fairseq、codeXglue 和 TransCoder,並感謝這些作品的作者的貢獻。
此儲存庫的內容受 MIT 許可。該許可證也適用於預訓練和微調的模型。
@inproceedings{ahmad-etal-2021-unified,
title = "Unified Pre-training for Program Understanding and Generation",
author = "Ahmad, Wasi and
Chakraborty, Saikat and
Ray, Baishakhi and
Chang, Kai-Wei",
booktitle = "Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies",
month = jun,
year = "2021",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2021.naacl-main.211",
pages = "2655--2668"
}