Il s'agit de mettre en œuvre un algorithme de résolution de coréférence à base de règles, publié dans les années 2010, et intitulé Stanford's Multi-Pass Sieve Coreference Resolution System. Le projet consiste à réimplémenter cet algorithme pour le français et à le faire tourner sur le French Tree Bank (corpus arboré). Le projet comporte trois phases distinctes:
Dans ce projet, on vous propose de créer un moteur de recherche fondé sur l'approche vectorielle.
Pour permettre de traiter une base documentaire avec un nombre important de documents, l'aspect crucial est d'utiliser la notion d'index, ce qui permet au moment de la recherche de documents pertinents pour une requête de ne pas reparcourir tous les documents.
Le projet est structuré en 2 parties :
On vous propose d'implémenter un analyseur syntaxique probabiliste en constituants du français à partir du corpus arboré Sequoia Treebank. On s'appuira sur le modèle PCFG et l'algorithme de CKY probabilisé. Le projet pourra se structurer en plusieurs étapes :
Les difficultés du projet résident dans :
Un thésaurus distributionnel est un dictionnaire dont chaque entrée (typiquement un couple lemme / catégorie) est associée à une liste "voisins" distributionnels (à savoir des mots qui apparaîssent fréquemment dans les mêmes contextes), chacun avec un score mesurant la force de l'association.
Ce type de thésaurus se montre extrêmement utile (comme complément ou même comme substitut à une ressource statique telle que Wordnet) pour de nombreuses tâches de TAL, car il permet de généraliser les données lexicales. Par exemple en analyse syntaxique, si on a observé dans un corpus que le rattachement de "couper" et de "avec un couteau" est fréquent, et que l'on sait par ailleurs que "couteau" a pour voisin distributionnel "canif", alors on pourra en déduire que rattacher "avec un canif" à "couper" est plausible. La construction d'un thésaurus distributionnel comprend trois grandes étapes: (i) l'extraction et le prétraitement d'un corpus de grande taille (plusieurs millions de mots), (ii) l'identification des contextes associés à chaque mot (ces contextes peuvent être "linéaires", comme par exemple "le premier mot à droite est 'canif'", ou "le deuxième mot à gauche est 'souvent'", ou bien syntaxiques, comme par exemple "a pour objet direct 'canif'"), et (iii) un calcul de similarité entre contextes. Ce projet mettra donc en oeuvre cette procédure pour la construction d'un thésaurus automatique du français. La version de base utilisera un petit corpus (par ex. 50000 phrases), et n'utilisera que les contextes linéaires. Les deux pistes d'amélioration sont d'une part d'utiliser des contextes syntaxiques et d'autre part de pouvoir traiter un corpus de 100M de mots qui vous sera fourni déjà taggé et analysé syntaxiquement en dépendances.
Il faudra utiliser des modules de manipulation de matrices (comme numpy en python), pour calculer la similarité de paires de lemmes, pour les X lemmes les plus fréquents.
Il s'agit de créer un réseau dont les sommets sont les entrées d'un dictionnaire, ou éventuellement les sous-sens des mots du dictionnaire, et dont les arcs (orientés) relient chaque entrée à toutes les entrées qui participent à sa définition. L'hypothèse sous-jacente est que la structure du dictionnaire permet de retrouver les liens sémantiques entre mots en définissant une "distance sémantique" dans le graphe résultant. On peut ensuite utiliser cette distance pour différentes tâches, comme faire la désambiguïsation des sens d'un mot en contexte ou encore tenter de retrouver des relations lexicales (synonymie, ou hyperonymie...).
Les sources possibles seront le Wiktionnaire du français, ou le Littré, qui existent en version xml. La taille importante des graphes sera gérée par des bibliothèques spécialisées de calcul matriciel.
Le projet devra se restreindre à l'exploitation d'un seul dictionnaire (soit le Littré, soit le Wiktionnaire). Par ailleurs, une tâche d'application devra être menée à bien (extraction de synonymes, désambiguisation de mot en contexte, ...)
Il s'agit de construire un module qui indique pour toute occurrence du clitique il dans un texte, s'il s'agit d'un il explétif (comme dans il pleut ou il est arrivé 3 personnes) ou d'un il référentiel (il mange du chocolat). Cette tâche est utile comme préalable à la résolution de coréférence, ou bien pour repérer les arguments canoniques dans les daithèses impersonnelles (par ex. ds 'il est arrivé 3 personnes', il faut analyser que le sujet canonique de arriver est 3 personnes)
L'approche proposée est l'apprentissage supervisé : un corpus sera fourni où chaque occurrence de il a été manuellement classée en explétif versus référentiel. Il s'agira donc de mettre en place un classifieur binaire (par ex. un perceptron).
La complexité réside essentiellement dans l'extraction des traits pour le classifieur linéaire utilisé. Dans la version de base, les traits utilisables seront seulement les mots du contexte de l'occurrence du il, ainsi que leurs parties du discours. Une version plus sophistiquée pourra utiliser la structure syntaxique de la phrase. L'enjeu est alors de proposer un module générique d'extraction de traits dans un arbre syntaxique.
Possibilité d'utiliser un perceptron fourni (dans un premier temps), puis utiliser son propre perceptron (cf. TD du cours Apprentissage automatique). Possibilité d'utiliser des modules comme scikit-learn (avantage de pouvoir tester plusieurs types de classifieurs).
Il s'agit de traiter conjointement le problème de l'étiquetage morpho-syntaxique et celui de la reconnaissance de mots composés. En partant d'un texte segmenté en phrases et en tokens, le module à réaliser devra prédire quelles séquences de tokens représentent en contexte un mot composé, et pour chaque mot (simple ou composé), quelle est sa catégorie morpho-syntaxique en contexte.
L'intégration de la tâche de reco des composés se fait en utilisation la notation "BIO" (ou plutôt BI uniquement) : chaque tag est constitué d'une catégorie morpho-syntaxique, plus un B (pour Begin) ou un I (pour Inside), selon qu'il s'agit du premier (et éventuellement unique) composant d'un mot, ou bien d'un composant interne ou dernier d'un mot composé. Par exemple
Je/B_Cl mange/B_V des/B_Det pommes/B_N de/I_N terre/I_N parce/B_Cs que/I_Cs c'/B_Cl est/B_V délicieux/B_Adj B/PONCT.
"Je" a la catégorie "Cl", et est le premier et unique composant du mot "Je", d'où le tag "B_Cl". "de" est un composant interne du composé "pomme de terre", qui a la catégorie "N", d'où le tag "I_N".
La tâche se ramène ainsi à une tâche d'étiquetage séquentiel, pour laquelle un perceptron glouton peut être utilisé.
Une amélioration peut consister à intégrer des lexiques de mots composés sous forme de traits (par exemple un trait booléen "ce token est un composant potentiel de composé nominal, étant donné le contexte du token"). Il faut alors préalablement à l'extraction de traits, rechercher dans la phrase toutes les occurrences potentielles (et ambigues) des mots composés d'un lexique.
Possibilité d'utiliser un perceptron fourni (dans un premier temps), puis utiliser son propre perceptron (cf. TD du cours Apprentissage automatique). Pour aller plus loin : possibilité de comparer l'approche gloutonne avec une approche par faisceaux (beam search) voire avec une approche à optimisation globale (Viterbi).
Références pour la version de base: cours méthodes probas , cours Apprentissage automatique
Références pour version plus sophistiquée:
Sur le perceptron structuré (=à optimisation globale) : Michael Collins. 2002. Discriminative training methods for hidden markov models: Theory and experiments with perceptron algorithms. In Proceedings of the Conference on Empirical Methods in Natural Language Processing (EMNLP)On vous propose d'implémenter et d'évaluer sur le français (ou sur la langue de votre choix) l'algorithme de retrofitting proposé par Faruqui et al. (2015). Cet algorithme vise à utiliser les connaissances issues d'une ressource sémantique (liens de synonymie, d'hyperonymie, etc) pour améliorer un lexique de représentations vectorielles distributionnelles de mots.
Vous disposerez d'un lexique de représentations vectorielles pour le français, entraîné sur wikipedia à l'aide du modèle skip-gram de (Mikolov et al. 2013) et pourrez utiliser les ressources sémantiques de votre choix (le WOLF par exemple). L'algorithme devra être évalué sur une tâche de similarité lexicale, et sur une autre tâche proposée par les étudiant-e-s (extraction de synonymes, désambiguïsation de mots en contexte, ...).
Références