Lançamento oficial do código de nosso trabalho NAACL 2021, Pré-treinamento unificado para compreensão e geração de programas.
***** Os desempenhos do PLBART nas tarefas posteriores são registrados nesta planilha. *****
Notícias • Configuração • Pré-treinamento • Ajuste fino • Perguntas frequentes • Reconhecimento • Licença • Citação
Entrada barulhenta | Sequência Original |
---|---|
0 é a [MÁSCARA] Fibonacci [MÁSCARA] ? | |
public static main(String args[]) {data=Data(); Sistema . fora . (String.format("Data Atual:%tc", )); } | |
def addThreeNumbers (x, y, z): NEW_LINE INDENT return [MASK] | |
Podemos configurar um ambiente conda para executar experimentos PLBART, o primeiro passo é baixar as dependências. Presumimos que o anaconda esteja instalado. Os requisitos adicionais (anotados em requisitos.txt) podem ser instalados executando o seguinte script:
bash install_env.sh
Vá para o diretório data/github
e siga as instruções.
Vá para o diretório data/stackoverflow
e siga as instruções.
cd pretrain
bash binarize.sh
bash pretrain.sh GPU_IDS
[Nota] Pré-treinamos o PLBART em 8 GPUs GeForce RTX 2080
(11 GB) (demorou cerca de 11,5 dias). Se você deseja pré-treinar PLBART usando mais GPUs ou GPUs com mais memória, ajuste MAX_SENTENCES
, MAX_TOKENS
, UPDATE_FREQ
de acordo para manter um tamanho efetivo de lote de 2048. De acordo com fairseq, o tamanho efetivo de lote é igual a:
PER_GPU_TRAIN_BATCH_SIZE * NUM_GPU * UPDATE_FREQ
Observe que MAX_TOKENS
refere-se ao tamanho de cada minilote, em termos do número de tokens. Durante nossos experimentos, notamos que em uma GPU de 11 GB, um máximo de 2.048 tokens podem ser acomodados, o que equivale a 4-5 exemplos. Portanto, definimos UPDATE_FREQ
como 60, para que possamos atingir um tamanho de lote efetivo de aproximadamente 2.048.
Ajustamos e avaliamos o PLBART em três tipos de tarefas posteriores.
Tipo | Tarefa | Idiomas | Dados | Roteiros | Pontos de verificação |
---|---|---|---|---|---|
Código para texto | Resumo de código | Python, Java, Ruby, PHP, Javascript, Go | [LINK] | [LINK] | [LINK] |
Texto para código | Geração de código | Java | [LINK] | [LINK] | [LINK] |
Código para Código | Tradução de código | Java, C# | [LINK] | [LINK] | [LINK] |
Refinamento de código | Java | [LINK] | [LINK] | ||
Detecção de clones | Java | [LINK] | [LINK] | ||
Detecção de defeitos | C/C++ | [LINK] | [LINK] |
cd pretrain
bash download.sh
cd ..
cd data/codeXglue
bash download.sh
cd ../..
cd evaluation/CodeBLEU/parser
bash build.sh
cd ../../..
Por exemplo, queremos ajustar o PLBART na tarefa Text-to-Code
. Então,
cd scripts/text_to_code
bash prepare.sh
bash run.sh GPU_IDS
cd ../..
Observação. Ajustamos o PLBART em 1 GPU GeForce RTX 2080
(11 GB).
[NOTA] Apresentamos aqui a estrutura de arquivos deste repositório.
Como baixar dados do Github do Google BigQuery?
Fornecemos um guia detalhado aqui.
Incompatibilidade no desempenho relatada no artigo e alcançada usando os pontos de verificação liberados.
Há uma diferença entre o desempenho do PLBART mencionado no artigo e o desempenho alcançado com os checkpoints liberados. Nós os anotamos aqui. Observe que não há alteração na configuração do hiperparâmetro. Fornecemos exatamente o mesmo valor que usamos nos scripts bash. A diferença de desempenho que observamos talvez se deva à execução de experimentos em momentos diferentes. Embora não o tenhamos feito, recomendamos ajustar o PLBART com várias sementes diferentes e relatar as pontuações médias.
A tarefa mbart_base
não está presente no lançamento oficial fairseq==0.9.0
.
Embora tenhamos usado fairseq==0.9.0
, usamos um commit diferente que consiste na tarefa mbart_base
. Você pode fazer o seguinte, que deve funcionar.
git clone https://github.com/pytorch/fairseq
cd fairseq
git checkout 698e3b91ffa832c286c48035bdff78238b0de8ae
pip install .
Caso contrário, você pode considerar instalar fairseq==0.10.0
. Consulte este problema para fazer outros ajustes.
Quais podem ser os comprimentos máximos de entrada e saída para PLBART?
O comprimento máximo é 512.
PLBART usa Fairseq, codeXglue e TransCoder e agradece aos autores desses trabalhos por sua contribuição.
O conteúdo deste repositório está sob licença do MIT. A licença também se aplica aos modelos pré-treinados e 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"
}