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:
L'expansion de requête est une technique employée par des moteurs de recherche (cf. sujet moteur de recherche en L3). Elle consiste à ajouter des termes à une requête, voire à remplacer celle-ci. L'objectif est de retourner à l'utilisateur des documents qu'il n'aurait pas trouvé avec sa requête initiale (exemple : la requête "voiture" ne permettra pas de trouver les documents ne contenant que le terme "automobile", qui sont pourtant pertinents).
Le projet consiste en la mise en place d'un tel système en employant différentes méthodes, parmi celles-ci :
Le programme devra être capable, pour une requête donnée, de proposer de nouvelles requêtes fondées sur les heuristiques présentées ci-dessus. Une évaluation du système d'expansion devra être réalisée, nécessitant de comparer les résultats de requêtes avec et sans expansion (on fournit des données d'évaluation, i.e. un corpus de requêtes avec documents réponses attendus.)
De nos jours, les méthodes d'analyses syntaxiques les plus rapides relèvent du paradigme de l'analyse par transitions. Dans ce paradigme, un arbre est construit par une séquence d'actions. Différent systèmes de transition permettent de prédire des arbres en constituants (shift-reduce) ou des arbres en dépendances (arc-eager, Nivre, 2003).
On vous propose d'implémenter un analyseur syntaxique pour le français dans le formalisme de votre choix (constituants ou dépendances). Le projet s'organisera autour de différents modules qui devront interagir:
Dans la version de base, on utilisera un perceptron moyenné simple (local). À partir de là, plusieurs pistes d'améliorations pourront être explorées:
Références:
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.
Pour aller plus loin, il s'agit de faire le lien avec la technique plus récente de construction de vecteurs de mots par réseaux de neurones à plusieurs couches (word embeddings): vous pourrez présenter les principes de l'algorithme "skip-gram with negative sampling", et la comparaison des 2 types de constructions (Levy et al. 2015).
Références:
Ce projet consiste en une initiation aux méthodes de type deep learning (réseaux de neurones profonds) qui sont devenues standards en traitement automatique des langues.
Dans un premier temps, on vous propose d'implémenter un réseau de neurones simple à propagation avant basé sur l'abstraction du graphe de calcul (Goldberg, 2015) et une méthode d'entraînement par descente de gradient stochastique (SGD).
Dans un second temps, vous testerez le réseau sur une tâche d'étiquetage morphosyntaxique de type fenêtre de mots (window-based) et comparerez les résultats avec un classifieur linéaire (par exemple un perceptron).
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 de lexiques de représentations vectorielles (pour l'anglais et le français), entraînés sur wikipedia à l'aide du modèle skip-gram de Mikolov et al. (2013) et pourrez utiliser les ressources sémantiques de votre choix (par exemple le WOLF pour le français, PPDB / wordnet pour l'anglais). L'algorithme devra être évalué sur une tâche de similarité lexicale, puis sur une tâche d'analyse de sentiments (sur un corpus de critiques de films).
Références