Entraînement d'un tagueur de langue cible

From Apertium
Revision as of 08:20, 8 October 2014 by Bech (talk | contribs) (Lien page anglaise)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

In English

Le paquet apertium-tagger-training-tools entraîne les tagueurs basés à la fois sur des informations des langues source et cible. Les fichiers de probabilité résultante sont aussi bons que l'entraînement supervisé pour la traduction automatique, mais plus rapides à produire, et avec moins d'efforts (vous n'avez pas besoin de baliser un corpus à la main). Dans cette description, un tagueur de parties de discours pour la langue source (SL) sera entraîné en utilisant l'information de la langue cible (TL).

Paire de langues[edit]

Cet exemple présume que vous voulez entraîner un tagueur pour la paire de langues occitan ←→ catalan (apertium-oc-ca) dans la direction occitan → catalan (oc-ca). Vous aurez besoin de substituer les valeurs qui se réfèrent à cette paire à celle pour votre paire de langues choisie.

Vous aurez besoin de télécharger et d'installer la paire de langues en question soit depuis SVN soit depuis un paquet. La méthode implémentée dans le paquet est appropriée aux langues dont le tagueur de parties de discours a été entraîné d'une manière non supervisée.

Pour préparer et compiler les données de la paire de langues requise suivez les instructions données dans le paquet linguistique. Habituellement vous n'avez besoin de taper que ./configure et make.

Construire un modèle de langue cible[edit]

Si vous utilisez apertium-trigrams-langmodel, alors suivez cette section, sinon, continuez à la suivante.

Exigences: Un corpus brut de la langue cible (ca.corpus.txt). Si vous générez oc→ca, ça serait ca, si vous générez un tagueur pour ca→es ça serait es. Le corpus devrait faire autour d'1/2 million de mots, plus grand que ça ne donnera pas d'amélioration significative pour la précision.

$ apertium-trigrams-langmodel -t -i ca.corpus.txt > catalan.lm

La sortie suivante devrait apparaître :

LOCALE: en_GB.UTF-8
Training........................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
......................
2868350 processed words.
1643982 distinct trigrams found.
833143 distinct bigrams found.
153714 distinct monograms found.
Writing word2id information ...
Writing Simple Good-Turing model for 1-grams ...
Writing 1-grams ...
Writing 2-grams...
Writing 3-grams...

Les points continueront tant que le modèle de langue est en construction, et leur nombre variera.

Préparation des données de la langue source[edit]

Exigences:

  • Un corpus brut de la langue source (corpus.txt — par exemple oc.corpus.txt)
  • Un dictionnaire source (dic.dix — ex: apertium-oc-ca.oc.dix)
  • Un dictionnaire compilé de la langue source (dic.bin — ex: oc-ca.automorf.bin)
  • Un fichier de définition de tagueur (tagger.tsx — ex: apertium-oc-ca.oc.tsx)
  • Le fichier avec les règles de transfert à utiliser (trules.xml ou .t1x file — ex: apertium-oc-ca.oc-ca.t1x)

Note: dic.bin a été généré lors de la préparation des données de la paire de langues. dic.dix, tagger.tsx et trules.xml sont fournis avec le paquet de la paire de langues.

Générer le fichier corpus[edit]

$ apertium-tagger-gen-crp-file oc.corpus.txt dic.bin > lang.crp

Devrait donner la sortie :

Generating crp file
This may take some time. Please, take a cup of coffee and come back later.

Traduction :

Génération du fichier crp
Ça pourrait prendre du temps. Veuillez prendre un café et revenir plus tard.

Générer le fichier dic[edit]

$ apertium-tagger-gen-dic-file dic.dix dic.bin tagger.tsx > lang.dic

Devrait donner la sortie :

Generating dic file
This may take some time. Please, take a cup of coffee and come back later.

(traduction similaire).

Extraire les règles sur les expressions régulières[edit]

$ apertium-xtract-regex-trules trules.xml > regexp-trules.txt

Ne devrait pas donner de sortie, mais fournir le fichier regexp-trules.txt

Préparer le script de traduction[edit]

Maintenant, vous devriez avoir les fichiers suivants :

$ ls -1 -sh
total 132M
 78M corpus.crp
 38M ca.corpus.lm
 17M corpus.txt
 16K oc.dic
8.0K regex-trules.txt

L'algorithme d'entraînement piloté par la langue cible doit être fourni avec un script de traduction convenablement configuré pour traduire une hypothèse de désambiguïsation donnée dans la langue cible.

Avec ces paquets vous pouvez trouver le script 'translation-script-es-ca.sh'. Il est configuré pour traduire les hypothèses de désambiguïsation espagnoles en catalan.

Copiez ce fichier depuis le répertoire example/ et ensuite éditez ce fichier et changez les variables DATA et DIRECTION. DATA doit pointer vers le répertoire contenant les données de la paire de langues préalablement préparées; DIRECTION doit mémoriser la direction de traduction.

En supposant que vous soyez dans le répertoire oc-tagger-data :

$ cp apertium-tagger-training-tools/example/translation-script-es-ca-batch-mode.sh .
$ mv translation-script-es-ca-batch.sh translation-script-oc-ca-batch-mode.sh

Alors éditez translation-script-oc-ca-batch-mode.sh et changez les variables ci-dessus.

Transfert en trois étapes[edit]

Note: Le paquet apertium-tagger-training-tools ne fonctionne pas correctement pour l'instant avec le transfert en trois étapes. Il est possible de l'utiliser, en faisant les changements suivants dans le script de traduction, mais la segmentation sera mauvaise et il est probable que ça ait un effet sur la qualité finale du tagger.

Changez la ligne :

apertium-transfer $DATA/trules-$DIRECTION.xml $DATA/trules-$DIRECTION.bin $AUTOBIL |\

en :

apertium-transfer $DATA/$DIRECTION.t1x  $DATA/$DIRECTION.t1x.bin  $DATA/$DIRECTION.autobil.bin |\
apertium-interchunk $DATA/$DIRECTION.t2x  $DATA/$DIRECTION.t2x.bin |\
apertium-postchunk $DATA/$DIRECTION.t3x  $DATA/$DIRECTION.t3x.bin |\

Préparation du script de vraisemblance[edit]

Pour estimer la vraisemblance de chaque traduction l'algorithme d'entraînement piloté par la langue cible est fourni avec un script. Dans ce paquet vous pouvez trouver un exemple de ce script appelé 'likelihood-script-catalan.sh'. Il utilise le paquet apertium-trigrams-langmodel pour calculer la vraisemblance de chaque chaîne entrée.

De nouveau, en supposant que vous soyez dans le répertoire oc-tagger-data :

$ cp ../../apertium-tagger-training-tools/example/likelihood-script-catalan-batch-mode.sh .
$ mv likelihood-script-catalan.sh likelihood-script-occitan-batch-mode.sh

Changez ce script pour utiliser les données désirées ou pour utiliser un autre modèle de langue. Vous aurez besoin de changer la variable LMDATA pour qu'elle soit ca.corpus.lm. Rappelez-vous que l'algorithme d'entraînement piloté par la langue cible fournira une chaîne d'entrée en langue cible au script et qu'il attend une vraisemblance (???), par exemple une double valeur, convenablement formatée en utilisant la locale appropriée.

Entraînement par l'algorithme piloté par la langue cible[edit]

Une fois que vous avez collecté tout ça vous pouvez générer le fichier .prob en utilisant les commandes suivantes :

Attention : Certaines paires de langues produisent des opérations orthographiques après le module de transfert. Dans ces cas c'est une bonne idée de fournir les formes de surface (mots) impliqués dans ces opérations via le paramètre --supforms.

Dans les exemples qui suivent l'argument --file spécifie le préfixe of des fichiers principaux utilisés, donc par exemple si vous avez : corpus.crp, corpus.dic, et corpus.txt le préfixe doit être 'corpus'.

Commandes[edit]

Sans hypothèse de désambiguïsation pruning (??)
$ apertium-tagger-tl-trainer --train 500000 \ 
                             --tsxfile tagger.tsx \ 
                             --file <prefix> \ 
                             --tscript ./translation-script.sh \
                             --lscript ./likelihood-script.sh \ 
                             --trules regexp-trules.txt
Avec hypothèse de désambiguïsation pruning (??)

Pour faire ça vous aurez besoin d'un modèle initial, initialmodel.prob, estimé par une autre méthode d'entraînement (Kupiec, Baum-Welch, ...) — la création de ce modèle initial est décrite dans la page formation d'un tagueur.

$ apertium-tagger-tl-trainer --tsxfile tagger.tsx \
                             --train 500000 \
                             --prune 1 1000 0.6 1 \
                             --initprob initialmodel.prob \ 
                             --file <prefix>  \
                             --tscript ./translation-script.sh \ 
                             --lscript ./likelihood-script.sh \ 
                             --trules regexp-trules.txt  

Sortie[edit]

Voici quelque exemple de sortie du processus d'entraînement. Si ce que vous avez obtenu ressemble à ça, alors vous êtes sur la bonne voie !

Command line: apertium-tagger-tl-trainer --train 300000 --tsxfile ../apertium-oc-ca.oc.tsx \
--file corpus --tscript ./translation-script-oc-ca-batch.sh --lscript ./likelihood-script-catalan-batch.sh \
--trules regex-trules.txt --norules --gen-paths oc.PATHS
Reading transfer rules from file 'regex-trules.txt' done.
Calculating ambiguity classes ...
92 states and 283 ambiguity classes
Target-language driven HMM-based part-of-speech training method.......
   Training corpus will be processed for 500000 words
   HMM parameters will be calculated each time 0 words are processed
   Calculated parameter will be saved in files with the name 'corpus.N.prob'
   Are fobidden and enforce rules going to be used? 1
   Translation script is: './translation-script-oc-ca-batch.sh'
   Likelihood estimation script is: './likelihood-script-catalan-batch.sh'
Ready for training...... go!

Initializing allowed bigrams ... done.
Error: conversion error
Error: conversion error
Error: There is a path with a null translation: ^se<prn><pro><ref><p3><mf><sp>$ ^èsser<vbser><pri><p3><sg>$ 
^pas<adv>$ ^que<cnjsub>$ ^lo<det><def><m><sg>$ ^miralh<n><m><sg>$ ^fisèl<adj><m><sg>$ ^de<pr>$
SEGMENT: s' es pas que lo miralh fisèl de 
Warning: This segment has no OK translations. Skipping
SEGMENT: s' es pas que lo miralh fisèl de 

Warning: This segment has no translations into TL 1. Skipping
SEGMENT: un parlaire adult 
Warning: This segment has no OK translations. Skipping
SEGMENT: a de  
Error: There is a path with a null translation: ^çò<detnt>$ ^de<pr>$
SEGMENT: çò d' 
Warning: This segment has no OK translations. Skipping
SEGMENT: çò d' 
Warning: This segment has no OK translations. Skipping
SEGMENT: que pòdon instituir la lenga . 
Warning: This segment has no OK translations. Skipping
SEGMENT: a l' un còp l' instituir e