Facebook opracowuje TransCoder do tłumaczenia kodu z jednego języka programowania na inny

Inżynierowie Facebooka opublikowali transkompilator TransKoder, który wykorzystuje techniki uczenia maszynowego do przekształcania kodu źródłowego z jednego języka programowania wysokiego poziomu na inny. Obecnie dostępna jest obsługa tłumaczenia kodu pomiędzy językami Java, C++ i Python. Na przykład TransCoder umożliwia konwersję kodu źródłowego Java na kod Pythona i kodu Pythona na kod źródłowy Java. Rozwój projektu jest wdrażany w praktyce badania teoretyczne nad stworzeniem sieci neuronowej umożliwiającej wydajną automatyczną transkompilację kodu i rozpowszechnianie się na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne 4.0 wyłącznie do użytku niekomercyjnego.

Implementacja systemu uczenia maszynowego oparta jest o Pytorch. Do pobrania dostępne są dwa gotowe modele: pierwszy za tłumaczenie C++ na Java, Java na C++ i Java na Python oraz drugi do transmisji
C++ do Pythona, Python do C++ i Python do Javy. Do szkolenia modeli wykorzystaliśmy kody źródłowe projektów zamieszczonych na GitHubie. W razie potrzeby można utworzyć modele tłumaczeń dla innych języków programowania. Aby sprawdzić jakość transmisji przygotowano zbiór testów jednostkowych oraz zestaw testów obejmujący 852 funkcje równoległe.

Twierdzi się, że pod względem dokładności konwersji TransCoder znacznie przewyższa komercyjnych tłumaczy, którzy stosują metody oparte na regułach konwersji, a w procesie pracy pozwala obejść się bez eksperckiej oceny ekspertów w języku źródłowym i docelowym. Większość błędów pojawiających się podczas działania modelu można wyeliminować dodając do dekodera proste ograniczenia zapewniające poprawność składniową generowanych funkcji.

Facebook opracowuje TransCoder do tłumaczenia kodu z jednego języka programowania na inny

Badacze zaproponowali nową architekturę sieci neuronowej „Transformator” do modelowania sekwencji, w której rekurencja jest zastępowana przez „uwaga(z uwagą model seq2seq), który pozwala pozbyć się niektórych zależności na grafie obliczeniowym i zrównoleglić to, co wcześniej nie poddawało się równoległości. Wszystkie obsługiwane języki korzystają z jednego wspólnego modelu, który jest szkolony przy użyciu trzech zasad – inicjalizacji, modelowania języka i tłumaczenia zwrotnego.

Facebook opracowuje TransCoder do tłumaczenia kodu z jednego języka programowania na inny

Źródło: opennet.ru

Dodaj komentarz