Accueil
Cours après cours
Devoirs
Horaires et locaux
Au sujet du livre de cours
Consultez vos notes
Liens utiles
Contact
Les séminaires RALI/LLI
|
|
TP1 Correction orthographique
Le but de ce travail est de vous faire réaliser un mini-correcteur
orthographique qui utilise un modèle de langue. Le détail de la
technique à déployer est décrite dans ces transparents.
Vous devez remettre:
- un programme corrige qui permet de
réaliser la correction orthographique d'un texte passé en argument, en
fait, vous remettrez le(s) source(s) associé(s) à ce programme ainsi
que la commande (ex: le fichier Makefile) à utiliser pour obtenir
l'exécutable.
- un programme eval qui calcule des taux de
précision et de rappel de votre correcteur sur un corpus de test
(idem: remettez les sources et la commande pour créer un exécutable)
- un rapport (d'au plus quelques pages) au
format postscript décrivant les expérimentations que vous avez
effectuées (faites ressortir les points les plus intéressants de votre
travail). Je vous encourage à utiliser LaTeX
pour rédiger votre rapport.
Le tout est à remettre par la commande remise sur le compte
pift6010, sous la référence TP1.
Exemple de commande de remise
J'ai écrit deux sources corrige.cc et
eval.cc (qui contiennent chacun une méthode
main ) et une librairie d'outils outils.cc . Ma
librairie est accompagnée d'un fichier d'entête
outils.h. Mon projet se compile à l'aide de ce Makefile. J'ai de plus généré un rapport au
format postscript nommée rapport.ps qui explique ce que
j'ai fait.
La commande de remise à utiliser est:
remise pift6010 TP1 corrige.cc eval.cc outils.cc outils.h Makefile rapport.ps
|
Prenez note que je compilerai (le cas échéant) et exécuterai
vos programmes sous l'environnement Linux qui est le votre au
département à l'aide des outils disponibles au département. Je ne
considererai pas de code qui tourne (exclusivement) sous d'autres
systèmes, ou à l'aide d'outils auxquels je n'ai pas accès.
Programme corrige
Votre programme doit respecter le sysnopsis suivant (vous pouvez
ajouter des options)
Synopsys: corrige fichier modele lexique où:
-
fichier est le texte à corriger. On supposera le
format suivant: un mot par ligne, {sent} est un marqueur
de fin de phrase. Voici un exemple d'un tel fichier out-3.test qui contient les 3 phrases:
SRC 1: il y a beaucoup d' autraes questions que je voudrais aborder , y compris notre avenir économique , mais il ne me reste plus de temps .
SRC 2: des voix : bravo !
SRC 3: l' ajournement
-
modele est le nom du fichier qui contient les
paramètres de votre modèle. Voir la section ressources pour plus d'information sur la
manière dont les modèles vous sont donnés.
-
lexique est le fichier qui contient la liste des
mots connus du modèle (fichier ascii, un mot par ligne). Deux symboles
# est début de ligne indiquent un commentaire. Voici un exemple de
vocabulaire reconnu par l'un des modèles distribué: hans-100000.vocab. Ce lexique contient
8000 formes différentes dont les six premières sont (! $ ( ) , --). (La suite du ficher contient des
mots plus "pertinents").
Votre programme doit fournir sous le format spécifié ci-après les
corrections possibles à tous les mots qui n'apparaîssent pas dans
lexique . Le nombre de corrections suggérées peut être une
option de votre programme. Le score associé à une correction est donné
par le modèle de langue.
Le format que votre programme doit générer est le suivant: un mot
par ligne, lorsqu'un mot est inconnu du lexique, préfixez la ligne du
mot CORRECTION: , indiquez la forme inconnue puis listez
-- en ordre décroissant de probabilité -- les n corrections
(les mots du lexiques dont la distance d'édition à la forme inconnue
est faible). Un espace sépare chaque forme. Voici à titre indicatif le
fichier généré par un correcteur (semblable
à celui que vous devez programmer) sur l'exemple out-3.test (les 3 premières corrections - au
plus - d'une forme incorrecte ont été demandées ici).
La ligne 6 de ce fichier indique qu'il y a une forme erronée
autraes et que la première correction suggérée est
auteurs, la seconde autres et la troisième autre:
CORRECTION: autraes auteurs autres autre
|
Programme eval
Votre programme doit respecter le sysnopsis suivant (vous pouvez
ajouter des options)
Synopsys: eval candidat reference où:
-
candidat est le fichier produit par le programme corrige.
-
reference est un fichier où les formes erronées sont
remplacées par leur correction (unique). Voici la référence associée à
l'exemple précédant out-3.ref
Votre programme doit analyser les performances de votre correcteur en
terme de précision et de rappel, des valeurs entre 0 et 1.
- La précision -au rang i- de votre correcteur est le ratio
du nombre de fois où la correction d'une forme inconnue a été proposée
à un rang j inférieur ou égal à i sur le nombre de fois
où une erreur a été détectée.
- Le rappel est le rapport du nombre de mots détectés par le
correcteur comme erronés sur le nombre véritable d'erreurs (selon la
référence). À moins que vous ne changiez les lexiques lors de la
correction, vous devriez mesurer un rappel de 1, ce qui représente une
situation un peu simpliste: toute forme inconnue de votre lexique est
une erreur. En pratique, rien n'empêche qu'une erreur identifiée comme
telle dans la référence, corresponde à une forme originale appartenant
au lexique. Ce sera par exemple le cas, si dans votre référence, des
fautes d'accord ont été détectées (ex: il a connu
des journées faste corrigé en il a
connu des journées fastes).
Les précisions à différents rangs ainsi que le rappel vous
permettent d'évaluer la qualité de votre correcteur. On cherche
idéalement à obtenir un correcteur de précision (si possible au rang
1) et de rappel maximum; c'est à dire égaux à 1. En pratique,
maximiser la précision se fait souvent au détriment du rappel (et
vice-versa). Il est par exemple d'obtenir une très bonne précision
avec un correcteur silencieux sauf, dans des cas très spéciaux où il
est sûr de la correction proposée (ex: un système qui ne saurait
corriger que anticonstitutionnelement en anticonstitutionnellement). Un tel système aurait
alors (dans un vrai test) un rappel très bas (proche de 0).
Dans notre exemple, les taux suivants peuvent être mesurés:
- La précision au rang 1 est 0 (la première solution proposée par le
correcteur n'est pas la bonne), d'où une précision de 0/1.
- La précision au rang 2 est 1 car la deuxième correction est
juste, ce qui fait un ratio de 1/1 bonne réponse. À fortiori, les
précisions aux rangs supérieurs sont toutes égales à 1.
- Le rappel: est ici de 1
|
Vous devez remettre un rapport qui explique brièvement ce que vous
avez implanté et expérimenté. Je m'attends par exemple à lire des
données sur les temps de correction liés à votre implémentation (en
fonction de la taille du lexique par exemple), sur l'influence du
modèle utilisé sur les performances mesurées.
C'est dans ce rapport que devraient figurer toutes les
informations qui feraient ressortir des points particuliers que vous
avez expérimentés (détails de codage, etc). Voici à titre indicatif
quelques questions que vous pourriez vous poser en faisant ce travail
et que vous pourriez avoir envie d'expérimenter (et donc de décrire
dans votre rapport):
- Que se passe-t-il lorsque le texte contient des erreurs adjacentes ?
- Que se passe-t-il si je prends une distance de hamming à la place d'une distance d'édition ?
- Que se passe-t-il si je change les pondérations des opérations de base de la distance d'édition ?
- Pourquoi me suis-je inscrit à ce cours ?
- etc.
Les modèles de langue
À l'aide d'un sous-ensemble de textes des débats parlementaires
canadiens (Hansard), j'ai entraîné trois modèles trigrammes différents
pour le français. Chaque modèle vous est donné avec: la liste des
types qu'il reconnaît (extension .vocab), et la liste des probabilités
(extension .arpa) dans un format ascii spécifié à même le fichier.
Ces modèles ont été entraînés à l'aide du package CMU-SLM
que vous pouvez télécharger et utiliser selon les conditions
spécifiées.
Lorsqu'un mot n'existe pas dans la liste donnée avec chaque modèle, il
est associé au mot qui est modélisé comme tout autre mot du
vocabulaire (on a donc ajouté un mot au vocabulaire de chque modèle).
Dans les fichiers .vocab, les lignes commençant par un double # sont
des commentaires.
|
Des fichiers de test
Voici cinq fichiers de test accompagnés de leur référence:
|
Si vous avez des questions, n'hésitez pas à me contacter.
|