Facebook đang phát triển TransCoder để dịch mã từ ngôn ngữ lập trình này sang ngôn ngữ lập trình khác

Инженеры из Facebook опубликовали транскомпилятор Bộ mã hóa, использующий методы машинного обучения для преобразования исходных текстов с одного высокоуровневого языка программирования на другой. В настоящее время предоставлена поддержка трансляции кода между языками Java, C++ и Python. Например, TransCoder позволяет преобразовать исходные тексты на Java в код на Python, а код на Python в исходные тексты на Java. Наработки проекта реализуют на практике теоретические изыскания по созданию нейронной сети для эффективной автоматической транскомпиляции кода и lây lan под лицензией Creative Commons Attribution-NonCommercial 4.0, разрешающей применение только для некоммерческих целей.

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

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

Facebook đang phát triển TransCoder để dịch mã từ ngôn ngữ lập trình này sang ngôn ngữ lập trình khác

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

Facebook đang phát triển TransCoder để dịch mã từ ngôn ngữ lập trình này sang ngôn ngữ lập trình khác

Nguồn: opennet.ru

Thêm một lời nhận xét