IBM apre CodeNet per sistemi di machine learning che traducono e verificano il codice

IBM ha presentato la sua iniziativa CodeNet, che mira a fornire ai ricercatori un set di dati che consenta loro di sperimentare l'uso di tecniche di apprendimento automatico per creare traduttori di linguaggi di programmazione, generatori di codice e analizzatori. CodeNet include una raccolta di 14 milioni di esempi di codice che risolvono 4053 problemi di programmazione comuni. In totale, la raccolta contiene circa 500 milioni di righe di codice e copre 55 linguaggi di programmazione, sia linguaggi moderni come C++, Java, Python e Go, sia linguaggi legacy tra cui COBOL, Pascal e FORTRAN. Gli sviluppi del progetto sono distribuiti sotto la licenza Apache 2.0 e si prevede che i set di dati saranno distribuiti sotto forma di pubblico dominio.

Gli esempi sono annotati e implementano algoritmi identici in diversi linguaggi di programmazione. Si prevede che il set proposto aiuterà ad addestrare sistemi di apprendimento automatico e a sviluppare innovazioni nel campo della traduzione e dell'analisi del codice macchina, in modo simile a come il database di immagini annotate ImageNet ha aiutato lo sviluppo del riconoscimento di modelli e dei sistemi di visione artificiale. Vari concorsi di programmazione sono citati come una delle principali fonti di formazione delle collezioni.

A differenza dei traduttori tradizionali, che vengono implementati in base a regole di trasformazione, i sistemi di machine learning possono acquisire e tenere conto del contesto di utilizzo del codice. Quando si passa da un linguaggio di programmazione a un altro, il contesto è altrettanto importante quanto quando si traduce da un linguaggio umano a un altro. Questa mancanza di considerazione del contesto è ciò che impedisce la conversione del codice da linguaggi legacy come COBOL.

Avere un ampio database di implementazioni di algoritmi in diversi linguaggi aiuterà a creare sistemi universali di apprendimento automatico che, invece della traduzione diretta tra linguaggi specifici, manipoleranno una rappresentazione più astratta del codice, indipendente da linguaggi di programmazione specifici. Tale sistema può essere utilizzato come traduttore, traducendo il codice trasmesso in una qualsiasi delle lingue supportate nella sua rappresentazione astratta interna, dalla quale può quindi essere generato codice in più lingue.

Il sistema sarà anche in grado di eseguire trasformazioni bidirezionali. Ad esempio, le banche e gli enti governativi continuano a utilizzare progetti nell'obsoleto linguaggio COBOL. Un traduttore basato sull'apprendimento automatico sarà in grado di convertire il codice COBOL in una rappresentazione Java e, se necessario, tradurre nuovamente il frammento Java in codice COBOL.

Oltre alla traduzione tra lingue, vengono menzionate aree di applicazione di CodeNet come la creazione di sistemi di ricerca intelligente del codice e l'automazione del rilevamento dei cloni, nonché lo sviluppo di ottimizzatori e sistemi di correzione automatica del codice. In particolare, gli esempi presentati in CodeNet sono dotati di metadati che descrivono i risultati del test delle prestazioni, la dimensione del programma risultante, il consumo di memoria e lo stato, che permettono di distinguere il codice corretto da quello con errori (per distinguere il codice corretto da quello errato, il la raccolta include specificamente esempi con errori, la cui quota è del 29.5%). Un sistema di machine learning può tenere conto di questi metadati per generare il codice ottimale o per identificare regressioni nel codice analizzato (il sistema può capire che l'algoritmo nel codice inviato non è implementato in modo ottimale o contiene errori).

Fonte: opennet.ru

Aggiungi un commento