ELIZA en français
On vous propose d'implémenter une version française de ELIZA. ELIZA est historiquement
le premier succès spectaculaire du TAL. Il s'agit d'un petit agent conversationnel qui simule
une conversation entre vous et un psychanalyste de patience infinie. Exemple de conversation
en français :
Système : "Comment allez vous ?"
Utilisateur : "Je suis déprimé."
S : "Dites-moi pourquoi vous êtes déprimé."
U : "Je passe trop de temps avec les ordinateurs."
S : "Pourquoi mentionnez-vous les ordinateurs ?"
U : "Parce que tu en es un."
S : "Quels sont vos rapports avec les ordinateurs ?"
U : "Difficiles."
S : etc
Ce petit agent fonctionne principalement à l'aide de techniques élémentaires de pattern
matching (expressions régulières) et vous demande de manipuler une pile simulant sa mémoire.
Le sujet se focalisera sur les points suivants :
- Identifier un mot clé et axer la réponse sur ce mot clé (exemple : retenir un
groupe de deux mots commençant par un déterminant, "les ordinateurs" dans "Je passe
trop de temps avec les ordinateurs"),
- Revenir à un mot clé quand l'énoncé courant ne permet de générer aucune réponse,
- Exploiter des phrases à trou (exemple : "Pourquoi mentionnez-vous" + mot clé),
- Traduire les mots référant aux interlocuteurs : "je", "vous", "moi", "me", etc.
(exemple : "je suis déprimé" devient "vous êtes déprimé" dans "Dites-moi pourquoi vous êtes déprimé").
- Sortir des réponses types au hasard (exemple : "Comment allez-vous ?").
Responsable : Grégoire Winterstein
Difficulté : difficile
Langage : Java
Groupe : 2 personnes
Détection de la langue d'un texte
Pour détecter la langue d'un texte, on peut constituer une base de
connaissances à partir d'un corpus de textes classés par langue. Pour
chaque langue, un premier programme (à écrire) recueillera des
statistiques significatives, basées sur les lettres (par exemple, il y
a plus de "w" en anglais qu'en français). Le choix du modèle
probabiliste employé et de ses paramètres (bigrammes, trigrammes)
devra être justifié dans le rapport. On peut en proposer plusieurs et
discuter de leurs avantages et inconvenients (rapport entre précision
de la reconnaissance et volume de la base de connaissances ou longueur
du texte nécessaire pour reconnaître sa langue).
Un deuxième programme (à écrire), utilisera ces bases de
connaissances pour reconnaître la langue d'un texte.
Vous utiliserez un corpus d'apprentissage comprenant des textes
plus ou moins variés d'un certain nombre de langues (le plus de
langues possible, au moins 4). Le corpus de test ne devra pas contenir
de texte appartenant au corpus d'apprentissage.
Amélioration possible : gérer des textes dans différents
encodages, pour les langues à alphabet non latin.
Responsable : Grégoire Winterstein
Langage : Java
Groupe : 2 personnes
Difficulté :Facile à moyen
Correcteur orthographique (approche graphémique)
On se propose de réaliser un correcteur orthographique (lexical),
qui, disposant d'un dictionnaire de formes fléchies, détecte les mots
mal orthographiés, et propose si possible une correction.
Le programme prend un texte (ASCII brut) en entrée, et pour chaque
forme non présente dans le dictionnaire, propose à l'utilisateur :
- de choisir un de ces remplaçants
- pour l'occurrence, ou pour toutes les occurrences
- de fournir un remplaçant
- pour l'occurrence, ou pour toutes les occurrences
- si le remplaçant n'est pas dans le lexique,
- de l'insérer dans le lexique pour ce texte,
- de l'insérer dans le lexique stable
- d'ignorer la correction, c'est-à-dire conserver le mot
initial, pour cette occurrence ou pour toutes, en l'insérant
ou non dans le lexique.
Les remplaçants proposés par le programme (premier cas plus haut)
seront des mots figurant dans le dictionnaire, et ayant une certaine
proximité avec le mot fautif.
Pour la recherche des mots proches, on appliquera diverses
heuristiques, basées sur la forme du mot :
- repérage des bigrammes ou trigrammes impossibles en français
- redoublement ou dé-doublement de consonnes
- suppression/insertion de diacritiques
- distance d'édition
- etc
Ces heuristiques, qui peuvent être plus nombreuses, seront étudiées
linguistiquement afin de déterminer précisément leurs conditions d'application.
Ressources :
Responsable : Grégoire Winterstein
Langage : Java
Groupe : 2 personnes
Réaccentuation
Le programme est chargé de remettre les accents et autres signes
diacritiques manquant dans un texte fourni en typographie dite pauvre.
On s'aidera d'un lexique de formes fléchies fourni. Bien sûr,
certaines formes peuvent être réaccentuées directement, et d'autres
sont ambigues. Une fois que l'algorithme principal sera établi, on
envisagera des heuristiques pour lever les ambiguïtés. Exemple :
La ou le francais n'est pas accentue,
il y a de la gene,
mais quand le systeme m'accentue,
je suis moins gene!
Ressources :
Responsable : Grégoire Winterstein
Langage : Java
Groupe : 2 personnes
Entités Nommées
On regroupe sous le terme "entités nommées" les noms de personnes,
de lieux, de dates, noms d'entreprises, adresses, etc. Il s'agit
d'expressions qui dénotent une entité unique de façon presque
indépendante du contexte. On s'intéresse aux entités nommées pour
plusieurs raisons :
- elles constituent des syntagmes qui peuvent être relativement
complexes au point de vue syntaxique (par exemple une adresse, ou un
nom d'association) dont le repérage préalable peut grandement siplifier une analyse syntaxique ;
- dans une perspective de recherche d'information, la
reconnaissance des entités nommées permet de savoir de quoi parle un texte ;
- elles sont nécessaires pour la résolution des anaphores.
Il s'agit dans ce projet de repérer de la façon la plus complète
possible dans un texte étiqueté ou non, les entités de type
"personne". Pour cela, on envisagera un algorithme en deux étapes
(qui peuvent se répéter) :
- au moyen de règles générales et de dictionnaires spécialisés
(noms propres, amorces --- c'est-à-dire mots qui introduisent
systématiquement des entités nommées, comme 'Melle', etc.),
constitution d'une "table des symboles" des entités présentes dans le texte ;
- à partir de cette table des symboles, et en tenant compte des
formes variées sous lesquelles une même entités peut être désignée,
recherche de nouvelles entités, voire de nouvelles règles trouvées précédemment.
L'idée est que le programme s'enrichit au fur et à mesure qu'il
est utilisé.
Responsable : Grégoire Winterstein
Difficulté : Facile à très difficile
Langage : Java
Groupe : 2 ou 3 personnes
Extraction de collocations en corpus
Les collocations sont des ensembles de deux ou plusieurs mots qui sont plus fréquemment coocurrents que la normale. Il s'agit de constructions qui ont une syntaxe classique mais une sémantique qui n'est pas complètement compositionnelle.
Par exemple on considère que thé fort est une collocation car ces deux mots apparaissent assez souvent en même temps et le sens de fort dans cette séquence est légèrement altéré : il ne s'agit pas d'une grande force physique mais plutôt d'une forte concentration d'un agent du thé.
Ce sujet propose de partir à la découverte de différentes méthodes connues de détection de collocations en corpus reposant sur des tests d'hypothèses statistiques (comme par exemple le test du Chi2 ou le test exact de Fisher) en utilisant des logiciels d'analyse de données appropriés.
Responsable : Grégoire Winterstein
Difficulté : Moyen
Langage : Java ou langage de script (python ou Perl) et initiation au langage R (facultatif)
Groupe : 2 personnes
Clavier Téléphone (T9)
La plupart des téléphones associent à chaque touche un certain nombre de lettres, permettant ainsi de transmettre des messages. Du fait qu'un chiffre ne correspond pas à une seule lettre, une suite de chiffres peut être ambiguë (elle peut correspondre à plus d'un mot). La suite 7-6-8-7, par exemple, correspond aux mots pour, sous et pots.
Le but du projet est de réaliser un programme qui prend en entrée une suite de chiffre et un dictionnaire de formes fléchies et qui propose en sortie la liste des mots du dictionnaire qui correspondent à la suite des chiffres. Ces mots seront classés selon une fréquence représentée dans le dictionnaire.
On attachera un soin particulier au choix de la structure de données, et à l'algorithme, qui doit faire le calcul en un temps raisonnable.
Responsable : Grégoire Winterstein
Difficulté : Moyen
Langage : Java ou langage de script (python ou Perl)
Groupe : 2 personnes