Эта новая модель преобразует код с одного языка программирования на другой без какого-либо контроля! Он может взять функцию Python и преобразовать ее в функцию C++ и наоборот без каких-либо предварительных примеров! Он понимает синтаксис каждого языка и, таким образом, может обобщаться на любой язык программирования! Давайте посмотрим, как они это сделали.

Чтобы понять эту новую модель Facebook, называемую Transcoder, нам сначала нужно представить, что это такое. Короче говоря, это транскомпилятор. Это означает, что это транслятор исходного кода, который преобразует исходный код из языка программирования высокого уровня (например, C++ или Python) в другой.

В настоящее время этот тип перевода требует ручных модификаций для правильной работы из-за сложности задачи. При переходе с языка программирования A на язык программирования B трудно соблюдать соглашения о целевом языке. Кроме того, поскольку это сложная задача, для ее работы требуется много знаний как целевого, так и исходного языков программирования. Это означает много примеров и время вычислений.
Вот почему Facebook попробовал этот новый подход, используя неконтролируемый машинный перевод для обучения этого полностью неконтролируемого нейронного транскомпилятора. Модель была обучена на проектах GitHub с открытым исходным кодом и в основном обучена переводу функций между тремя языками программирования: C++, Java и Python.

Они добились этого, используя модель последовательностей с вниманием, состоящую из кодера и декодера с архитектурой преобразователя. Обучался без присмотра специально по функциям. Сначала они инициализируют модель с предварительным обучением модели межъязыкового маскированного языка.

Это делается путем случайного маскирования некоторых токенов и обучения TransCoder прогнозированию этих замаскированных токенов на основе контекста. Позволяет модели создавать высококачественные представления последовательности независимо от языка программирования. После завершения предварительной подготовки декодер обучается с использованием предварительно обученного TransCoder в качестве входных данных, чтобы всегда генерировать правильные кодовые последовательности, даже при подаче зашумленных данных, что повышает устойчивость кодера к входному шуму. Чтобы перевести функции с одного языка на другой, нам нужно добавить эту последнюю часть: обратный перевод.

Который состоит из двух моделей, как вы можете видеть на этом изображении:

Модель «цель-источник», которая используется для преобразования целевого кода в исходный код, создавая зашумленную исходную последовательность. Затем эта последовательность используется в модели «источник-цель» для восстановления целевой последовательности из этого зашумленного входного сигнала. Если это вам ничего не говорит, я приглашаю вас посмотреть видео, которые я сделал о внимании и трансформерах, ссылки на которые приведены ниже.

Как показывают результаты, в этой области еще многое предстоит сделать, но лучший перевод показывает более 90% успеха, что является огромным скачком в точности.
Вот несколько примеров функций, переведенных с помощью TransCoder. .

Программисты смогут легко улучшать и создавать надежное кросс-платформенное программное обеспечение с помощью этих улучшений в переводах с небольшими изменениями или вообще без изменений в своем коде, используя единую кодовую базу. Код и предварительно обученные модели скоро будут общедоступны, как говорится в статье!

Конечно, это был просто обзор этого неконтролируемого транслятора кода. Я настоятельно рекомендую прочитать документ, указанный ниже, чтобы узнать больше об этом и попробовать код, когда он будет доступен.

Если вам понравилось это быстрое чтение, посмотрите видео, которое я сделал об этом!

Документ: https://arxiv.org/abs/2006.03511