Los puntos clave no están disponibles para este artículo en este momento.
Con el reciente éxito de los embeddings en el procesamiento del lenguaje natural, se ha investigado sobre la aplicación de métodos similares al análisis de código. La mayoría de los trabajos intentan procesar el código directamente o utilizar una representación de árbol sintáctico, tratándolo como oraciones escritas en un lenguaje natural. Sin embargo, ninguno de los métodos existentes es suficiente para comprender de manera robusta la semántica del programa, debido a características estructurales como las llamadas a funciones, las ramificaciones y el orden intercambiable de las instrucciones. En este artículo, proponemos una técnica de procesamiento novedosa para aprender la semántica del código y la aplicamos a una variedad de tareas de análisis de programas. En particular, estipulamos que una hipótesis distribucional robusta del código se aplica tanto a programas generados por humanos como por máquinas. Siguiendo esta hipótesis, definimos un espacio de embedding, inst2vec, basado en una Representación Intermedia (IR) del código que es independiente del lenguaje de programación fuente. Proporcionamos una definición novedosa del flujo contextual para esta IR, aprovechando tanto el flujo de datos como el de control subyacentes del programa. Luego analizamos los embeddings cualitativamente utilizando analogías y agrupamientos, y evaluamos la representación aprendida en tres tareas de alto nivel diferentes. Mostramos que incluso sin ajuste fino, una única arquitectura RNN y embeddings fijos de inst2vec superan a enfoques especializados para la predicción de rendimiento (mapeo de dispositivo de computación, optimización del grosor de hilos); y clasificación de algoritmos a partir de código bruto (104 clases), donde establecemos un nuevo estado del arte.
Ben‐Nun et al. (Tue,) estudiaron esta cuestión.