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

Додати коментар або відгук