Entraînement d'un tagueur

From Apertium
Revision as of 19:11, 6 March 2012 by Bech (talk | contribs) (Création page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Une fois que vos dictionnaires ont une taille raisonnable, disons peut-être 3000 lemmes au total, ça vaut la peine d'entraîner le tagger. Pour le faire, vous aurez besoin de deux choses, un corpus de taille décente , déjà balisé ou non balisé, et un fichier .tsx. Les instructions de base peuvent être trouvées ci-dessous.

Création d'un corpus

Wikipedia

Un corpus de base peut être récupéré d'un dump Wikipedia (voir ici) comme suit :

$ bzcat afwiki-20070508-pages-articles.xml.bz2 | grep '^[A-Z]' |\
sed 's/$/\n/g
     s/\[\[.*|//g
     s/\]\]//g
     s/\[\[//g
     s/&.*;/ /g' > moncorpus.txt

Une autre option pour découper Wikipedia, qui donnera probablement un corpus de plus grande qualité, est celle qui suit. D'abord téléchargez ce script,puis :

$ bzcat enwiki-20081008-pages-articles.xml.bz2.part > enwiki.xml

Maintenant, utilisez le script ci-dessus pour obtenir enwiki.txt et ensuite

$ cat enwiki-20091001-pages-articles.txt | grep -v "''" | grep -v http | grep -v "#" | grep -v "@" |\
grep -e '................................................' | sort -fiu | sort -R | nl -s ". " > enwiki.crp.txt

Les 3 dernières commandes ne sont pas strictement nécessaires. Elles sélectionnent et trient seulement des lignes uniques, et ensuite les remettent en vrac (mélange des phrases) et rajoutent des numéros de ligne.

Autres sources

Certains corpus pré-traités peuvent être trouvés ici et ici.

Écriture d'un fichier TSX

Voir aussi : Le format TSX

Un fichier .tsx est un fichier de définition de balises, il remplace les belles balises provenant de l'analyseur morphologique en balises grossières du tagger. La DTD est dans tagger.dtd, bien qu'il soit probablement plus facile de jeter un coup d'oeil à un ficher pré-écrit dans d'autres paires de langues.

Le fichier devrait être dans le répertoire de la paire de langues et être appelé (par exemple pour la paire anglais-afrikaans), apertium-en-af.en.tsx pour le tagger anglais, et apertium-en-af.af.tsx pour le tagger afrikaans.

Le fichier TSX définit un ensemble de "balises grossières" pour les groupes de "belles balises", on fait ça parce que le module POS tagging n'a pas besoin d'autant d'informations comme celles définies dans les belles balises. Ça permet aussi à l'utilisateur d'appliquer un ensemble de restrictions ou d'enforcements (obligations). Par exemple pour interdire un adverbe relatif au début d'une phrase (SENT RELADV), ou pour interdire un pronom après un nom (NOM PRNPERS).

Vous pouvez aussi écrire des règles lexicales, donc par exemple en afrikaans, le mot "deur" est ambigu, l'un des sens est "par" (comme préposition) et l'autre est "porte" (comme nom). Donc on peut définir deux balises grossières, DEURNOM and DEURPR, et ensuite une règle d'interdiction pour dire "interdire 'porte' avant 'le' ou 'la'".

Il vaut mieux considérer ce fichier avec soin et probablement aussi consulter un linguiste, dans la mesure où le tagger peut faire une grosse différence dans la qualité de la traduction finale. L'exemple qui suit donne la structure de base du fichier :

<?xml version="1.0" encoding="UTF-8"?>
<tagger name="afrikaans">
  <tagset>
    <def-label name="DEURNOM" closed="true">
      <tags-item lemma="deur" tags="n.*"/>
    </def-label> 
    <def-label name="DEURPR" closed="true">
      <tags-item lemma="deur" tags="pr"/>
    </def-label>     
    <def-label name="NOM">
      <tags-item tags="n.*"/>
    </def-label> 
    <def-label name="PRNPERS" closed="true">
      <tags-item tags="prpers.*"/>
    </def-label> 
    <def-label name="DET" closed="true">
      <tags-item tags="det.*"/>
    </def-label> 
  </tagset>
  <forbid>
    <label-sequence>
      <label-item label="NOM"/>
      <label-item label="PRNPERS"/>
    </label-sequence>
    <label-sequence>
      <label-item label="DEURNOM"/>
      <label-item label="DET"/>
    </label-sequence>
  </forbid>
</tagger>

Vous aurez besoin de suffisamment de balises grossières pour couvrir toutes les belles balises de vos dictionnaires.

Entraîner le tagger

Voici une note brève sur les différentes manières d'entraîner que vous pouvez employer :

  • Non supervisé — Elle utilise un gros corpus (des centaines de milliers de mots) non marqués et l'algorithme itératif Baum-Welch d'une manière totalement non supervisée. C'est la manière la moins efficace d'entraîner le tagger, mais c'est aussi la plus économique en terme de temps et de ressources.
  • Supervisé — Elle utilise un corpus marqué de taille moyenne (minimum 30000 mots).
  • Utiliser apertium-tagger-trainer — Elle utilise un gros corpus non marqué dans la langue cible, un fichier .prob déjà entraîné et un traducteur existant. Elle fonctionne aussi bien que l'entraînement supervisé sans avoir besoin de marquer à la main un corpus, le coût est d'être un peu rusé pour le mettre en oeuvre.

Pour l'instant apertium-tagger-trainer fonctionne seulement avec apertium 1, donc ce n'est pas une option pour la plupart des paires.--Jacob Nordfalk 06:15, 17 septembre 2008 (UTC) (Clarification : ça fonctionne seulement avec le transfert en une étape, donc les paires Apertium 3 qui utilisent seulement un fichier .t1x peuvent toujours l'utiliser.)

Non supervisé

Article principal : Créer un tagger en mode automatique

Supervisé

Cette section n'est pas encore écrite.

Formation d'un tagger de langue cible

Article principal : Formation d'un tagger de langue cible

C'est un paquet appelé apertium-tagger-training-tools qui entraîne les taggers basés à la fois sur les informations de langues source et cibles. Les fichiers de probabilité résultants sont aussi bons que ceux des entraînements supervisés pour l'emploi avec des machines de traduction, mais ils sont plus rapides à produire, et avec moins d'effort.

Voir aussi

Lectures complémentaires