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 : Pascal Amsili
Difficulté : Moyen à Difficile
Langage : Java ou python
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 : Benoit Crabbé
Langage : Java ou python
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 : Benoit Crabbé
Langage : Java ou python
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 : Pascal Amsili
Difficulté : Facile à Difficile
Langage : Java ou Python
Groupe : 2 personnes
Extraction de collocations en corpus
Les collocations sont des ensembles de deux ou plusieurs mots qui ont une syntaxe régulière, mais dont un des composants n'est pas sélectionné librement et/ou dont un des composants n'a pas son sens habituel.
Par exemple on considère que thé fort est une collocation car 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é.
Une technique de repérage des collocations utilise le fait qu'ils sont plus fréquemment coocurrents que la normale. 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 : Benoit Crabbé
Difficulté : Moyen
Langage : Java ou langage de script (python ou Perl) et initiation au langage R (facultatif)
Groupe : 2 personnes