Simple Science

Ciência de ponta explicada de forma simples

# Informática# Engenharia de software# Inteligência Artificial# Computação e linguagem

Novo Framework para Geração de Código a partir de Linguagem Natural

Um framework melhora a geração de código para linguagens especializadas usando documentação.

― 8 min ler


Transformações de CódigoTransformações de Códigodo Frameworkcodificação de linguagem especializada.Abordagem inovadora melhora a
Índice

Avanços recentes em inteligência artificial mostraram que modelos de linguagem grandes podem converter linguagem natural em código de forma eficaz. Esses modelos se saem bem com linguagens de programação comuns como C++, Java e Python, mas têm dificuldade com linguagens especializadas como YAML e JSON. Isso acontece principalmente porque essas linguagens têm regras e estruturas específicas que os modelos podem não ter encontrado durante o treinamento.

Para lidar com esse problema, pesquisadores tentaram vários métodos, como fornecer exemplos ou ajustar os modelos. No entanto, essas abordagens muitas vezes não funcionam bem devido à quantidade limitada de dados específicos para essas linguagens e à sensibilidade de como os comandos são estruturados. Apesar desses desafios, muitas organizações mantêm Documentação extensa sobre suas linguagens estruturadas, que pode ser valiosa para orientar a Geração de Código.

Neste artigo, apresentamos uma nova estrutura projetada para usar essa documentação rica de forma eficaz. A estrutura divide a tarefa de gerar código em duas etapas. Primeiro, identifica as bibliotecas apropriadas da documentação que correspondem à consulta em linguagem natural. Em segundo lugar, gera código enquanto segue as regras descritas na documentação dessas bibliotecas.

Metodologia

Testamos nossa estrutura com duas linguagens estruturadas complexas: Ansible YAML e comandos Bash. A avaliação foi realizada em dois contextos: fora do domínio (OOD), onde o modelo vê bibliotecas completamente novas durante o teste, e dentro do domínio (ID), onde algumas bibliotecas do treinamento aparecem no teste.

Nossos testes extensivos demonstraram que nossa estrutura oferece resultados melhores consistentemente em várias métricas. Ela reduz tanto erros sintáticos quanto semânticos no código gerado, especialmente para linguagens que têm menos dados de treinamento disponíveis.

Contexto

A tarefa de converter linguagem natural em código ganhou importância à medida que surgiram ferramentas para ajudar os desenvolvedores a escrever código de forma mais eficaz. Essas ferramentas permitem que os usuários descrevam suas intenções sem precisar saber os detalhes da linguagem de programação. Ferramentas como Amazon Code Whisperer e GitHub Copilot mostraram ótimos resultados nessa área para linguagens populares.

No entanto, essas ferramentas enfrentam desafios significativos ao lidarem com linguagens especializadas. Essas linguagens, muitas vezes adaptadas a indústrias ou aplicações específicas, têm regras e formatos únicos que podem variar bastante. Muitas empresas usam essas linguagens para automação e gerenciamento de infraestrutura, mas os modelos existentes geralmente não conseguem lidar bem com elas devido à falta de dados relevantes para treinamento.

Enquanto alguns métodos tentam melhorar o desempenho do modelo usando exemplos e documentação, eles muitas vezes não conseguem capturar a complexidade das linguagens estruturadas. Como resultado, o código gerado pode ser incorreto ou sem sentido. No entanto, as empresas geralmente mantêm documentação detalhada que explica a Sintaxe e a estrutura dessas linguagens especializadas. Acreditamos que essa documentação pode ser melhor aproveitada para melhorar a geração de código.

Visão Geral da Estrutura

A estrutura proposta opera em duas etapas. A primeira etapa envolve identificar a documentação relevante para a tarefa em questão. Nesta fase, ela recupera informações sobre as bibliotecas que são mais aplicáveis à consulta em linguagem natural. A segunda etapa se concentra em gerar código enquanto segue as regras e a estrutura definidas na documentação recuperada.

Etapa 1: Recuperação de Informações

Na primeira etapa, nosso sistema recupera um conjunto de documentos que descrevem bibliotecas relevantes. Cada documento fornece detalhes sobre o que a biblioteca pode fazer, sua sintaxe e quaisquer regras especiais que devem ser seguidas. Experimentamos dois métodos para recuperação de informações: recuperação esparsa e densa.

  • Recuperação Esparsa: Esse método usa técnicas tradicionais para identificar documentos relevantes com base na correspondência de palavras-chave.
  • Recuperação Densa: Nesta abordagem, usamos redes neurais para encontrar documentos que são semanticamente similares à consulta. Isso pode potencialmente gerar resultados melhores, pois pode reconhecer sinônimos e termos relacionados que podem não ser uma correspondência exata.

Etapa 2: Geração de Código

A segunda etapa se concentra em gerar o trecho de código. Ela se baseia na documentação recuperada e usa regras derivadas dela para orientar o processo de geração de código. Isso garante que o código gerado siga a sintaxe e a estrutura especificadas na documentação da biblioteca.

Modelos e Esquemas

O modelo usa modelos que representam a estrutura do código. Cada modelo define partes estáticas e variáveis. A parte estática é fixa, enquanto a parte variável pode mudar dependendo dos requisitos específicos da consulta do usuário. Esse modelo ajuda o modelo a entender como organizar corretamente os diferentes componentes do código.

O modelo também utiliza regras de esquema que especificam palavras-chave válidas para cada campo e descrevem como os diferentes campos se relacionam. Por exemplo, certos campos podem ser obrigatórios enquanto outros são opcionais. Ao seguir essas regras de esquema durante a geração, o modelo pode evitar erros que poderiam surgir da geração de código inválido ou incorreto.

