FacebookO TransCoder usa AI para converter o código de uma linguagem de programação para outra

FacebookO TransCoder usa AI para converter o código de uma linguagem de programação para outra 1

Pesquisadores em Facebook desenvolveram um novo sistema de IA (inteligência artificial) que converte o código-fonte de uma linguagem de programação de alto nível para outra.

Chamado de “TransCoder”, esta ferramenta de conversão de linguagem baseada em AI pode traduzir entre linguagens de alto nível, como C ++, Java e Python em um código diferente com alta precisão.

O estudo de pesquisa foi detalhado no artigo intitulado “Tradução não supervisionada de linguagens de programação”.

Converter o código de uma linguagem de programação para outra é uma tarefa difícil até mesmo para um programador experiente, pois requer conhecimento da linguagem de origem e da linguagem de destino, tornando os projetos de tradução de código caros.

Os transcompiladores eliminam a necessidade de reescrever o novo código do zero. No entanto, ainda é uma tarefa complicada para um desenvolvedor lidar com diferentes linguagens que podem ter uma sintaxe diferente, alterações de biblioteca, tipos de variáveis ​​e adaptação de IA.

FacebookO TransCoder “Neural Translator” da empresa cuida de todos esses problemas com uma abordagem de aprendizagem não supervisionada. Isso significa que ele pode ser executado sem supervisão com uma quantidade mínima de supervisão ou intervenção humana para encontrar padrões previamente não detectados em conjuntos de dados sem rótulos e superar as linhas de base comerciais baseadas em regras por uma margem “significativa”.

No artigo, os pesquisadores propam aplicar abordagens recentes em tradução automática não supervisionada, aproveitando uma grande quantidade de código-fonte monolíngue do GitHub para treinar um modelo, TransCoder, para traduzir entre três linguagens populares: C ++, Java e Python.

De acordo com o artigo, o modelo do transcodificador funciona com base em três princípios principais:

  • O primeiro princípio inicializa o modelo com um pré-treinamento multilíngue do modelo de linguagem mascarada. Como resultado, pedaços de código que expressam as mesmas instruções são mapeados para a mesma representação, independentemente da linguagem de programação.
  • Em seguida, vem a codificação automática Denoising, onde o decodificador é treinado para gerar sequências válidas mesmo quando alimentado com dados ruidosos, e aumenta a robustez do codificador para ruído de entrada.
  • Finalmente, existe um processo de “retrotradução” que é usado para converter o código de volta para o primeiro idioma. Isso permite que o TransCoder gere dados paralelos para serem comparados aos originais. A diferença encontrada neste processo é utilizada para reforçar o treinamento.
  • A ferramenta foi treinada com mais de 2.8 milhões de GitHub de código aberto. Facebook A equipe de pesquisa também realizou testes com 852 funções paralelas em C ++, Java e Python da GeeksforGeeks, uma plataforma online que reúne problemas de codificação e apresenta soluções em diversas linguagens de programação.

    Usando os dois dados acima, eles desenvolveram uma nova métrica – precisão computacional – que verifica se as funções traduzidas geram as mesmas saídas que uma referência com as mesmas entradas.

    Por exemplo, ao converter de C ++ para Java, TransCoder atingiu 74.8% de precisão nos resultados esperados, enquanto a conversão de Python para C ++ viu 57.8% de precisão, enquanto Java para C ++, a precisão é 91.6%

    “Embora nunca tenha dados paralelos, o modelo consegue traduzir funções com alta precisão e alinhar adequadamente as funções da biblioteca padrão nas três línguas, superando as linhas de base comerciais e baseadas em regras por uma margem significativa”, escreveu o co- autores no artigo.

    “Nossa abordagem é simples, não requer nenhum conhecimento nas linguagens de origem ou destino e pode ser facilmente estendida para a maioria das linguagens de programação. Embora não seja perfeito, o modelo pode ajudar a reduzir a quantidade de trabalho e o nível de conhecimento necessário para traduzir com sucesso uma base de código. ”