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.