Download Documentation automatique de code
Transcript
Facultés Universitaires Notre-Dame de la Paix INFO M210 - STAGE - Rapport de Stage Laurent JAKUBINA [email protected] Promoteur de Mémoire: Naji HABRA FUNDP Maitre de Stage: Houari SAHRAOUI Philippe LANGLAIS Université de Montréal 1 Mars 2012 Table des matières 1 Introduction 3 2 Objectifs 2.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Définition des objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 3 Déroulement du stage 3.1 Semainier . . . . . . . . . . . . . . . . . . 3.2 Encadrement . . . . . . . . . . . . . . . . 3.2.1 L’université de Montréal . . . . . . 3.2.2 Le laboratoire GEODES et l’équipe 3.2.3 Les promoteurs . . . . . . . . . . . 3.2.4 Les à cotés . . . . . . . . . . . 3.3 Appréciation . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 6 6 6 6 6 . . . . . . . 7 7 7 7 8 8 8 8 4 Activités Scientifiques et développements 4.1 Appropriation du contexte . . . . . . . . . 4.2 Découverte des outils . . . . . . . . . . . . 4.3 Implémentations . . . . . . . . . . . . . . 4.4 Préparations du corpus . . . . . . . . . . . 4.5 Entrainements et Tests de Traductions . . 4.6 Évaluations . . . . . . . . . . . . . . . . . 4.7 Résultats et Conclusions . . . . . . . . . . 5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 1 Introduction Ce rapport de stage a pour but de résumer et d’expliquer brièvement le déroulement de mon stage effectué dans le cadre de ma deuxième maitrise, dernière année de mon cursus d’études des sciences informatiques aux Facultés Universitaires Notre Dame de la Paix à Namur. Étroitement lié à mon mémoire supervisé par mon promoteur et professeur Naji Habra, mon stage a eu lieu à l’Université de Montréal, plus précisément au Département d’Informatique et Recherche Opérationnelle ou DIRO. J’y ai travaillé sous la tutelle du professeur Houari Sahraoui, membre de l’équipe GEODES (génie logiciel), et de Philippe Langlais, membre de l’équipe RALI (ingénierie linguistique). Mon travail a consisté à aborder l’idée de Génération automatique de commentaires en utilisant les techniques de la traduction automatique statistique . Je commencerai donc par expliciter un peu plus le sujet ainsi que les objectifs. Ensuite, je déploierai un paragraphe sur le déroulement du stage, suivi d’explications plus poussées sur certaines activités et développements effectués durant le stage. Et finalement je terminerai par une conclusion synthétisant mon rapport au stage. 2 Objectifs 2.1 Énoncé Voici l’énoncé tel qu’il m’a été proposé : Le sujet consiste à étudier la possibilité de générer des commentaires pour des éléments de programmes, tels que les méthodes à partir de corpus de données (paires code-commentaire). Pour ce faire, nous pensons à l’utilisation des techniques de traduction statistiques qui utilisent une base d’exemples (paire de segments de texte équivalents de deux langues). Ces techniques de traduction donnent des résultats impressionnants (voir par exemple les nouveaux traducteurs de Google). Le projet consistera dans une première phase à créer un corpus de données (méthodes et leurs commentaires) à partir des logiciels open source. La deuxième phase consiste à adapter des traducteurs existants à la problématique de la génération des commentaires. 2.2 Définition des objectifs Après une première réunion d’introduction et d’explicitation du contexte, l’objectif principal était clair : étudier la possibilité de générer automatiquement des commentaires à partir des techniques de traduction automatique statistique, et plus précisément des techniques d’entrainement de corpus de textes traduits mis en parallèles. Pour ce faire, une série d’étapes-avancements se sont dessinés/s’est dessinée ( ? ? ?) : – S’approprier le contexte des techniques de traduction statistique : corpus de textes traduits mis en parallèle à entrainer afin de générer des traducteurs. – Se familiariser avec l’outil Moses , logiciel open source d’entrainement de corpus, notamment en lisant son manuel d’utilisateur. – S’intéresser aux outils proposés par une étudiante du laboratoire GEODES concernant ses travaux sur les commentaires. – Préparer un corpus d’entrainement et envisager de le préprocesser. – Entrainer le corpus, évaluer les résultats et préparer une validation. Dans la suite du rapport, chaque étape sera d’abord située dans le temps grâce au semainier et expliqué plus en détails dans la section sur les activités scientifiques et les développements. 3 3 Déroulement du stage 3.1 Semainier Afin d’avoir en premier lieu une vue globale du déroulement du stage, j’ai décidé de commencer par le semainier. Pour chaque semaine j’y explique brièvement ce que j’ai fait. Il faut se rapporter à la section 4 de mon rapport de stage pour avoir plus de détails sur certaines des activités effectuées. Notons que toutes les lectures effectuées durant le stage seront explicitement nommées dans la bibliographie située à la fin de ce rapport. – Semaine 1 : 5 Septembre au 9 Septembre Découverte de la littérature existante autour des thèmes de Traduction Automatique Statistique et Génération Automatique de commentaires : Lectures d’articles et mise en contexte. – Semaine 2 : 12 Septembre au 16 Septembre Découverte de Moses 1 , logiciel de traduction automatique statistique permettant l’entrainement de corpus de textes : installation et lecture de son manuel d’utilisateur. – Semaine 3 : 19 Septembre au 23 Septembre Suite et fin de la lecture du manuel d’utilisateur de Moses. Lecture rapide de différents mémoires sur la traduction automatique statistique. – Semaine 4 : 26 Septembre au 30 Septembre Lecture du mémoire d’une étudiante en maitrise du laboratoire GEODES sur l’extraction des commentaires de classes Java. Découverte de ses outils et des outils suivants : Le parseur SableCC et la librairie JDom. – Semaine 5 : 3 Octobre au 7 Octobre Compréhension et intégration des outils développés autour de l’extraction des commentaires dans un projet Java. Modification des outils et implémentation visant à préparer le corpus de commentaires. Apprentissage du langage de requêtes XPATH et des expressions régulières en Java (regex). – Semaine 6 : 10 Octobre au 14 Octobre Implémentation de l’extraction des commentaires et du code lié à ceux-ci, enregistré dans deux fichiers textes séparés à fin de préparer un bitexte commentaires/code parallélisé. Identification des différents types de commentaires. – Semaine 7 : 17 Octobre au 21 Octobre Implémentation de la récupération du code du corps d’une méthode ou juste de son entête. Choix d’utiliser le logiciel open source JHotDraw, défini comme un cas d’étude, bien documenté, ... pour effectuer les premiers tests. – Semaine 8 : 24 Octobre au 28 Octobre Premier choix de préprocessing du corpus : implémentations de nouvelles fonctionnalités. Correction de bugs et optimisations des fonctionnalités. Préparation du corpus, entrainement du corpus , premières batteries de tests de traduc1. http ://www.statmt.org/moses/ 4 tion, évaluation et commentaires. – Semaine 9 : 31 Novembre au 4 Novembre Choix de préprocessing du corpus : implémentations de nouvelles fonctionnalités. Adaptation du corpus, entrainement du corpus modifié, nouvelles batteries de tests de traduction, évaluation et commentaires. Implémentation du splitter d’identifiants. – Semaine 10 : 7 Novembre au 11 Novembre Adaptation du corpus (splitter d’identifiants), entrainement du corpus modifié, nouvelles batteries de tests de traduction, évaluation et commentaires. – Semaine 11 : 14 Novembre au 18 Novembre Correction de bugs et optimisations des fonctionnalités. Adaptation du corpus, entrainement du corpus modifié, nouvelles batteries de tests de traduction, évaluation et commentaires. Choix de compléter le corpus avec toutes les versions de JHotDraw. – Semaine 12 : 21 Novembre au 25 Novembre Téléchargement de toutes les versions de JHotDraw et extraction de leurs codes et commentaires à l’aide de mes outils. Entrainement du corpus agrandi, nouvelles batteries de tests de traduction, évaluation et commentaires. Implémentation d’un script d’automatisation de traductions. Choix d’essayer de générer des commentaires pour une version récente de JHotDraw à partir des anciennes versions. – Semaine 13 : 28 Novembre au 2 Décembre Adaptation du corpus en fonction du dernier choix, entrainement du corpus modifié, nouvelles batteries de tests de traduction, évaluation et commentaires. Choix d’agrandir au maximum le corpus à l’aide d’autres projets. – Semaine 14 : 5 Décembre au 9 Décembre Téléchargement d’une vingtaine de projets Java open source et extraction de leurs codes et commentaires à l’aide de mes outils. Entrainement du corpus agrandi, nouvelles batteries de tests de traduction, évaluation et commentaires. – Semaine 15 : 12 Décembre au 16 Décembre Présentation de fin de stage et discussion de l’avancement effectué sur les 15 semaines. 3.2 Encadrement L’environnement et les conditions de travail ayant aussi leurs influences sur la productivité, je décris ici le milieu dans lequel j’ai travaillé pendant mes trois mois et demi de stage. Je commencerai par présenter un peu le campus de l’université de Montréal, ensuite le laboratoire de Génie Logiciel (GEODES) et finalement, la relations avec mes maitres de stage. 5 3.2.1 L’université de Montréal Le campus de l’Université de Montréal est immense. Situé sur le Mont-Royal, l’Udem est reconnaissable de loin grâce à son pavillon Roger Gaudry et est un des symboles de la métropole. Sur le campus, toutes les nationalités s’y promènent, tel qu’il y est rare d’y croiser deux fois la même personne. Ce qui est sûr, c’est que l’université de Montréal mérite bien sa renommée internationale et cela se ressent quand on se promène sur le campus. 3.2.2 Le laboratoire GEODES et l’équipe Situé dans le département de d’informatique et de recherche opérationnel (DIRO) de la faculté des Arts et des Sciences, le laboratoire de Génie Logiciel permet à une équipe de 10 à 15 personnes de travailler soit dans le cadre de sa maitrise, soit dans le cadre de son doctorat. Des machines Windows et Linux sont mises à dispositions et aussi, depuis récemment, un serveur de calcul qui, notamment, m’aura aidé durant mes entrainements sur des corpus de grande taille. L’équipe travaillant au laboratoire, supervisée par Houari, est très sympa et multiculturelle. Nous avons notamment organisé des repas entre nous pour apprendre à mieux nous connaı̂tre, ce qui a donné lieu à une bonne ambiance durant les dures journées de labeurs. Et pour terminer, chaque jeudi matin était réservé afin que l’équipe se mette autour de la table et discute de sujets concernant le laboratoire. On assistait aussi à au moins une présentation d’un étudiant du laboratoire, la plupart du temps dans le cadre d’une préparation d’une présentation pour l’étudiant en question. 3.2.3 Les promoteurs Mes promoteurs respectifs, Houari et Philippe, se sont montrés très disponibles, que cela soit par mail ou en allant les chercher directement dans leur bureau. Cela a été un plaisir de travailler avec eux. Notons aussi que Houari, superviseur du laboratoire GEODES, passait presque tous les jours afin d’avoir les dernières nouvelles sur l’avancement du travail. Aussi, on essayait avec Houari et Philippe, de faire au moins une réunion par semaine afin d’évaluer les progrès effectués ainsi que déterminer les prochaines étapes du développement. 3.2.4 Les à cotés Par l’expression les à cotés , je parle évidemment des possibilités d’expériences en dehors du travail qu’il était possible de vivre en faisant son stage à Montréal. Et en effet, il n’y avait pas moyens d’être déçu. Montréal, plus qu’une ville, une métropole, possédant plusieurs visages, telle que chacun peut y trouver un endroit où il se sent chez lui. Ces trois mois et demi passés là-bas m’ont permis de bien cerner la mentalité montréalaise mais aussi de goûter un peu à la culture québécoise, notamment en faisant quelques voyages en dehors de la métropole. Je ne détaillerai pas chaque voyage mais je terminerai en ajoutant que la possibilité de faire un stage à l’étranger ne fait que renforcer l’expérience du stage. 3.3 Appréciation Pour terminer cette section sur le déroulement du stage et avant d’expliquer plus en détails les activités scientifiques et les développements effectués durant le stage, voici en quelques phrases, mon appréciation résumée vis à vis de l’expérience unique qu’à été de faire mon stage de deuxième maitrise à Montréal, et plus précisément au laboratoire GEODES de l’Université 6 de Montréal. En plus d’être un magnifique voyage, on se sent sortir de ce moment avec un gain de maturité mais aussi d’expériences de travail. L’approche Ouverture d’esprit promue par l’éducation universitaire en est à son apogée avec un stage de cette ampleur. Et finalement, c’est parfois l’occasion de faire de magnifiques rencontres... 4 Activités Scientifiques et développements Durant le semainier, j’ai rapidement parlé de toutes les tâches que j’ai effectuée durant le stage. En effet, celle-ci n’ont pas été détaillée, ce que je compte faire avec cette section 4. 4.1 Appropriation du contexte Avant de rentrer dans le vif du sujet, autrement dit de générer automatiquement des commentaires à l’aide de la traduction automatique statistique, il m’a fallu passer un peu en revue la littérature existante sur ces deux sujets. Pour cela j’ai lu un certains nombres de papiers et de mémoires provenant soit de mes promoteurs soit d’Internet. Touchant à l’ingénierie linguistique pour la première fois, j’ai appris aussi les notions de base à l’aide de cours trouvés sur internet. Et finalement, afin de me préparer à l’entrainement de corpus de bitexte, il m’a été donné de lire le manuel du logiciel open source Moses et de procéder à son installation. Dans la foulée, j’ai réalisé quelques entrainements sur des petits corpus donnés dans les tutoriels du manuel. La liste des références situées à la fin de ce rapport reprend l’ensemble des titres des lectures que j’ai effectuée. 4.2 Découverte des outils Le premier outil auquel j’ai été confronté, déjà cité dans le paragraphe précédent, est Moses. Disponible gratuitement sur http ://www.statmt.org/moses/, ce logiciel open source permet de réaliser des entrainements de corpus de textes bilingues afin de générer des modèles de traduction. Afin de préparer un corpus de textes, qui dans ce cas-ci rappelons-le, est d’un côté, le code et de l’autre, les commentaires, il me fallait un moyen d’extraire ceux-ci d’un projet Java. C’est en lisant le mémoire d’une étudiante du laboratoire GEODES que j’ai trouvé les outils adéquats. Premièrement, SableCC qui est un générateur de compilateur/interpréteur en Java. Celui-ci permet notamment de représenter un programme java sous forme d’un arbre en XML. Ensuite, en utilisant (J)DOM pour manipuler ces fichiers XML ainsi que le langage de requêtes XPATH pour effectuer des actions précises sur les nœuds de l’arbre, il m’était possible de localiser et extraire les commentaires ainsi que le code lié à ceux-ci. Finalement, afin d’optimiser l’ensemble de mes requêtes, j’ai appris à utiliser au mieux les expressions régulières. 4.3 Implémentations A partir de ces outils, l’implémentation a donc consisté à coder des fonctionnalités dans le langage Java permettant d’extraire les commentaires et le code lié à ceux-ci d’une part, mais aussi d’autre part, d’avoir une certaine aisance à retravailler les fonctionnalités pour permettre de répondre au besoin de préprocesser les corpus en fonction des expériences qu’il serait nécessaire d’effectuer. C’est donc une série de fonctionnalités que j’ai créées, modifiées et adaptées dans le temps en plusieurs versions : – Détecter de quel type est un commentaire (de classe, de méthode ou autres) et pouvoir choisir quel type de commentaire on traite. 7 – – – – 4.4 Récupérer le code lié aux commentaires sélectionnés. Analyser et traiter les caractères spéciaux afin de d’avoir un corpus propre. Splitter d’identifiants (couper un nom de méthode en fonction des majuscules). Etc. Préparations du corpus Avant de se lancer dans l’entrainement, il me fallait évidemment du contenu. Contenu sur lequel j’allais appliquer mes outils afin de préparer un corpus de bitexte code-commentaire. Ce contenu, c’est un ou des programmes Java desquels on va extraire le code et les commentaires. Conseillé par Houari, car connu pour respecter certains bons principes de codage et notamment d’être bien documenté (cas d’université), c’est le logiciel open source JHotDraw qui m’a servi de base pour les premières expériences d’entrainements et de tests d’entrainements. Par la suite et comme déjà noté dans le semainier, j’ai dû télécharger et traiter une vingtaine de projet open source différents afin d’agrandir le corpus. 4.5 Entrainements et Tests de Traductions Une fois le corpus créé à partir de l’extraction des commentaires et du code d’un programme Java, il est temps de lancer l’entrainement à l’aide de Moses sur le bitexte. Cette manipulation va consister à spécifier à Moses en entrée, le bitexte code – commentaire ainsi qu’un certains nombres de paramètres de configuration. Durant l’entrainement, le logiciel calcule les probabilités qu’un certain fragment de texte se répète en parallèle dans sa langue source et dans sa langue cible. C’est ce qu’on appelle la traduction statistique, que j’expliquerai plus dans mon mémoire. L’entrainement est un processus long en fonction de la taille du corpus. Pour donner un exemple, avec des corpus de plusieurs millions de lignes, c’est des heures que prend le logiciel pour effectuer les calculs. En sortie, le logiciel génère un certain nombre de fichiers qui vont être passés en paramètre de la commande de traduction. Cette commande, on l’appelle ensuite sur le texte que l’on souhaite traduire et en output, on reçoit le texte traduit. Le processus est fonctionnel, ce qui nous reste à évaluer, c’est la qualité de la traduction (génération du commentaire). 4.6 Évaluations Comme déjà dit dans le paragraphe précédent, ce que l’on cherche à évaluer, c’est la qualité de la traduction. Pour cela, j’ai constitué un ensemble de 100 morceaux de code extraits du corpus sur lequel on est entrain de travailler. Je les aie ensuite traduits avec le traducteur résultant de l’entrainement effectué avec le dit-corpus. Je me retrouve alors avec un ensemble de 100 commentaires venant de la traduction, que je suis capable d’évaluer en les comparant avec les 100 commentaires originaux liés aux bouts de code choisis. En définissant une métrique telle que par exemple, si le commentaire généré permet de transmettre le sens exact du commentaire original alors on attribue une valeur 3 . Si par contre, le commentaire généré ne permet pas de comprendre le sens du bout de code ou dans le pire de cas, ne représente aucune valeur, alors on attribue une valeur 0 . A l’aide de cette échelle de valeur, il est à la fois simple et efficace d’évaluer les traductions générées et d’émettre, comme on le cherchait, un avis sur l’idée de générer des commentaires automatique grâce à la traduction automatique statistique. 4.7 Résultats et Conclusions Après avoir effectué une série d’entrainements de bitextes de différentes caractéristiques, ainsi que des batteries de tests de traduction code - commentaire que j’ai pu évaluer, les résultats 8 sont sans appel : Oui la technique de la traduction automatique statistique appliquée à un bitexte code - commentaire est fonctionnelle, en effet vu que le principe a été étudié pour calculer des probabilités d’apparitions de série de caractères, sans aucun rapport avec les langues écrites dans le corpus. Mais par contre, les commentaires générés, s’il on peut encore appeler cela des commentaires, sont de valeurs nulles. Les commentaires générés se retrouvent être une série de mots sans aucun lien entre eux, sans aucun sens,... Cependant, de nombreuses améliorations sont encore applicables : préprocesser le corpus selon d’autres idées (retirer les mots clés, balises particulières, adapter la taille des phrases du corpus, ...), modifier le logiciel d’entraı̂nement (ex : Moses), euristiques, etc. 5 Conclusion La conclusion finale de ce rapport ne va pas être longue, et pour cause, la section 3.3 Appréciation apporte déjà une conclusion concernant le déroulement global du stage et la section 4.7 Résultats et Conclusions donnent les conclusions des résultats des expériences effectuées. J’inviterai donc le lecteur à aller lire ces deux points afin de compléter cette conclusion. Mais pour finir, je dirai que les objectifs ont été atteins. L’idée d’appliquer la traduction automatique statistique sur un corpus code-commentaire afin de générer des commentaires a été fonctionnelle dans un sens. Les résultats sont décevants sur la qualité de la traduction évidemment, mais l’idée est viable et peut encore être étudiée et réfléchie sur de nombreux points. J’espère donc que la recherche va continuer sur cette voie, car en effet, la génération automatique de commentaires, n’est-elle pas pour tout programmeur qui se respecte, un rêve ? ... 9