Entraînement d'un tagueur

From Apertium
Jump to navigation Jump to search

In English

Une fois que vos dictionnaires ont une taille raisonnable, disons peut-être 3000 lemmes au total, il vaut la peine d'entraîner le tagueur. Pour cela, vous aurez besoin de deux choses, un corpus de taille décente, déjà balisé ou non, 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 trois 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 sont disponibles 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 tagueur. La DTD est dans tagger.dtd, bien qu'il soit probablement plus facile de jeter un coup d’œil à un fichier préécrit dans d'autres paires de langues.

Le fichier devrait se trouver 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 tagueur anglais, et apertium-en-af.af.tsx pour le tagueur 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. Cela permet aussi à l'utilisateur d'appliquer un ensemble de restrictions ou d'enforcements (obligations). Par exemple, pour interdire un adverbe relatif en début de phrase (SENT RELADV) ou pour interdire un pronom après un nom (NOM PRNPERS).

Vous pouvez aussi écrire des règles lexicales ; par exemple, en afrikaans, le mot deur est ambigu : il peut signifier "par" (préposition) ou "porte" (nom). Dans ce cas, on peut définir deux balises grossières, DEURNOM et DEURPR, puis 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 tagueur 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 tagueur

Voici une brève note 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 tagueur, 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 tagueur en mode automatique

Supervisé

Cette section n'est pas encore écrite.

Entraînement d'un tagueur de langue cible

Article principal : Entraînement d'un tagueur de langue cible

C'est un paquet appelé apertium-tagger-training-tools qui entraîne les tagueurs 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