Η IBM ανοίγει το CodeNet για συστήματα μηχανικής εκμάθησης που μεταφράζουν και επαληθεύουν κώδικα

Η IBM αποκάλυψε την πρωτοβουλία CodeNet, η οποία στοχεύει να παρέχει στους ερευνητές ένα σύνολο δεδομένων που τους επιτρέπει να πειραματιστούν με τη χρήση τεχνικών μηχανικής μάθησης για τη δημιουργία μεταφραστών γλωσσών προγραμματισμού, γεννήτριες κώδικα και αναλυτές. Το CodeNet περιλαμβάνει μια συλλογή από 14 εκατομμύρια παραδείγματα κώδικα που επιλύουν 4053 κοινά προβλήματα προγραμματισμού. Συνολικά, η συλλογή περιέχει περίπου 500 εκατομμύρια γραμμές κώδικα και καλύπτει 55 γλώσσες προγραμματισμού, τόσο σύγχρονες γλώσσες όπως C++, Java, Python και Go, όσο και γλώσσες παλαιού τύπου, συμπεριλαμβανομένων των COBOL, Pascal και FORTRAN. Οι εξελίξεις του έργου διανέμονται με την άδεια Apache 2.0 και τα σύνολα δεδομένων σχεδιάζεται να διανεμηθούν με τη μορφή δημόσιου τομέα.

Τα παραδείγματα σχολιάζονται και εφαρμόζουν πανομοιότυπους αλγόριθμους σε διαφορετικές γλώσσες προγραμματισμού. Αναμένεται ότι το προτεινόμενο σύνολο θα βοηθήσει στην εκπαίδευση συστημάτων μηχανικής μάθησης και στην ανάπτυξη καινοτομιών στον τομέα της μετάφρασης και της ανάλυσης κώδικα μηχανών, παρόμοια με τον τρόπο που η βάση δεδομένων σχολιασμένων εικόνων ImageNet βοήθησε στην ανάπτυξη συστημάτων αναγνώρισης προτύπων και όρασης υπολογιστή. Διάφοροι διαγωνισμοί προγραμματισμού αναφέρονται ως μία από τις κύριες πηγές σχηματισμού συλλογών.

Σε αντίθεση με τους παραδοσιακούς μεταφραστές, οι οποίοι υλοποιούνται με βάση κανόνες μετασχηματισμού, τα συστήματα μηχανικής εκμάθησης μπορούν να συλλάβουν και να λάβουν υπόψη το πλαίσιο χρήσης κώδικα. Κατά τη μετατροπή από μια γλώσσα προγραμματισμού σε άλλη, το πλαίσιο είναι εξίσου σημαντικό με τη μετάφραση από μια ανθρώπινη γλώσσα σε μια άλλη. Αυτή η έλλειψη συνεκτίμησης του πλαισίου είναι που εμποδίζει τη μετατροπή κώδικα από γλώσσες παλαιού τύπου, όπως η COBOL.

Η ύπαρξη μιας μεγάλης βάσης δεδομένων εφαρμογών αλγορίθμων σε διαφορετικές γλώσσες θα βοηθήσει στη δημιουργία καθολικών συστημάτων μηχανικής εκμάθησης που, αντί για άμεση μετάφραση μεταξύ συγκεκριμένων γλωσσών, χειρίζονται μια πιο αφηρημένη αναπαράσταση του κώδικα, ανεξάρτητα από συγκεκριμένες γλώσσες προγραμματισμού. Ένα τέτοιο σύστημα μπορεί να χρησιμοποιηθεί ως μεταφραστής, μεταφράζοντας τον μεταδιδόμενο κώδικα σε οποιαδήποτε από τις υποστηριζόμενες γλώσσες στην εσωτερική του αφηρημένη αναπαράσταση, από την οποία μπορεί στη συνέχεια να δημιουργηθεί κώδικας σε πολλές γλώσσες.

Το σύστημα θα μπορεί επίσης να εκτελεί αμφίδρομους μετασχηματισμούς. Για παράδειγμα, οι τράπεζες και οι κρατικοί φορείς συνεχίζουν να χρησιμοποιούν έργα στην ξεπερασμένη γλώσσα COBOL. Ένας μεταφραστής που βασίζεται σε μηχανική μάθηση θα μπορεί να μετατρέψει τον κώδικα COBOL σε αναπαράσταση Java και, εάν είναι απαραίτητο, να μεταφράσει το τμήμα Java ξανά σε κώδικα COBOL.

Εκτός από τη μετάφραση μεταξύ των γλωσσών, αναφέρονται τομείς εφαρμογής του CodeNet όπως η δημιουργία συστημάτων αναζήτησης έξυπνου κώδικα και η αυτοματοποίηση ανίχνευσης κλώνων, καθώς και η ανάπτυξη βελτιστοποιητών και συστημάτων αυτόματης διόρθωσης κώδικα. Συγκεκριμένα, τα παραδείγματα που παρουσιάζονται στο CodeNet είναι εξοπλισμένα με μεταδεδομένα που περιγράφουν τα αποτελέσματα των δοκιμών απόδοσης, το μέγεθος του προγράμματος που προκύπτει, την κατανάλωση μνήμης και την κατάσταση, τα οποία μας επιτρέπουν να διακρίνουμε τον σωστό κώδικα από τον κώδικα με σφάλματα (για να διακρίνουμε τον σωστό από τον λανθασμένο κώδικα, Η συλλογή περιλαμβάνει συγκεκριμένα παραδείγματα με σφάλματα, το ποσοστό των οποίων είναι 29.5%). Ένα σύστημα μηχανικής εκμάθησης μπορεί να λάβει υπόψη αυτά τα μεταδεδομένα για να δημιουργήσει τον βέλτιστο κώδικα ή να εντοπίσει παλινδρομήσεις στον αναλυόμενο κώδικα (το σύστημα μπορεί να κατανοήσει ότι ο αλγόριθμος στον υποβαλλόμενο κώδικα δεν έχει εφαρμοστεί βέλτιστα ή περιέχει σφάλματα).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο