IBM abre CodeNet para sistemas de aprendizado de máquina que traduzem e verificam código

A IBM revelou sua iniciativa CodeNet, que visa fornecer aos pesquisadores um conjunto de dados que lhes permita experimentar o uso de técnicas de aprendizado de máquina para criar tradutores de linguagem de programação, geradores de código e analisadores. CodeNet inclui uma coleção de 14 milhões de exemplos de código que resolvem 4053 problemas comuns de programação. No total, a coleção contém cerca de 500 milhões de linhas de código e abrange 55 linguagens de programação, tanto linguagens modernas como C++, Java, Python e Go, quanto linguagens legadas, incluindo COBOL, Pascal e FORTRAN. Os desenvolvimentos do projeto são distribuídos sob a licença Apache 2.0, e os conjuntos de dados estão planejados para serem distribuídos em domínio público.

Os exemplos são anotados e implementam algoritmos idênticos em diferentes linguagens de programação. Espera-se que o conjunto proposto ajude a treinar sistemas de aprendizado de máquina e a desenvolver inovações no campo de tradução e análise de código de máquina, semelhante a como o banco de dados de imagens anotadas ImageNet ajudou no desenvolvimento de sistemas de reconhecimento de padrões e visão computacional. Diversos concursos de programação são citados como uma das principais fontes de formação de acervo.

Ao contrário dos tradutores tradicionais, que são implementados com base em regras de tradução, os sistemas de aprendizagem automática podem capturar e ter em conta o contexto de utilização do código. Ao converter de uma linguagem de programação para outra, o contexto é tão importante quanto ao traduzir de uma linguagem humana para outra. Essa falta de consideração do contexto é o que impede que o código seja convertido de linguagens legadas como o COBOL.

Ter um grande banco de dados de implementações de algoritmos em diferentes linguagens ajudará a criar sistemas universais de aprendizado de máquina que, em vez de tradução direta entre linguagens específicas, manipulam uma representação mais abstrata do código, independente de linguagens de programação específicas. Tal sistema pode ser usado como tradutor, traduzindo o código transmitido em qualquer um dos idiomas suportados em sua representação abstrata interna, a partir da qual o código pode então ser gerado em vários idiomas.

O sistema também será capaz de realizar transformações bidirecionais. Por exemplo, bancos e agências governamentais continuam a utilizar projetos na linguagem COBOL desatualizada. Um tradutor baseado em aprendizado de máquina será capaz de converter o código COBOL em uma representação Java e, se necessário, traduzir o fragmento Java de volta em código COBOL.

Além da tradução entre idiomas, são mencionadas áreas de aplicação do CodeNet como a criação de sistemas inteligentes de busca de códigos e automação de detecção de clones, bem como o desenvolvimento de otimizadores e sistemas automáticos de correção de códigos. Em particular, os exemplos apresentados no CodeNet estão equipados com metadados que descrevem os resultados dos testes de desempenho, o tamanho do programa resultante, o consumo de memória e o estado, o que nos permite distinguir o código correto do código com erros (para distinguir o código correto do código incorreto, o a coleção inclui especificamente exemplos com erros, cuja proporção é de 29.5%). Um sistema de aprendizado de máquina pode levar esses metadados em consideração para gerar o código ideal ou para identificar regressões no código analisado (o sistema pode entender que o algoritmo no código enviado não está implementado de maneira ideal ou contém erros).

Fonte: opennet.ru

Adicionar um comentário