IBM ha presentato l'iniziativa CodeNet, volta a fornire ai ricercatori un insieme di dati per sperimentare l'applicazione di metodi di apprendimento automatico nella creazione di traduttori da un linguaggio di programmazione a un altro, nonché generatori e analizzatori di codice. CodeNet include una collezione di 14 milioni di esempi di codice che risolvono 4053 tipiche problematiche di programmazione. In totale, la collezione comprende circa 500 milioni di righe di codice e copre 55 linguaggi di programmazione, sia linguaggi moderni come C++, Java, Python e Go, sia linguaggi obsoleti, tra cui COBOL, Pascal e FORTRAN. I risultati del progetto sono distribuiti con licenza Apache 2.0, e i set di dati sono previsti per essere resi disponibili come patrimonio pubblico.
Gli esempi sono corredati di annotazioni e implementano algoritmi identici in diversi linguaggi di programmazione. Si presume che il set proposto supporterà l'addestramento dei sistemi di machine learning e promuoverà innovazioni nel campo della traduzione e dell'analisi automatica del codice, analogamente a come il database di immagini annotate ImageNet ha aiutato nello sviluppo dei sistemi di riconoscimento delle immagini e di visione artificiale. Tra le principali fonti per la formazione della collezione figurano diverse competizioni di программирование.
A differenza dei traduttori tradizionali, basati su regole di trasformazione, i sistemi di machine learning possono cogliere e considerare il contesto dell'uso del codice. Nella conversione da un linguaggio di programmazione a un altro, il contesto è altrettanto importante quanto nella traduzione da una lingua umana a un'altra. È proprio la mancanza di considerazione del contesto che ostacola la conversione di codice da linguaggi obsoleti, come il COBOL.
La disponibilità di un'ampia base di implementazioni di algoritmi in vari linguaggi faciliterà la creazione di sistemi universali di machine learning, che invece di una traduzione diretta tra linguaggi specifici, manipoleranno una rappresentazione più astratta del codice, indipendente dai linguaggi di programmazione specifici. Un sistema del genere potrebbe funzionare come un traduttore, convertendo il codice ricevuto in una delle lingue supportate nella sua rappresentazione astratta interna, da cui poi può essere generato codice in molteplici linguaggi.
Inoltre, il sistema sarà in grado di eseguire trasformazioni bidirezionali. Ad esempio, nelle banche e nelle istituzioni governative continuano ad essere utilizzati progetti in COBOL, un linguaggio obsoleto. Un traduttore basato su un sistema di machine learning sarà in grado di trasformare il codice COBOL in un formato in linguaggio Java, e, se necessario, tradurre un frammento in Java di nuovo nel codice COBOL.
Oltre alla traduzione tra lingue, le applicazioni di CodeNet includono la creazione di sistemi intelligenti per la ricerca del codice e l'automazione dell'identificazione di cloni, oltre allo 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 finale del programma, il consumo di memoria e uno stato che consente di distinguere il codice corretto da quello errato (per distinguere il codice corretto da quello non corretto, sono stati inclusi nella raccolta esempi con errori, la cui percentuale è pari al 29,5%). Il sistema di apprendimento automatico può considerare questi metadati per generare il codice più ottimale o per identificare eventuali regressioni nel codice analizzato (il sistema può comprendere che l'algoritmo fornito nel codice non è implementato in modo ottimale o contiene errori).
Fonte: opennet.ru
