SelfCodeAlign: Autoalinhamento para geração de código
Author
Venue
NeurIPS 2024
Abstract
O ajuste de instruções é uma abordagem de ajuste fino supervisionado que melhora significativamente a capacidade dos grandes modelos de linguagem (LLMs) de seguir instruções humanas. Propomos o SelfCodeAlign, o primeiro pipeline totalmente transparente e flexível para o autoalinhamento de LLMs de código, sem a necessidade de extensas anotações humanas ou destilação. O SelfCodeAlign emprega o mesmo modelo base para inferência ao longo de todo o processo de geração de dados. Primeiramente, ele extrai diversos conceitos de codificação a partir de trechos de código de alta qualidade para gerar novas tarefas. Em seguida, ele amostra múltiplas respostas por tarefa, emparelha cada uma com casos de teste e as valida em um ambiente sandbox. Por fim, exemplos aprovados são selecionados para o ajuste de instruções. Em nossos experimentos principais, usamos o SelfCodeAlign com o CodeQwen1.5-7B para gerar um conjunto de dados com 74 mil pares de instrução-resposta. O ajuste fino nesse conjunto de dados resulta em um modelo que atinge 67,1% de aprovação no HumanEval+, superando o CodeLlama-70B-Instruct apesar de ser dez vezes menor. Em todos os benchmarks, esse modelo ajustado supera consistentemente a versão original treinada com o OctoPack, o método de ponta anterior para ajuste de instruções sem anotações humanas ou destilação. Além disso, mostramos 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 mais 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 levou à criação do StarCoder2-Instruct, o primeiro LLM de código totalmente transparente, com licença permissiva e autoalinhado que alcança desempenho de codificação de ponta.
