Entraînement d'un tagueur
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.
Contents
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
- Constructing a TSX file with a Constraint Grammar (à traduire une fois le nom fixé).
Lectures complémentaires
- (bibtex) Felipe Sánchez-Martínez, Juan Antonio Pérez-Ortiz, Mikel L. Forcada (2008). "Using target-language information to train part-of-speech taggers for machine translation". Dans "Machine Translation, volume 22, chapitres 1-2, p. 29-66".
- (bibtex) Felipe Sánchez-Martínez (2008). "Using unsupervised corpus-based methods to build rule-based machine translation systems". PhD thesis, Departament de Llenguatges i Sistemes Infomàtics, Universitat d'Alacant, Spain.
- Felipe Sánchez-Martínez, Carme Armentano-Oller, Juan Antonio Pérez-Ortiz, Mikel L. Forcada. (2007) "Training part-of-speech taggers to build machine translation systems for less-resourced language pairs". Procesamiento del Lenguaje Natural nº 39, (XXIII Congreso de la Sociedad Española de Procesamiento del Lenguaje Natural), pp. 257—264
- Felipe Sánchez-Martínez, Juan Antonio Pérez-Ortiz, Mikel L. Forcada. (2004) "Cooperative unsupervised training of the part-of-speech taggers in a bidirectional machine translation system". Proceedings of TMI, The Tenth Conference on Theoretical and Methodological Issues in Machine Translation, pp. 135—144