Facebook розвиває TransCoder для перекладу коду з однієї мови програмування на іншу

Інженери з Facebook опублікували транскомпілятор TransCoder, що використовує методи машинного навчання перетворення вихідних текстів з одного високорівневого мови програмування на інший. В даний час надано підтримку трансляції коду між мовами Java, C++ та Python. Наприклад, TransCoder дозволяє перетворити вихідні тексти на Java на код на Python, а код на Python на вихідні тексти на Java. Напрацювання проекту реалізують практично теоретичні дослідження зі створення нейронної мережі для ефективної автоматичної транскомпіляції коду та поширюються під ліцензією Creative Commons Attribution-NonCommercial 4.0, що дозволяє застосування лише для некомерційних цілей.

Реалізацію системи машинного навчання побудовано на базі Pytorch. Для завантаження запропоновано дві готові моделі: перша для трансляції C++ Java, Java C++ і Java Python, а друга для трансляції
C++ у Python, Python у C++ та Python у Java. Для навчання моделей використовували вихідні тексти проектів, розміщених на GitHub. За бажання моделі трансляції можуть бути створені і для інших мов програмування. Для перевірки якості трансляції підготовлено колекцію unit-тестів, а також тестовий набір, що включає 852 паралельні функції.

Стверджується, що за точністю перетворення TransCoder значно перевершує комерційні транслятори, що використовують методи на основі правил перетворення, і в процесі роботи дозволяє уникнути експертної оцінки знавців вихідної та цільової мови. Більшість помилок, що виникає під час роботи моделі, вдається усунути через додавання простих обмежень декодировщик, дозволяють гарантувати, що генеровані функції будуть синтаксично коректні.

Facebook розвиває TransCoder для перекладу коду з однієї мови програмування на іншу

Дослідниками запропоновано нову архітектуру нейронної мережі «Transformer» для моделювання послідовностей, у якій рекурентність замінено «увагою»(seq2seq model with attention), що дозволяє позбавитися деяких залежностей у обчислювальному графі і розпаралелити те, що раніше не піддавалося розпаралелювання. Для всіх мов, що підтримуються, застосовується єдина загальна модель, при тренуванні якої використовуються три принципи — ініціалізація, моделювання мови та зворотний переклад.

Facebook розвиває TransCoder для перекладу коду з однієї мови програмування на іншу

Джерело: opennet.ru

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