Sinais de Ativação

Durante todo o processo de geração, a estrutura usa sinais de ativação para guiar o modelo. Esses sinais indicam quando condições específicas são atendidas durante o processo de geração de código. Por exemplo, se o modelo gera uma palavra-chave específica, isso pode ativar regras que ditam quais palavras-chave adicionais são válidas naquele ponto do código.

Avaliação

Nós avaliamos nossa estrutura com tarefas de Ansible YAML e comandos Bash. A avaliação incluiu configurações tanto dentro quanto fora do domínio para avaliar a eficácia da abordagem sob várias condições.

Conjuntos de Dados

Para Ansible YAML, compilamos um conjunto de dados de várias fontes que inclui inúmeras amostras. Esse conjunto de dados contém instâncias de linguagem estruturada para treinar e avaliar o modelo de forma eficaz. Para o comando Bash, selecionamos um conjunto de dados que apresenta utilitários comuns do Bash, garantindo que os dados de treinamento e teste sejam relevantes.

Métricas

Usamos várias métricas diferentes para avaliação:

  1. Correspondência Exata: Mede com que frequência o código gerado corresponde exatamente ao comando de referência.
  2. Token F1 Score: Avalia a correção do código gerado com base nos tokens individuais no comando.
  3. Precisão do Nome do Comando: Verifica se a utilidade correta do Bash está sendo usada no comando gerado.

Resultados

Nossa estrutura mostrou uma melhoria consistente no desempenho em comparação com métodos existentes. Em cada cenário, ela superou as referências em todas as métricas. Por exemplo, a precisão dos nomes dos comandos e a correção da sintaxe gerada melhoraram significativamente com nossa estrutura.

Análise de Desempenho

  1. Melhoria Sobre as Referências: Nossa estrutura demonstrou claramente uma capacidade de superar métodos tradicionais. O uso de recuperação de informações e abordagens de geração restrita resultou em código mais preciso e sintaticamente correto.
  2. Robustez em Configurações de Baixo Recurso: A estrutura se destacou em cenários com dados de treinamento limitados, tornando-se particularmente útil para linguagens onde os dados são escassos.
  3. Adaptação Dinâmica: Incorporando documentação e regras de esquema no processo de geração, a estrutura pode se adaptar a várias situações, garantindo que o código gerado atenda aos padrões exigidos.

Trabalho Futuro

Embora nossa estrutura mostre potencial, há áreas para melhoria e pesquisa adicional. Um aspecto significativo é a necessidade de treinar os componentes de recuperação e geração em conjunto. Ao fazer isso, podemos reduzir os erros potenciais que podem ocorrer quando a fase de recuperação não consegue garantir a documentação mais relevante.

Outra área a explorar é a eficiência computacional de nossa abordagem. Embora a decodificação restrita possa adicionar alguma sobrecarga de processamento, otimizar isso poderia levar a um desempenho ainda mais rápido sem sacrificar a precisão.

Além disso, integrar técnicas baseadas em analisadores pode ajudar a estrutura a entender melhor regras gramaticais complexas. Isso poderia expandir sua aplicabilidade a uma variedade mais ampla de linguagens estruturadas.

Conclusão

A estrutura proposta avança significativamente a tarefa de gerar código a partir de linguagem natural para linguagens estruturadas especializadas. Ao utilizar efetivamente a documentação e as regras de esquema, ela reduz erros comuns enquanto melhora a precisão geral. Nossas avaliações destacam seus pontos fortes, especialmente em cenários de baixo recurso onde os métodos tradicionais enfrentam dificuldades.

Este trabalho não apenas contribui para o campo da geração de código, mas também abre novas avenidas para pesquisa. Acreditamos que, ao continuar a refinar esses métodos, o potencial da IA para melhorar as práticas de programação só aumentará, facilitando a vida dos desenvolvedores para traduzir suas ideias em código funcional.

Através da abertura de nossos conjuntos de dados e código, esperamos inspirar mais pesquisas e inovações nessa área, avançando as capacidades da IA na programação.

Fonte original

Título: DocCGen: Document-based Controlled Code Generation

Resumo: Recent developments show that Large Language Models (LLMs) produce state-of-the-art performance on natural language (NL) to code generation for resource-rich general-purpose languages like C++, Java, and Python. However, their practical usage for structured domain-specific languages (DSLs) such as YAML, JSON is limited due to domain-specific schema, grammar, and customizations generally unseen by LLMs during pre-training. Efforts have been made to mitigate this challenge via in-context learning through relevant examples or by fine-tuning. However, it suffers from problems, such as limited DSL samples and prompt sensitivity but enterprises maintain good documentation of the DSLs. Therefore, we propose DocCGen, a framework that can leverage such rich knowledge by breaking the NL-to-Code generation task for structured code languages into a two-step process. First, it detects the correct libraries using the library documentation that best matches the NL query. Then, it utilizes schema rules extracted from the documentation of these libraries to constrain the decoding. We evaluate our framework for two complex structured languages, Ansible YAML and Bash command, consisting of two settings: Out-of-domain (OOD) and In-domain (ID). Our extensive experiments show that DocCGen consistently improves different-sized language models across all six evaluation metrics, reducing syntactic and semantic errors in structured code. We plan to open-source the datasets and code to motivate research in constrained code generation.

Autores: Sameer Pimparkhede, Mehant Kammakomati, Srikanth Tamilselvam, Prince Kumar, Ashok Pon Kumar, Pushpak Bhattacharyya

Última atualização: 2024-07-03 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2406.11925

Fonte PDF: https://arxiv.org/pdf/2406.11925

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes