Les représentations du code apprises par les modèles d’apprentissage profond sont une composante cruciale pour certaines applications en génie logiciel telles que la recherche de code ou la détection de clones. Les performances de ces applications dépendent de la qualité des représentations apprises par les modèles. De fait, des représentations possédant
peu de bruit et contenant des informations avec un haut niveau d’abstraction, comme la sémantique fonctionnelle, facilitent la résolution de ces tâches. En effet, la recherche de code nécessite de comprendre les objectifs des morceaux de code pour les comparer avec une requête en langage naturel, tandis que la détection de clone exige de déterminer si deux morceaux de code ont la même sémantique fonctionnelle. La capacité des modèles à apprendre des représentations contenant de telles informations abstraites est donc cruciale pour la bonne résolution de ces tâches. Cependant, il est toujours difficile pour les modèles de code d’apprendre des représentations abstraites indépendantes de la syntaxe, par exemple la sémantique fonctionnelle. Ce mémoire se consacre donc à l’élaboration de meilleures techniques pour l’apprentissage des représentations du code via l’apprentissage auto-supervisé. Plus spécifiquement, nous nous sommes concentrés sur deux tâches centrales dans l’automatisation du génie logiciel nécessitant un minimum de compréhension de la sémantique fonctionnelle, à savoir, la recherche de code et la détection de clones de type 4. Ce mémoire propose différentes approches à différents degrés d’entraînement. Le premier degré est le pré-entraînement et
consiste à apprendre des représentations génériques du code adaptables à n’importe quels problèmes. Le second est le peaufinage, modifiant les représentations apprises pour un problème spécifique. Tout d’abord, nous proposons un nouvel algorithme de pré-entraînement pour les modèles de code utilisant une méthode non contrastive régularisée adaptée de VICReg, permettant l’apprentissage de représentations génériques. Ensuite, nous proposons un nouvel objectif de peaufinage des modèles de code utilisant la distillation des connaissances d’un ensemble de modèles déjà peaufinés, appelés enseignants, sur un modèle étudiant, lui permettant ainsi l’apprentissage de représentations plus abstraites.
L’ensemble des contributions vise à améliorer les représentations du code et à maximiser les performances des modèles d’apprentissage automatique pour le code, mais aussi à déterminer quel est le meilleur degré d’entraînement à adopter pour cela. Les résultats expérimentaux et les analyses menées dans ce mémoire sont préliminaires et ne permettent pas de tirer de conclusions définitives. Néanmoins, il est important de souligner que la deuxième contribution surpasse la méthode classique de peaufinage des modèles pour la recherche de code. De plus, les approches décrites proposent des pistes de directions de recherche innovantes et non conventionnelles. / Code representations learned by deep learning models are a crucial component for certain
software engineering applications such as code search or clone detection. The performance
of these applications depends on the quality of the representations learned by the models.
In fact, low-noise representations containing highly abstract information, such as functional
semantics, facilitate the resolution of these tasks. Indeed, code search requires understanding the objectives of code snippets in order to compare them with a natural language
query, while clone detection requires determining whether two code snippets have the
same functional semantics. The ability of models to learn representations containing such
abstract information is therefore crucial to the successful resolution of these tasks.
However, it is still difficult for code models to learn abstract representations that are
independent of syntax, such as functional semantics. This thesis is therefore dedicated to
developing better techniques for learning code representations via self-supervised learning.
More specifically, we focus on two central tasks in software engineering automation requiring
a minimum understanding of functional semantics, namely, code search and type 4 clone
detection. This work proposes different approaches with different degrees of training. The
first, pre-training, consists in learning generic code representations that can be adapted to
any problem. The second is fine-tuning, modifying the representations learned for a specific
problem.
First, we propose a new pre-training algorithm for code models using a regularized
non-contrastive method adapted from VICReg [14] enabling the learning of generic representations. Secondly, we propose a new code model refinement objective using knowledge
distillation of a set of already refined models, called teachers, on a student model allowing
it to learn more abstract representations.
The aim of all these contributions is not only to improve code representations and
maximize the performance of machine learning models for code, but also to determine the
best degree of training to adopt for this purpose. The experimental results and analyses carried out in this thesis are preliminary and do not allow to draw formal conclusions.
Nevertheless, it is important to underline that the second contribution outperforms the
classical model refinement method for code search. Moreover, the approaches described
suggest innovative and unconventional research directions.
Identifer | oai:union.ndltd.org:umontreal.ca/oai:papyrus.bib.umontreal.ca:1866/32228 |
Date | 07 1900 |
Creators | Maes, Lucas |
Contributors | Sahraoui, Houari |
Source Sets | Université de Montréal |
Language | fra |
Detected Language | French |
Type | thesis, thèse |
Format | application/pdf |
Page generated in 0.0034 seconds