Informatique et recherche
opérationnelle
IFT6010

Intelligence Artificielle
Traitement statistique des langues naturelles

Hiver 2003


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

[Cahier des charges] | [Programmes] | [Rapport] | [Ressources]

Cahier des charges

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.

Programmes

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

Rapport

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.

Ressources

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:

[Cahier des charges] | [Programmes] | [Rapport] | [Ressources]

Si vous avez des questions, n'hésitez pas à me contacter.