AutoAlinhamentoDeCódigo: Autoalinhamento para Geração de Código
SelfCodeAlign: Self-Alignment for Code Generation
October 31, 2024
Autores: Yuxiang Wei, Federico Cassano, Jiawei Liu, Yifeng Ding, Naman Jain, Zachary Mueller, Harm de Vries, Leandro von Werra, Arjun Guha, Lingming Zhang
cs.AI
Resumo
A afinação de instruções é uma abordagem supervisionada de ajuste fino que melhora significativamente a capacidade de grandes modelos de linguagem (LLMs) de seguir instruções humanas. Propomos o SelfCodeAlign, o primeiro pipeline totalmente transparente e permissivo para autoalinhamento de LLMs de código sem anotações humanas extensas ou destilação. O SelfCodeAlign utiliza o mesmo modelo base para inferência ao longo do processo de geração de dados. Ele extrai primeiro diversos conceitos de codificação de trechos de semente de alta qualidade para gerar novas tarefas. Em seguida, amostra várias respostas por tarefa, emparelha cada uma com casos de teste e as valida em um ambiente de sandbox. Por fim, exemplos aprovados são selecionados para a afinação de instruções. Em nossos experimentos principais, utilizamos o SelfCodeAlign com o CodeQwen1.5-7B para gerar um conjunto de dados de 74 mil pares de instrução-resposta. O ajuste fino neste conjunto de dados resulta em um modelo que alcança 67,1 pass@1 no HumanEval+, superando o CodeLlama-70B-Instruct apesar de ser dez vezes menor. Em todos os benchmarks, este modelo ajustado finamente supera consistentemente a versão original treinada com o OctoPack, o método anteriormente líder em afinação de instruções sem anotações humanas ou destilação. Além disso, demonstramos que o SelfCodeAlign é eficaz em LLMs de vários tamanhos, de 3B a 33B, e que os modelos base podem se beneficiar mais do alinhamento com sua própria distribuição de dados. Validamos ainda a eficácia de cada componente em nosso pipeline, mostrando que o SelfCodeAlign supera tanto a destilação direta do GPT-4o quanto os principais métodos de destilação baseados no GPT-3.5, como o OSS-Instruct e o Evol-Instruct. O SelfCodeAlign também resultou na criação do StarCoder2-Instruct, o primeiro LLM de código totalmente transparente, licenciado de forma permissiva e autoalinhado que alcança desempenho de codificação de ponta.
English
Instruction tuning is a supervised fine-tuning approach that significantly
improves the ability of large language models (LLMs) to follow human
instructions. We propose SelfCodeAlign, the first fully transparent and
permissive pipeline for self-aligning code LLMs without extensive human
annotations or distillation. SelfCodeAlign employs the same base model for
inference throughout the data generation process. It first extracts diverse
coding concepts from high-quality seed snippets to generate new tasks. It then
samples multiple responses per task, pairs each with test cases, and validates
them in a sandbox environment. Finally, passing examples are selected for
instruction tuning. In our primary experiments, we use SelfCodeAlign with
CodeQwen1.5-7B to generate a dataset of 74k instruction-response pairs.
Finetuning on this dataset leads to a model that achieves a 67.1 pass@1 on
HumanEval+, surpassing CodeLlama-70B-Instruct despite being ten times smaller.
Across all benchmarks, this finetuned model consistently outperforms the
original version trained with OctoPack, the previous state-of-the-art method
for instruction tuning without human annotations or distillation. Additionally,
we show that SelfCodeAlign is effective across LLMs of various sizes, from 3B
to 33B, and that the base models can benefit more from alignment with their own
data distribution. We further validate each component's effectiveness in our
pipeline, showing that SelfCodeAlign outperforms both direct distillation from
GPT-4o and leading GPT-3.5-based distillation methods, such as OSS-Instruct and
Evol-Instruct. SelfCodeAlign has also led to the creation of
StarCoder2-Instruct, the first fully transparent, permissively licensed, and
self-aligned code LLM that achieves state-of-the-art coding performance.Summary
AI-Generated Summary