TransCoder AI на Facebook може да преобразува код от един програмен език към друг

2
575

Изследователи от Фейсбук твърдят, че са разработили нещо наречено невронен транскомпилатор. Това е система, която взима код от един програмен език като C++, Java или Python и го преобразува в код на друг програмен език. Целта е да работи с възможно най-малко човешки надзор.

Преминаването от един програмен език към друг може да е много скъпо. Обикновено се касае за стар код, който трябва да бъде пренаписан на по-модерен език. Изисква дълбоки познания както по отношение на началния код, така и на новия език. Например на Банката на Общността на Австралия ѝ струва $750 милиона и 5 години, за да премине платформата ѝ от COBOL към Java, посочват от VentureBeat.

Именно транскомпилаторите ще решат този проблем, поне на теория

Предизвикателствата са по отношение на особеностите в синтаксиса на отделните езици, използването на уникални за езика API, типове променливи, стандартните функции и прочие.

TransCoder на Facebook за момента може да превежда между C++, Python и Java. Използван е много интересен подход за тренирането на системата. Във фазата на предварителното трениране се задават парчета код, които трябва да се свържат с други парчета код, които представляват същите инструкции и водят до същия резултат, без значение от езика им. Другата част от обучението включва маскирането на части от кода, които TransCoder после трябва да отгатне, на база на контекста на заобикалящия ги код. Разработчиците искат транскомпилатора да може да работи и с по-нискокачествена информация, без това да му пречи да генерира валиден код. Използва се и обратно превеждане, което паралелно генерира и допълнителна информация за обучение.

За обучението на TransCoder са използвани над 2.8 милиона хранилища с отворен код в GitHub. В предварителното обучение е подаден цялостния наличен сорс код. Гореспоменатите методики на работа в последствие са анализирани на ниво функция, в рамките на същинското обучение.

Как са тествали продукта?

За да се добие представа за реалната производителност на TransCoder, екипът взима 852 паралелни функции написани на C++, Java и Python от GeeksforGeeks. Това е онлайн платформа, която обединява различни проблеми и предлага решения за тях, на няколко програмни езика. Използвайки тази информация, те разработват система за измерване на успеваемостта – изчислителна точност. Тества се дали хипотетични функции генерират същия краен резултат, като референтните, ако получат същите входни данни.

От Facebook отбелязват, че най-добре представилата се версия на TransCoder не успява да генерира всички функции по стриктно идентичен начин. Въпреки това, преводите на транскомпилатора имат висока изчислителна точност.

  • При превод от C ++ до Java, 74,8% от предположенията на TransCoder представляват очакваните резултати.
  • При превод от C ++ до Python 67,2% от предположенията на TransCoder представляват очакваните резултати.
  • При превод от Java до C ++ 91,6% от предположенията на TransCoder представляват очакваните резултати.
  • При превод от Python до Java 56,1% от предположенията на TransCoder представляват очакваните резултати.
  • При превод от Python до C ++ 57,8% от предположенията на TransCoder представляват очакваните резултати.
  • При превод от Java до Python 68,7% от предположенията на представляват очакваните резултати.

Какво е заключението?

Според хората зад TransCoder, транскомпилаторът успешно демонстрира разбиране на специфичния синтаксис на всеки език,  структурите данни на езиците, както и техните методи по време на експериментите. Коректно подбира правилните библиотеки за различните програмни езици, адаптирайки се към малки модификации (като например, когато променлива на входа е бил преименувана).

По отношение на грешките, TransCoder не успява да се справи с някои типове променливи по време на генерирането на кода

„TransCoder може лесно да се пригоди за работа с всеки език за програмиране, не изисква каквото и да е експертно познание и се справя по-добре от комерсиалните решения, и то с разлика. Резултатите показват, че много от грешките, които настоящият модел е допуснал, могат да се коригират чрез добавянето на прости рамки за работа на декодера. Това ще подсигури, че генерираните функции са синтактично правилни. Може да помогне и използването на специализирани архитектури. “, пишат съавторите.

Facebook не е единствената организация, която разработва изкуствен интелект за генериране на код. По-рано през тази година, по време на Microsoft Build конференцията, OpenAI показва модел, отново трениран с GitHub хранилища, който използва англоезични коментари, за да генерира цели функции. Преди две години, учени от Rice University са създали системата Bayou, която може да пише собствени софтуерни програми, правейки асоциации с „намеренията“ стоящи зад публично наличен код.

“Програми като тези целят просто да елиминират дребните и прецизни детайли в създаването на софтуер. Те могат да помогнат в ускорението на производителността, справяйки се с бъгването. И те всъщност могат да увеличат броя на работните места в технологичния сектор. Могат да позволят на хора без опит в програмирането да го придобият чрез креативната си интуиция и тези системи.“, обяснява Justin Gottschlich от Intel Labs пред VentureBeat в скорошно интервю.

Работата по споменатите проекти ще продължи. Прогресът е впечатляващ, но настоящите резултати не могат да гарантират, че ще може да се достигне 100% ефективност, която е нужна за елиминирането на по-голяма част от човешката намеса в процесите. Има скептици, които твърдят, че пълното усъвършенстване на изкуствения интелект на този етап и за определени предназначения е по-скоро невъзможно. А за да можем да му доверим изпълнението на специфичните задачи, фактори като въпросната изчислителна точност трябва да са безупречни.

5 1 глас
Оценете статията
Абонирай се
Извести ме за
guest
2 Коментара
стари
нови оценка
Отзиви
Всички коментари