Google AI ha publicado recientemente resultados sobre la compilación de código mejorada con ML y cómo mejoró la productividad de los desarrolladores considerando diferentes métricas.
La compilación de código es una herramienta esencial en cualquier entorno de desarrollo integrado (IDE) para ayudar a los desarrolladores a escribir códigos. Estos sistemas son principalmente basados en reglas o basados en semántica en los que se tiene acceso al repositorio completo y estructura de los lenguajes de programación. Los rápidos avances en el procesamiento del lenguaje natural (NLP) abrieron una nueva dirección para utilizar modelos de aprendizaje profundo para proporcionar sugerencias más inteligentes a los desarrolladores. Como uno de los ejemplos recientes, podemos llamar a Copilot un nuevo servicio de inteligencia artificial para la compilación de código de Github.
Esta nueva arquitectura ha aprovechado tanto un transformador de sistema como un motor semántico como solución híbrida. Para la primera parte, se entrena un transformador basado en el repositorio de código. Como explicaron en la publicación del blog:
Entrenamos un solo modelo en ocho lenguajes (C++, Java, Python, Go, Typescript, Proto, Kotlin y Dart) y observamos un rendimiento mejorado o igual en todos los lenguajes, eliminando la necesidad de modelos dedicados. Además, encontramos que un tamaño de modelo de ~ 0.5B de parámetros ofrece una buena compensación para una alta precisión de predicción con baja latencia y bajo costo de recursos. El modelo se beneficia enormemente de la calidad del monorepo, que se hace cumplir mediante directrices y revisiones. Para las sugerencias de varias líneas, aplicamos iterativamente el modelo de una sola línea con umbrales aprendidos para decidir si comenzar a predecir las finalizaciones para la siguiente línea.
Esta arquitectura se muestra en el siguiente diagrama:
Los modelos de transformadores se utilizan para predecir el resto de la línea o líneas de código.
El motor semántico verifica si la frase sugerida es factible considerando la gramática y las reglas del idioma. Las comprobaciones semánticas podrían ser la resolución de referencias, la corrección de la invocación de métodos y la comprobación de tipos, por nombrar algunas. Los árboles de sintaxis abstracta se utilizan para permitir una comprensión estructural completa de los códigos escritos.
El siguiente diagrama arquitectónico muestra la solución final.
Arquitectura final de compilación de código mejorado con ML
Este sistema es utilizado por más de 10k desarrolladores de Google. Mostró una tasa de aceptación del 25-34 % con más del 3 % de código completado por este sistema. Mejoró el tiempo de iteración para Googlers en un 6%.
Uno de los desarrolladores de Google. tuiteó sobre esta herramienta:
No sé qué significa nada de esto, pero las finalizaciones han sido realmente útiles.
Junto con esta noticia, Github publicó recientemente los resultados de Copilot en un trabajo de investigación para obtener más visibilidad sobre el rendimiento de Copilot para los desarrolladores.