NAACL 2021 の作品「プログラムの理解と生成のための統合事前トレーニング」の公式コード リリース。
***** 下流タスクにおける PLBART のパフォーマンスは、このスプレッドシートに記録されます。 *****
ニュース • セットアップ • 事前トレーニング • 微調整 • よくある質問 • 謝辞 • ライセンス • 引用
ノイズの多い入力 | オリジナルシーケンス |
---|---|
0 は[MASK]フィボナッチ[MASK]ですか? <英語> | |
public static main (String args[]) { date = Date() ;システム 。外 。 (String .format("現在の日付:%tc",)); | |
def addThreeNumbers ( x , y , z ) : NEW_LINE INDENT return [MASK] | |
PLBART 実験を実行するために conda 環境をセットアップできます。最初のステップは依存関係をダウンロードすることです。 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 を維持します。fairseq によると、有効バッチ サイズは次のようになります。
PER_GPU_TRAIN_BATCH_SIZE * NUM_GPU * UPDATE_FREQ
MAX_TOKENS
、トークンの数で表した各ミニバッチのサイズを指すことに注意してください。実験中に、11GB GPU では最大 2048 個のトークンを収容できることがわかりました。これは 4 ~ 5 個の例に相当します。したがって、最大 2048 の有効バッチ サイズを達成できるように、 UPDATE_FREQ
60 に設定します。
私たちは 3 種類の下流タスクで 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 を微調整し、平均スコアを報告することをお勧めします。
mbart_base
タスクはfairseq==0.9.0
正式リリースには存在しません。
私たちは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"
}