Description générale

Il s’agit de développer un système à base d’apprentissage automatique avec l’outil Wapiti. La documentation se trouve cette page. Les types d’entités à détecter sont les _pers et les _time. Il s’agit des types les plus extérieurs (version simplifiée). La version complète du guide d’annotation est disponible ici.

Exemple de simplification
comment  <pers.ind>  <name.first> Eric  </name.first>  <name.last> Woerth  </name.last>  </pers.ind>

devient

comment  <pers> Eric  Woerth </pers>

Tout ce qui se rapporte au développement de ce système à base de règles se trouve l’archive disponible ici.

Objectifs

L’objectif pour ce TP est de développer un système de détection d’entités avec l’outil wapiti et de procéder à des évaluations et des analyses des résultats.

Récupération et décompression de l’archive

Vous pouvez télécharger l’archive en cliquant sur ce lien.

Vous lancez ensuite la commande :

tar xvfz sys-crf.tar.gz

Pour changer automatique les chemins dans l’ensemble des scripts, tapez la commande suivante :

cd sys-crf
./change-path.sh `pwd`

Structure de l’archive

L’archive contient, outre les deux scripts liés au changement automatique de paths, un ensemble de répertoire ainsi que le système de base et les ressources utiles.

La structure est la suivante :

  • bin <– les exécutables (voir plus bas)
  • data <– les données (voir plus bas)
  • hyp <– le répertoire où vous mettrez les sorties de vos systèmes
  • models <– le répertoire où sauvegarder les modèles appris avec wapiti
  • patterns <– le répertoire où mettre les fichiers de pattern
  • res <– le répertoire où mettre les résultats des évaluations
  • scripts <– un répertoire contenant des scripts utiles
    • BIO-to-xml.awk : passer du format BIO au format xml (simple)
    • BIO-to-Full-xml.awk : passer du format BIO au format xml (arbres complets)
    • apply.sh : appliquer un modèle sur un fichier
    • all_asr_apply.sh : appliquer un modèle sur tous les fichiers asr
    • asr_apply.sh : appliquer un modèle sur un fichier asr
    • all_asr_eval.sh : évaluer sur tous les dichiers asr
    • asr_eval.sh : évaluer sur un fichier asr
    • config.lua : fichier de confirguration pour évaluation
    • eval.sh : évaluer sur un fichier transcription manuelle
    • learn.sh : apprendre un modèle
    • pos.lua : annotation en POS
    • pos.sh : lacement annotation en POS
    • xml-to-bio.awk : passer du format xml au format bio

Récupération des outils

L’ensemble des outils compilés utiles (voire indispensables) se trouvent sur ce site. Récupérez-les et mettez-les dans le répertoire bin/

Ensuite, allez dans le répertoire bin/ et rendez exécutable les programmes.

cd bin/
chmod 755 *

Données

Vous disposez des données d’apprentissage de ETAPE annotées avec la version simplifiée du guide. Celle-ci comprend la version annotée uniquement avec les _pers et les _time et la version avec tous les types (plus haut niveau à chaque fois, c’est à dire _amount, _func, _loc, _org, _prod, ainsi que _pers et _time). Ces données sont disponibles dans deux formats :

  • bio : un mot par ligne ; la deuxième colonne contient le type de l’entité. Il s’agit donc d’un format tabulaire (comme une table). Exemple :

Exemple:

comment   o
Eric 	  b-_pers
Woerth 	  i-_pers
peut-il   o
encore 	  o
euh 	  o
  • sgml : une “phrase” par ligne, les entités sont entourés par des tags sgml. Exemple :

Exemple:

comment <_pers> Eric Woerth </_pers> peut-il encore euh

Ces données sont disponibles dans le répertoire data. Vous disposez des données :

  • pour l’apprentissage : transcrites manuellement et annotées manuellement au format sgml et bio avec différentes typologies (complète, simplifiée et ultra-simplifiée)
  • pour le test : transcrites manuellement annotée pour la référence ou non annotée et transcrites automatiquement annotées manuellement par projection et non annotées.

L’organisation de ce répertoire est la suivante :

