Sujets des projets M1 LI - 2015-2016

Résolution d'anaphores

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:

  1. La recherche des "mentions" (groupes nominaux ou pronoms clitiques) entre lesquelles il faut établir une co-référence. Les emplois non référentiels du pronom de 3e personne il (il explétif) seront déjà distingués.
  2. La résolution de co-référence proprement dite.
  3. L'évaluation, qui rend nécessaire une phase d'annotation manuelle d'un (sous-)corpus du FTB.

Références

  • Voir la page du groupe "coréférence" de Stanford, avec plusieurs articles pertinents.
  • Sur les pronoms impersonnels en français: Danlos L., ILIMP : Outil pour repérer les occurrences du pronom impersonnel il, in Actes de TALN'05, Dourdan. [pdf]
  • Sur le FTB: Page d'information

Rendu minimal

Le rendu minimal attendu pour ce projet comprend:
  • Une implémentation opérationnelle de l'algorithme de stanford tournant sur l'ensemble du ftb en un temps raisonnable en faisant des hypothèses simplificatrices sur la detection des mentions ;
  • L'annotation manuelle selon un schéma d'annotation pertinent d'un sous-corpus du FTB comportant plusieurs centaines de mentions
  • Une mesure de la performance du système et une analyse d'erreurs.
On appréciera en plus :
  • Une version plus sophistiquée de la recherche de mentions (en particulier pour les groupes nominaux enchâssés);
  • Une sortie de l'algo sous forme d'un fichier xml avec les annotations en co-référence
  • ...
Responsable(s)
Pascal Amsili et Olga Seminck
Difficulté
moyenne
Groupe
2 personnes

Moteur de recherche

Dans ce projet, on vous propose de créer un moteur de recherche fondé sur l'approche vectorielle.

  • On considère un ensemble de documents, chacun étant représenté comme un vecteur de descripteurs.
  • Les descripteurs sont en général les mots du document.
  • Une requête entrée par un utilisateur est également transformée en vecteur. La recherche des documents pertinents pour la requête revient à faire une mesure de similarité entre le vecteur de la requête et les vecteurs des documents, et retourner les documents par ordre décroissant de similarité.

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 :

  1. En amont, avant toute recherche : indexation des documents
  2. Puis utilisation du moteur : pour une requête, recherche des documents pertinents
La version de base devra pouvoir traiter des requêtes sur une petite base (par ex. 3000 documents). Une version plus robuste devra pouvoir traiter un volume bien supérieur. Des données d'évaluation seront fournies (base documentaire, et ensemble de requêtes avec documents attendus) permettant une évaluation du moteur (mesure de précision / rappel à X documents).
Responsable
Marie Candito
Groupe
2 personnes
Difficulté de la version de base
Entre facile et moyen

Analyse syntaxique par CKY probabiliste

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 :

  • Binarisation d'un corpus arboré
  • Extraction d'une grammaire hors contexte probabiliste (PCFG)
  • Implémentation de l'algorithme de CKY probabilisé
  • Évaluation du parser

Les difficultés du projet résident dans :

  • la gestion de la grammaire,
  • l'efficacité du parser,
  • la gestion des mots inconnus,
  • etc.
Responsable
Maximin Coavoux
Groupe
2-3 personnes
Difficulté de la version de base
Facile à moyen

Thésaurus distributionnel

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.

Responsable(s)
Marie Candito
Difficulté version de base
Moyenne
Groupe
2 personnes
Langage
Python ou Java

Réseau sémantique à partir d'un dictionnaire

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, ...)

Références

Responsable(s)
Maximin Coavoux
Difficulté
Plutôt difficile
Groupe
2-3 personnes

Repérage des "il" explétifs

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).

Responsable
Marie Candito
Groupe
2 personnes
Difficulté de la version de base
Moyen à difficile (avoir compris le perceptron, l'extraction de traits)

Tagging et reconnaissance de mots composés par classification structurée

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)
Sur les traits spécifiques à l'intégration de dictionnaires externes de mots composés (section 3) : Matthieu Constant, Anthony Sigogne. MWU-aware Part-of-Speech Tagging with a CRF model and lexical resources. ACL Workshop on Multiword Expressions: from Parsing and Generation to the Real World (MWE'11), 2011, Portland, Oregon, United States. pp.49-56, 2011
Responsable(s)
Marie Candito
Difficulté
Difficile
Groupe
2 personnes
Langage
Python ou Java

Amélioration d'un lexique de représentations vectorielles à l'aide de ressources sémantiques

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

Responsable(s)
Maximin Coavoux
Difficulté
Moyen à difficile
Groupe
2 personnes
Langage
Java