HyperAIHyperAI
il y a 12 jours

GraphCodeBERT : Pré-entraînement de représentations de code avec le flux de données

Daya Guo, Shuo Ren, Shuai Lu, Zhangyin Feng, Duyu Tang, Shujie Liu, Long Zhou, Nan Duan, Alexey Svyatkovskiy, Shengyu Fu, Michele Tufano, Shao Kun Deng, Colin Clement, Dawn Drain, Neel Sundaresan, Jian Yin, Daxin Jiang, Ming Zhou
GraphCodeBERT : Pré-entraînement de représentations de code avec le flux de données
Résumé

Les modèles pré-entraînés pour les langages de programmation ont permis des progrès empiriques significatifs sur diverses tâches liées au code, telles que la recherche de code, la complétion de code, la génération de résumés de code, etc. Toutefois, les modèles pré-entraînés existants traitent un extrait de code comme une séquence de jetons, tout en ignorant la structure intrinsèque du code, qui porte des sémantiques cruciales et pourrait améliorer le processus de compréhension du code. Nous proposons GraphCodeBERT, un modèle pré-entraîné pour les langages de programmation qui prend en compte la structure inhérente du code. Contrairement aux approches existantes qui exploitent la structure au niveau syntaxique, comme l’arbre syntaxique abstrait (AST), nous utilisons dans la phase de pré-entraînement le flux de données, une structure au niveau sémantique qui encode la relation « d’où provient la valeur » entre les variables. Cette structure sémantique est élégante et ne comporte pas la hiérarchie profonde inhérente à l’AST, ce qui rend le modèle plus efficace. GraphCodeBERT est construit sur la base de l’architecture Transformer. En plus de la tâche classique de modélisation du langage masqué, nous introduisons deux nouvelles tâches de pré-entraînement conscientes de la structure : la prédiction des arêtes de la structure de code, et l’alignement des représentations entre le code source et sa structure. Nous implémentons le modèle de manière efficace en utilisant une fonction d’attention masquée guidée par graphe, permettant ainsi d’intégrer naturellement la structure du code. Nous évaluons notre modèle sur quatre tâches : recherche de code, détection de clones, traduction de code et révision de code. Les résultats montrent que la prise en compte de la structure du code ainsi que les nouvelles tâches de pré-entraînement améliorent significativement GraphCodeBERT, qui atteint des performances de pointe sur les quatre tâches en aval. Nous montrons également que le modèle privilégie les attentions au niveau de la structure plutôt que celles au niveau des jetons dans la tâche de recherche de code.