data
 trn						<-- données annotées
 						apprentissage/développement
  train_Etape_Complet_u8.bio
  train_Etape_Complet_u8.sgml
  train_Etape_POS.bio
  train_Etape_SimplifiedPERS+TIME_POS_u8.bio
  train_Etape_SimplifiedPERS+TIME_u8.bio
  train_Etape_SimplifiedPERS+TIME_u8.sgml
  train_Etape_Simplified_u8.bio
  train_Etape_Simplified_u8.sgml
 test						<-- données d'évaluation
  asr
   rover/*.txt
   s23/*.txt
   s25/*.txt
  man						<-- données textes simples
   test_man_Etape_u8.bio
   test_man_Etape_u8.txt
  references					<-- données de références
  						    (annotées)
   asr						<-- transcriptions automatiques
   						(projection/aref)
    rover/*.aref
    s23/*.aref
    s25/*aref
   man						<-- transcriptions manuelles
    test_man_Etape_Complet_u8.bio
    test_man_Etape_Complet_u8.sgml
    test_man_Etape_SimplifiedPERS+TIME_u8.bio
    test_man_Etape_SimplifiedPERS+TIME_u8.sgml
    test_man_Etape_Simplified_u8.bio
    test_man_Etape_Simplified_u8.sgml
    test_man_Etape_Simplified_u8.sgml

Wapiti

Wapiti est une boîte à outil dédiée à la segmentation et à l’étiquetage de séquences développée au LIMSI par Thomas Lavergne. Ce logiciel intègre plusieurs modèles (MaxEnt, MEMM, CRF). Ici nous utiliserons les CRF qui sont les plus appropriés pour la détection et la reconnaissance des entités nommées. Son manuel est consultable à cette page.

La syntaxe générale est :

wapiti mode [options] [input] [output]

Apprentissage

Pour apprendre un modèle CRF sur un corpus, il faut d’une part disposer de celui-ci au format BIO (c’est le cas) et d’autre part définir les features qu’il aura à utiliser (c’est à dire les caractéristiques utiles pour apprendre). Ces features sont définis sous la forme de patrons dans un fichier texte. La syntaxe des patrons est définie sur cette page.

Le fichier de patron considère le token courant du fichier donné en entrée (on le note %x). Par exemple :

colonnes: 0	  1
          comment o
	  Eric    b-_pers <<--- token courant
	  Woerth  i-_pers
	  peut-il o
	  encore  o
	  euh     o

Il indique les informations utilisées pour étiqueter ce token. Les informations sont référencées par leur position (ligne) par rapport au token courant, et leur type (colonne). Par exemple %x[-1,0] => comment définit le token “comment” comme un feature. En effet, il indique qu’il faut regarder la ligne au-dessus de x (Eric) et sur cette ligne la colonne 0 (c’est à dire la première colonne).

La syntaxe de ses patrons permet non seulement de dire que tel ou tel élément de telle ou telle ligne ou colonne doit être utilisé mais également si ce token appartient à un classe donnée. Par exemple :

# le token commence par une majuscule ? (BegC)

*:BegC? X=%t[ 0,0,"^\u"]

vérifie si le mot courant commence par une majuscule.

Vous disposez d’un fichier de patron simples que vous pourrez améliorer, notamment en intégrant d’autres informations comme les parties du discours (voir plus bas). Ce fichier se trouve dans le répertoire patterns/.

L’organisation de cette archive est :

system-crf
   hyp:
     test_Etape_MPM.bio
     test_Etape_MPM.sgml

   models:
     mon_premier_model

   patterns:
     basic-patterns.txt

   scripts:
     learn.sh
     apply.sh
     eval.sh
     config.lua
     BIO-to-xml.awk
     xml-to-bio.awk

Améliorations

Pour améliorer le système vous pouvez enrichir ses features. Par exemple, vous pouvez utiliser des annotations en partie du discours (POS) et ajouter des patrons qui en tiennent compte.

Vous disposez dans le répertoire script, d’un script pos.sh qui annote un fichier en POS et remet le tout en format tabulaire. La deuxième colonne contient les POS. Il ressemble à ceci :

Exemple:

comment o
Eric    b-_pers
Woerth  i-_pers
peut-il o
encore  o
euh     o

Evaluations

Pour évaluer votre système, vous devez comparer ses hypothèses (sa sortie analysée) avec la référence. Pour cela vous disposez d’un logiciel qui vous permet d’obtenir les scores mais aussi les listes des différentes erreurs et de ce qui est bon dans un format texte lisible dans n’importe quel éditeur.

Ce logiciel, ne-scoring-gen, prend en paramètre un fichier de configuration (config.lua), un fichier de référence (annotations manuelles) et un fichier d’hypothèses (annotations automatiques). Il propose différentes options.

NE scoring

Usage: ne-scoring-gen [options] descr.lua ref-file hyp-file
  -a                  reference is in "aref" format
  -s                  show summary of results (default)
  -d                  show detail of errors
  -c                  show detail of errors and corrects
  -i <expected_count> show IAG-type values
  -o                  open - in IAG mode, there are no confusions

Vous disposez dans le répertoire scripts/ d’un ensemble de scripts permettant de faire différentes évaluations. Il s’agit de modèles que vous pourrez développer plus avant, selon vos besoins.