Soutenances de thèse

Traduction Non Supervisée de Langages de Programmation

12/07/2022 à 16h00

M. Baptiste ROZIERE présente ses travaux en soutenance le 12/07/2022 à 16h00

À l'adresse suivante : Pl. du Maréchal de Lattre de Tassigny, 75016 Paris. Salle des thèses - D520

En vue de l'obtention du diplôme : Doctorat en Informatique

La soutenance est publique

Titre des travaux

Traduction Non Supervisée de Langages de Programmation

École doctorale

École doctorale Dauphine SDOSE

Équipe de recherche

UMR 7243 - Laboratoire d’Analyse et de Modélisation de Systèmes d’Aide à la Décision

Section CNU

27 - Informatique

Directeur(s)

M. Tristan CAZENAVE

Membres du jury

Nom Qualité Établissement Rôle
M. Tristan CAZENAVE Professeur des universités UNIVERSITE PARIS DAUPHINE - PSL Directeur de thèse
M. Albert COHEN Directeur de recherche INRIA ET GOOGLE BRAIN Rapporteur
M. François FLEURET Professor UNIVERSITY OF GENEVA Rapporteur
M. Olivier TEYTAUD Research Scientist META AI Co-encadrant de thèse
Mme Rachel BAWDEN Chargé de recherche INRIA PARIS Examinatrice
Mme Elisa FROMONT Professeur des universités UNIVERSITÉ DE RENNES Examinatrice
M. Ronan COLLOBERT Research Scientist APPLE Examinateur

Résumé

Un transcompilateur est un système qui convertit le code source d'un langage de programmation de haut niveau (tel que C++ ou Python) vers un autre. Les transcompilateurs sont principalement utilisés pour l'interopérabilité et pour transférer des bases de code écrites dans un langage obsolète (par exemple COBOL ou Python2) vers un langage plus moderne. Ils reposent généralement sur des règles de réécriture manuelles, appliquées à l'arbre de syntaxe abstraite du code source. Malheureusement, les traductions qui en résultent manquent souvent de lisibilité, ne respectent pas les conventions du langage cible et nécessitent des modifications manuelles pour fonctionner correctement. Le processus global de traduction prend du temps et nécessite une expertise à la fois dans les langages source et cible, ce qui rend les projets de traduction de code coûteux. Bien que les modèles neuronaux surpassent considérablement leurs homologues basés sur des règles dans le cadre de la traduction en langues naturelles, leurs applications à la transcompilation ont été limitées en raison de la rareté des données parallèles dans ce domaine. Nous proposons des méthodes pour entraîner des transcompilateurs neuronaux efficaces sans données supervisées. Les traducteurs de langues naturelles sont évalués avec des métriques basées sur la cooccurrence de tokens entre la traduction et la référence. Nous remarquons que ces métriques ne capturent pas la sémantique des langages de
programmation. Nous construisons et publions donc une base de données de tests composée de 852 fonctions parallèles, ainsi que de tests unitaires pour vérifier l'exactitude sémantique des traductions. Nous exploitons d'abord les objectifs conçus pour les langues naturelles afin d'apprendre des représentations multilingues du code source, et entraînons un modèle à traduire, en utilisant seulement le code monolingue de projets open source GitHub. Ce modèle surpasse les méthodes basées sur des règles pour la traduction de fonctions entre C++, Java et Python. Ensuite, nous développons une méthode de pré-entraînement, amenant le modèle à apprendre des représentations sémantiques du code. Cela conduit à des performances améliorées sur plusieurs tâches, y compris la traduction de code non supervisée. Enfin, nous utilisons des tests unitaires automatisés pour créer des exemples de traductions de programmes. Entraîner un modèle sur ces exemples conduit à des améliorations significatives des performances de nos transcompilateurs neuronaux. Nos méthodes reposent exclusivement sur du code source monolingue, ne nécessitent aucune expertise dans les langues source ou cible, et peuvent facilement être généralisées à d'autres langages.

Toutes les soutenances de thèse