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

IBM ha presentato l'iniziativa CodeNet, che mira a fornire ai ricercatori un set di dati per sperimentare metodi di apprendimento automatico per la creazione di traduttori di linguaggio, generatori di codice e analizzatori di codice. CodeNet include una raccolta di 14 milioni di esempi di codice che risolvono 4053 problemi di programmazione comuni. In totale, la raccolta comprende circa 500 milioni di righe di codice e copre 55 linguaggi di programmazione, inclusi linguaggi moderni come C++, Java, Python e Go, nonché linguaggi legacy come COBOL, Pascal e FORTRAN. Il lavoro del progetto è concesso in licenza con licenza Apache 2.0 e si prevede che i set di dati saranno resi pubblici.

Gli esempi sono annotati e implementano algoritmi identici in vari linguaggi di programmazione. Si spera che il set proposto contribuisca all'addestramento di sistemi di apprendimento automatico e allo sviluppo di innovazioni nel campo della traduzione del codice e dell'analisi sintattica, in modo simile a come il database di immagini annotate ImageNet ha contribuito allo sviluppo di sistemi di riconoscimento delle immagini e di visione artificiale. Diversi concorsi di programmazione sono citati come una delle principali fonti per la raccolta.

A differenza dei traduttori tradizionali basati su regole di trasformazione, i sistemi di apprendimento automatico possono catturare e tenere conto del contesto di utilizzo del codice. Quando si converte da un linguaggio di programmazione a un altro, il contesto non è meno importante che quando si traduce da un linguaggio umano a un altro. È proprio questa mancanza di contesto che ostacola la conversione del codice da linguaggi legacy come COBOL.

Disporre di un ampio database di implementazioni di algoritmi in vari linguaggi faciliterà la creazione di sistemi universali di apprendimento automatico che, invece di tradurre direttamente tra linguaggi specifici, manipolano una rappresentazione più astratta del codice, indipendente dai linguaggi di programmazione specifici. Un sistema di questo tipo può essere utilizzato come traduttore, traducendo il codice inviato in qualsiasi linguaggio supportato nella propria rappresentazione astratta interna, da cui il codice può quindi essere generato in più linguaggi.

Il sistema sarà anche in grado di eseguire trasformazioni bidirezionali. Ad esempio, banche ed enti governativi utilizzano ancora progetti scritti nel linguaggio legacy COBOL. Un traduttore basato sull'apprendimento automatico sarà in grado di convertire il codice COBOL nella sua rappresentazione Java e, se necessario, di ritradurre un frammento Java in codice COBOL.

Oltre alla traduzione tra lingue, le aree di applicazione di CodeNet includono la creazione di sistemi intelligenti di ricerca del codice e il rilevamento automatico dei cloni, nonché lo sviluppo di ottimizzatori e sistemi di correzione automatica del codice. Nello specifico, gli esempi presentati in CodeNet sono accompagnati da metadati che descrivono i risultati dei test prestazionali, la dimensione del programma risultante, il consumo di memoria e lo stato, consentendo la distinzione tra codice corretto e codice contenente errori (per distinguere il codice corretto da quello errato, la raccolta include specificamente esempi con errori, che rappresentano il 29.5%). Un sistema di apprendimento automatico può utilizzare questi metadati per generare il codice più ottimale o per identificare regressioni nel codice analizzato (il sistema può rilevare se l'algoritmo nel codice inviato non è implementato in modo ottimale o contiene errori).

Fonte: opennet.ru

Acquista hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting web affidabile con protezione DDoS, server VPS e VDS | ProHoster