Conheça o CodeNet, um projeto IBM para sistemas de aprendizado de máquina. Confira os detalhes dessa moderna e poderosa ferramenta.
A IBM revelou recentemente seu novo projeto chamado “CodeNet”, que visa fornecer aos pesquisadores um conjunto de dados para experimentar o uso de técnicas de aprendizado de máquina para criar tradutores de uma linguagem de programação para outra, bem como geradores e analisadores de código.
CodeNet, um projeto IBM para sistemas de aprendizado de máquina
A CodeNet inclui uma coleção de 14 milhões de amostras 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 legadas, incluindo COBOL, Pascal e FORTRAN.
“O software está devorando o mundo”, escreveu o famoso empresário americano Marc Andreessen em 2011. Avançando para os dias de hoje: o software é encontrado em serviços financeiros e de saúde, smartphones e casas inteligentes. Até os carros agora têm mais de 100 milhões de linhas de código.
Os desenvolvimentos do projeto são lançados sob a licença Apache 2.0 e os conjuntos de dados devem ser lançados em domínio público.
Os exemplos são anotados e implementam algoritmos idênticos em diferentes linguagens de programação.
O conjunto proposto tem como objetivo auxiliar no treinamento de sistemas de aprendizado de máquina e no desenvolvimento de inovações no campo da tradução e análise automática de código, por analogia com a forma como o banco de dados ImageNet de imagens anotadas auxiliou no desenvolvimento de sistemas de reconhecimento de imagem e visão artificial.
Vários concursos de programação são mencionados como uma das principais fontes de construção de coleções.
O Project CodeNet pode impulsionar especificamente a inovação algorítmica para extrair esse contexto com modelos de sequência por sequência, muito parecido com o que aplicamos em linguagens humanas, para fazer uma diferença mais significativa na compreensão do código por máquina em vez de no processamento do código.
Ao contrário dos tradutores tradicionais baseados em regras de tradução, os sistemas de aprendizado de máquina podem capturar e levar em consideração o contexto de uso 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. É a falta de consciência contextual que impede que o código seja convertido de linguagens legadas como COBOL.
A presença de uma grande base de implementações de algoritmos em várias linguagens ajudará a criar sistemas universais de aprendizado de máquina que, em vez de tradução ao vivo entre linguagens específicas, manipulam uma representação mais abstrata do código, independente de linguagens de programação específicas.
Esse sistema pode ser usado como um tradutor que traduz o código transmitido em qualquer um dos idiomas suportados em sua representação abstrata interna, a partir da qual o código em muitos idiomas pode ser gerado.
Incluindo o sistema, você pode realizar transformações bidirecionais. Por exemplo, bancos e agências governamentais continuam a usar projetos COBOL legados.
Um tradutor de aprendizado de máquina pode converter código COBOL em representação Java e, opcionalmente, traduzir um fragmento Java de volta para código COBOL.
Além da tradução entre idiomas, são mencionadas áreas de aplicação da CodeNet como a criação de sistemas inteligentes de busca de código e a automação da detecção de clones, bem como o desenvolvimento de otimizadores e sistemas para correção automática de código.
Em particular, as amostras apresentadas na CodeNet são fornecidas com metadados que descrevem os resultados do teste de desempenho, o tamanho do programa resultante, o consumo de memória e o status para distinguir o código bom do código com defeito (para distinguir o código correto do código ruim, exemplos com erros são especialmente incluídos na coleção, cuja participaçã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 detectar regressões no código analisado (o sistema pode entender que o algoritmo não está implementado de forma otimizada no código transmitido ou contém erros).
Por fim, se você estiver interessado em aprender mais sobre a CodeNet, pode verificar os detalhes no seguinte endereço.