IBM obre CodeNet per a sistemes d'aprenentatge automàtic que tradueixen i verifiquen el codi

IBM ha presentat la seva iniciativa CodeNet, que té com a objectiu proporcionar als investigadors un conjunt de dades que els permeti experimentar amb l'ús de tècniques d'aprenentatge automàtic per crear traductors de llenguatge de programació, generadors de codi i analitzadors. CodeNet inclou una col·lecció de 14 milions d'exemples de codi que resolen 4053 problemes de programació habituals. En total, la col·lecció conté uns 500 milions de línies de codi i cobreix 55 llenguatges de programació, tant llenguatges moderns com C++, Java, Python i Go, com llenguatges heretats com COBOL, Pascal i FORTRAN. Els desenvolupaments del projecte es distribueixen sota la llicència Apache 2.0 i es preveu que els conjunts de dades es distribueixin en forma de domini públic.

Els exemples estan anotats i implementen algorismes idèntics en diferents llenguatges de programació. S'espera que el conjunt proposat ajudi a entrenar sistemes d'aprenentatge automàtic i desenvolupar innovacions en el camp de la traducció i l'anàlisi de codi màquina, de manera similar a com la base de dades d'imatges anotades ImageNet va ajudar al desenvolupament de sistemes de reconeixement de patrons i visió per ordinador. Diversos concursos de programació són citats com una de les principals fonts de formació de col·leccions.

A diferència dels traductors tradicionals, que s'implementen basant-se en regles de traducció, els sistemes d'aprenentatge automàtic poden capturar i tenir en compte el context d'ús del codi. Quan es converteix d'un llenguatge de programació a un altre, el context és tan important com quan es tradueix d'un llenguatge humà a un altre. Aquesta manca de consideració del context és el que impedeix que el codi es converteixi des de llenguatges heretats com COBOL.

Disposar d'una gran base de dades d'implementacions d'algorismes en diferents idiomes ajudarà a crear sistemes universals d'aprenentatge automàtic que, en comptes de la traducció directa entre llenguatges específics, manipulen una representació més abstracta del codi, independentment dels llenguatges de programació específics. Aquest sistema es pot utilitzar com a traductor, traduint el codi transmès en qualsevol dels idiomes compatibles a la seva representació abstracta interna, a partir de la qual es pot generar codi en diversos idiomes.

El sistema també podrà realitzar transformacions bidireccionals. Per exemple, els bancs i les agències governamentals continuen utilitzant projectes en el llenguatge COBOL obsolet. Un traductor basat en l'aprenentatge automàtic podrà convertir el codi COBOL en una representació Java i, si cal, tornar a traduir el fragment Java al codi COBOL.

A més de la traducció entre idiomes, s'esmenten àrees d'aplicació de CodeNet com la creació de sistemes intel·ligents de cerca de codi i l'automatització de la detecció de clons, així com el desenvolupament d'optimitzadors i sistemes de correcció automàtica de codi. En particular, els exemples presentats a CodeNet estan equipats amb metadades que descriuen els resultats de les proves de rendiment, la mida del programa resultant, el consum de memòria i l'estat, la qual cosa ens permet distingir el codi correcte del codi amb errors (per distingir el codi correcte del codi incorrecte, la La recollida inclou específicament exemples amb errors, la quota dels quals és del 29.5 %. Un sistema d'aprenentatge automàtic pot tenir en compte aquestes metadades per generar el codi més òptim o per identificar regressions en el codi analitzat (el sistema pot entendre que l'algorisme del codi enviat no està implementat de manera òptima o conté errors).

Font: opennet.ru

Afegeix comentari