Publication officielle du code de notre travail NAACL 2021, Pré-formation unifiée pour la compréhension et la génération des programmes.
***** Les performances de PLBART sur les tâches en aval sont enregistrées dans cette feuille de calcul. *****
Actualités • Configuration • Pré-formation • Mise au point • FAQ • Remerciement • Licence • Citation
Entrée bruyante | Séquence originale |
---|---|
Est-ce que 0 est le [MASQUE] Fibonacci [MASQUE] ? | |
public static main ( String args [ ] ) { date = Date ( ) ; Système . dehors . ( Chaîne . format ( " Date actuelle : % tc " , ) ) ; } | |
def addThreeNumbers ( x , y , z ) : NEW_LINE INDENT return [MASK] | |
Nous pouvons configurer un environnement conda afin d'exécuter des expériences PLBART, la première étape consiste à télécharger les dépendances. Nous supposons qu'anaconda est installé. Les exigences supplémentaires (notées dans Requirements.txt) peuvent être installées en exécutant le script suivant :
bash install_env.sh
Accédez au répertoire data/github
et suivez les instructions.
Accédez au répertoire data/stackoverflow
et suivez les instructions.
cd pretrain
bash binarize.sh
bash pretrain.sh GPU_IDS
[Remarque] Nous avons pré-entraîné PLBART sur 8 GPU GeForce RTX 2080
(11 Go) (cela a pris environ 11,5 jours). Si vous souhaitez pré-entraîner PLBART en utilisant plus de GPU ou des GPU avec plus de mémoire, ajustez MAX_SENTENCES
, MAX_TOKENS
, UPDATE_FREQ
en conséquence pour maintenir une taille de lot effective de 2048. Selon fairseq, la taille de lot effective est égale à :
PER_GPU_TRAIN_BATCH_SIZE * NUM_GPU * UPDATE_FREQ
Notez que MAX_TOKENS
fait référence à la taille de chaque mini-lot, en termes de nombre de jetons. Au cours de nos expériences, nous avons remarqué que dans un GPU de 11 Go, un maximum de 2048 jetons peuvent être hébergés, ce qui équivaut à 4 à 5 exemples. Par conséquent, nous définissons UPDATE_FREQ
sur 60, afin de pouvoir atteindre une taille de lot effective d'environ 2 048.
Nous affinons et évaluons PLBART sur trois types de tâches en aval.
Taper | Tâche | Langue(s) | Données | Scripts | Points de contrôle |
---|---|---|---|---|---|
Coder en texte | Résumé du code | Python, Java, Ruby, PHP, Javascript, Go | [LIEN] | [LIEN] | [LIEN] |
Texte en code | Génération de code | Java | [LIEN] | [LIEN] | [LIEN] |
Coder à coder | Traduction de codes | Java, C# | [LIEN] | [LIEN] | [LIEN] |
Affinement du code | Java | [LIEN] | [LIEN] | ||
Détection de clones | Java | [LIEN] | [LIEN] | ||
Détection des défauts | C/C++ | [LIEN] | [LIEN] |
cd pretrain
bash download.sh
cd ..
cd data/codeXglue
bash download.sh
cd ../..
cd evaluation/CodeBLEU/parser
bash build.sh
cd ../../..
Par exemple, nous souhaitons affiner PLBART sur la tâche Text-to-Code
. Alors,
cd scripts/text_to_code
bash prepare.sh
bash run.sh GPU_IDS
cd ../..
Note. Nous avons affiné PLBART sur 1 GPU GeForce RTX 2080
(11 Go).
[REMARQUE] Nous présentons ici la structure des fichiers de ce référentiel.
Comment télécharger des données Github depuis Google BigQuery ?
Nous avons fourni un guide détaillé ici .
Inadéquation des performances signalée dans le document et obtenue à l'aide des points de contrôle publiés.
Il existe une différence entre les performances de PLBART mentionnées dans le document et les performances obtenues avec les points de contrôle publiés. Nous les avons notés ici. Notez qu’il n’y a aucun changement dans le réglage de l’hyper-paramètre. Nous avons fourni exactement la même valeur que celle utilisée dans les scripts bash. La différence de performances que nous avons observée est peut-être due à la réalisation d'expériences à différents moments. Bien que nous ne l'ayons pas fait, nous recommandons d'affiner PLBART avec plusieurs graines différentes et de signaler les scores moyens.
La tâche mbart_base
n'est pas présente dans la version officielle fairseq==0.9.0
.
Bien que nous ayons utilisé fairseq==0.9.0
, nous avons utilisé un commit différent qui consiste en une tâche mbart_base
. Vous pouvez faire ce qui suit qui devrait fonctionner.
git clone https://github.com/pytorch/fairseq
cd fairseq
git checkout 698e3b91ffa832c286c48035bdff78238b0de8ae
pip install .
Sinon, vous pouvez envisager d'installer fairseq==0.10.0
. Veuillez vous référer à ce problème pour effectuer d'autres ajustements.
Quelles peuvent être les longueurs maximales d’entrée et de sortie pour PLBART ?
La longueur maximale est de 512.
PLBART utilise Fairseq, codeXglue et TransCoder et remercie les auteurs de ces ouvrages pour leur contribution.
Le contenu de ce référentiel est sous licence MIT. La licence s'applique également aux modèles pré-entraînés et affinés.
@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"
}