Lanzamiento del código oficial de nuestro trabajo NAACL 2021, Capacitación previa unificada para la comprensión y generación de programas.
***** El desempeño de PLBART en las tareas posteriores se registra en esta hoja de cálculo. *****
Noticias • Configuración • Capacitación previa • Ajustes • Preguntas frecuentes • Reconocimiento • Licencia • Cita
Entrada ruidosa | Secuencia original |
---|---|
¿Es 0 la [MÁSCARA] Fibonacci [MÁSCARA] ? | |
público estático principal (String args []) { fecha = Fecha (); Sistema . afuera . (String.formato("Fecha actual:%tc",)); } | |
def agregarTresNúmeros (x, y, z): NEW_LINE INDENT return [MASK] | |
Podemos configurar un entorno conda para ejecutar experimentos PLBART, el primer paso es descargar las dependencias. Suponemos que anaconda está instalada. Los requisitos adicionales (anotados en requisitos.txt) se pueden instalar ejecutando el siguiente script:
bash install_env.sh
Vaya al directorio data/github
y siga las instrucciones.
Vaya al directorio data/stackoverflow
y siga las instrucciones.
cd pretrain
bash binarize.sh
bash pretrain.sh GPU_IDS
[Nota] Entrenamos previamente PLBART en 8 GPU GeForce RTX 2080
(11 gb) (tomó ~11,5 días). Si desea entrenar previamente PLBART usando más GPU o GPU con más memoria, ajuste MAX_SENTENCES
, MAX_TOKENS
, UPDATE_FREQ
en consecuencia para mantener un tamaño de lote efectivo de 2048. Según fairseq, el tamaño de lote efectivo es igual a:
PER_GPU_TRAIN_BATCH_SIZE * NUM_GPU * UPDATE_FREQ
Tenga en cuenta que MAX_TOKENS
se refiere al tamaño de cada mini lote, en términos de cantidad de tokens. Durante nuestros experimentos, notamos que en una GPU de 11 GB, se pueden acomodar un máximo de 2048 tokens, lo que equivale a 4-5 ejemplos. Por lo tanto, configuramos UPDATE_FREQ
en 60, para que podamos lograr un tamaño de lote efectivo de ~2048.
Ajustamos y evaluamos PLBART en tres tipos de tareas posteriores.
Tipo | Tarea | Idioma(s) | Datos | Guiones | Puntos de control |
---|---|---|---|---|---|
Código a texto | Resumen de código | Python, Java, Rubí, PHP, Javascript, Ir | [ENLACE] | [ENLACE] | [ENLACE] |
Texto a código | Generación de código | Java | [ENLACE] | [ENLACE] | [ENLACE] |
Código a código | Traducción de código | Java, C# | [ENLACE] | [ENLACE] | [ENLACE] |
Refinamiento del código | Java | [ENLACE] | [ENLACE] | ||
Detección de clones | Java | [ENLACE] | [ENLACE] | ||
Detección de defectos | C/C++ | [ENLACE] | [ENLACE] |
cd pretrain
bash download.sh
cd ..
cd data/codeXglue
bash download.sh
cd ../..
cd evaluation/CodeBLEU/parser
bash build.sh
cd ../../..
Por ejemplo, queremos ajustar PLBART en la tarea Text-to-Code
. Entonces,
cd scripts/text_to_code
bash prepare.sh
bash run.sh GPU_IDS
cd ../..
Nota. Ajustamos PLBART en 1 GPU GeForce RTX 2080
(11 GB).
[NOTA] Presentamos aquí la estructura de archivos de este repositorio.
¿Cómo descargar datos de Github desde Google BigQuery?
Proporcionamos una guía detallada aquí.
Desajuste en el desempeño reportado en el documento y logrado utilizando los puntos de control publicados.
Existe una diferencia entre el desempeño de PLBART mencionado en el documento y el desempeño logrado con los puntos de control publicados. Los anotamos aquí. Tenga en cuenta que no hay cambios en la configuración del hiperparámetro. Proporcionamos exactamente el mismo valor que usamos en los scripts de bash. La diferencia de rendimiento que observamos quizás se deba a que se realizaron experimentos en diferentes momentos. Aunque no lo hicimos, recomendamos ajustar PLBART con múltiples semillas diferentes e informar las puntuaciones promedio.
La tarea mbart_base
no está presente en la versión oficial fairseq==0.9.0
.
Aunque usamos fairseq==0.9.0
, usamos una confirmación diferente que consiste en la tarea mbart_base
. Puede hacer lo siguiente que debería funcionar.
git clone https://github.com/pytorch/fairseq
cd fairseq
git checkout 698e3b91ffa832c286c48035bdff78238b0de8ae
pip install .
De lo contrario, puede considerar instalar fairseq==0.10.0
. Consulte este problema para realizar otros ajustes.
¿Cuáles pueden ser las longitudes máximas de entrada y salida para PLBART?
La longitud máxima es 512.
PLBART utiliza Fairseq, codeXglue y TransCoder y agradece a los autores de estos trabajos por su contribución.
El contenido de este repositorio está bajo la licencia MIT. La licencia también se aplica a los modelos previamente entrenados y ajustados.
@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"
}