A IBM apresentou a iniciativa CodeNet, voltada para fornecer aos pesquisadores um conjunto de dados que permite experimentar a aplicação de métodos de aprendizado de máquina para criar tradutores de uma linguagem de programação para outra, além de geradores e analisadores de código. O CodeNet inclui uma coleção de 14 milhões de exemplos de código que resolvem 4053 problemas de programação típicos. No total, a coleção conta com 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 obsoletas, incluindo COBOL, Pascal e FORTRAN. Os produtos do projeto são distribuídos sob a licença Apache 2.0, e os conjuntos de dados devem ser disponibilizados como domínio público.
Os exemplos são acompanhados de anotações e implementam algoritmos idênticos em diferentes linguagens de programação. Espera-se que o conjunto proposto ajude no treinamento de sistemas de aprendizado de máquina e no desenvolvimento de inovações nas áreas de tradução e análise automática de código, assim como o banco de dados de imagens anotadas ImageNet ajudou no desenvolvimento de sistemas de reconhecimento de padrões e visão computacional. Uma das principais fontes para a formação da coleção são várias competições de programação.
Ao contrário dos tradutores tradicionais, que são implementados com base em regras de transformação, os sistemas de aprendizado de máquina podem capturar e considerar 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 língua humana para outra. É exatamente a falta de consideração do contexto que dificulta a transformação de código de linguagens obsoletas, como COBOL.
A disponibilidade de uma grande base de implementações de algoritmos em diversas linguagens ajudará na criação de sistemas universais de aprendizado de máquina, que, em vez de realizar uma tradução direta entre linguagens específicas, manipulam uma representação de código mais abstrata, independente das linguagens de programação. Esse sistema pode ser usado como um tradutor, convertendo o código enviado em qualquer uma das linguagens suportadas para sua representação abstrata interna, a partir da qual pode ser gerado código em várias linguagens.
Além disso, o sistema poderá realizar transformações bidirecionais. Por exemplo, em bancos e instituições governamentais, ainda estão em uso projetos na linguagem antiquada COBOL. Um tradutor baseado em um sistema de aprendizado de máquina poderá converter código em COBOL para uma representação em Java e, se necessário, traduzir um fragmento em Java de volta para código em COBOL.
Além da tradução entre linguagens, são mencionadas áreas de aplicação do CodeNet, como a criação de sistemas inteligentes de busca de código e automação na detecção de clones, bem como o desenvolvimento de otimizadores e sistemas de correção automática de código. Em particular, os exemplos apresentados no CodeNet são acompanhados de metadados que descrevem os resultados de testes de desempenho, o tamanho resultante do programa, consumo de memória e estado, permitindo distinguir código correto de código com erros (para diferenciar código correto de incorreto, a coleção inclui intencionalmente exemplos com erros, cuja fração é de 29,5%). O sistema de aprendizado de máquina pode levar em conta esses metadados para gerar o código mais otimizado ou identificar regressões no código analisado (o sistema pode entender que o algoritmo no código enviado não está implementado de forma otimizada ou contém erros).
Fonte: opennet.ru
