IBM heeft het CodeNet-initiatief gelanceerd, gericht op het bieden van een dataset die onderzoekers in staat stelt te experimenteren met machine learning-methoden voor het creƫren van vertalers van de ene programmeertaal naar de andere, evenals codegenerators en -analysatoren. CodeNet omvat een verzameling van 14 miljoen codevoorbeelden die 4053 standaardprogrammeervragen oplossen. In totaal bevat de collectie ongeveer 500 miljoen regels code en dekt het 55 programmeertalen, waaronder moderne talen zoals C++, Java, Python en Go, evenals verouderde talen zoals COBOL, Pascal en FORTRAN. De resultaten van het project worden verspreid onder de Apache 2.0-licentie en de datasets zullen naar verwachting als publiek domein worden aangeboden.
De voorbeelden zijn voorzien van annotaties en implementeren identieke algoritmes in verschillende programmeertalen. Er wordt verwacht dat de aangeboden set de training van machine learning-systemen zal ondersteunen en innovaties zal stimuleren op het gebied van codevertaling en -analyse, vergelijkbaar met hoe de database van geannoteerde afbeeldingen van ImageNet heeft bijgedragen aan de ontwikkeling van systemen voor patroonherkenning en computer vision. Een van de belangrijkste bronnen voor de samenstelling van de collectie zijn verschillende programmeerwedstrijden.
In tegenstelling tot traditionele vertalers, die zijn gebaseerd op transformatiewijzigingen, kunnen machine learning-systemen de context van het gebruik van code vastleggen en in overweging nemen. Bij de conversie van de ene programmeertaal naar de andere is context net zo belangrijk als bij de vertaling van de ene menselijke taal naar de andere. Het gebrek aan contextinbreng belemmert de conversie van code van verouderde talen zoals COBOL.
Een uitgebreide database van algoritmenrealisaties in verschillende talen zal helpen bij het creƫren van universele machine learning-systemen, die in plaats van directe vertaling tussen specifieke talen, werken met een meer abstracte weergave van code die onafhankelijk is van specifieke programmeertalen. Een dergelijk systeem kan functioneren als een vertaler die de verzonden code naar een van de ondersteunde talen omzet in zijn interne abstracte representatie, waarvan vervolgens code in meerdere talen kan worden gegenereerd.
Het systeem zal ook bidirectionele conversies kunnen uitvoeren. Bijvoorbeeld, in banken en overheidsinstellingen worden nog steeds projecten uitgevoerd in de verouderde COBOL-taal. De vertaler op basis van het machine learning-systeem zal in staat zijn om code op COBOL om te zetten in een weergave in Java, en indien nodig een fragment op Java terug te vertalen naar code op COBOL.
Naast de vertaling tussen talen worden ook andere toepassingsgebieden van CodeNet genoemd, zoals het creëren van slimme systemen voor het zoeken naar code en het automatiseren van detectie van klonen, evenals de ontwikkeling van optimalisatoren en systemen voor automatische codecorrectie. In het bijzonder zijn de in CodeNet gepresenteerde voorbeelden voorzien van metadata die de resultaten van prestatie-tests beschrijven, de resulterende programmagrootte, geheugengebruik en de status die het mogelijk maakt om correcte code van foutieve code te onderscheiden (om de juiste code van onjuiste te onderscheiden, zijn er speciaal voorbeelden met fouten in de collectie opgenomen, met een aandeel van 29,5%). Het machine learning-systeem kan deze metadata meenemen om de meest optimale code te genereren of om regressies in de geanalyseerde code te identificeren (het systeem kan begrijpen dat het algoritme in de verzonden code niet optimaal is geïmplementeerd of fouten bevat).
Bron: opennet.ru
