L'outil ReTraTos

From Apertium
Jump to navigation Jump to search

In English

ReTraTos est une boite à outils pour construire des ressources linguistiques utiles pour une machine de traduction (MT) : des dictionnaires bilingues et des règles de transfert. Les systèmes d'induction et les données linguistiques libres (ou ouvertes ?) peuvent être utilisés avec la boite à outils Apertium pour construire des systèmes de traduction libres.

Dictionnaires bilingues

Cette section décrit comment utiliser ReTraTos pour créer un dictionnaire bilingue pour votre paire de langues Apertium. Vous aurez besoin :

  • d'un corpus aligné des deux langues. Pour chaque paire de langues européennes, le corpus JRC-Acquis est recommandé.
  • apertium
  • Lttoolbox (français)
  • ReTraTos
  • GIZA++
  • beaucoup de patience

Préparation du corpus

Le corpus devrait être en deux fichiers, chacun avec une phrase par ligne. Par exemple,

es.txt
Reconociendo que , en particular , sería mutuamente beneficioso cooperar
mediante el establecimiento de un programa común de investigaciones y de desarrollo ;
Considerando que un acuerdo que establezca una cooperación en el ámbito
de las utilizaciones pacíficas de la energía atómica iniciaría fructíferos 
intercambios de experiencia 
...
it.txt
Riconoscendo in particolare che sarebbe loro reciproco vantaggio cooperare
con lo stabilire un programma comune di ricerche e di sviluppo ;
Considerando che un accordo inteso a stabilire una cooperazione nel campo
degli usi pacifici dell'energia atomica darebbe inizio ad un proficuo 
scambio di esperienze
...

Selon que vous vouliez créer ou non des entrées pour noms propres, vous pourriez passe en minuscules tout le corpus. Assurez-vous qu'il y a des espaces autour de chaque caractère de ponctuation, sinon la ponctuation sera comptée comme une partie du mot.

Baliser le corpus

Balisez les deux fichiers en utilisant apertium-tagger. Donc, par exemple pour l'espagnol :

$ cat es.txt | apertium-destxt | lt-proc es-it.automorf.bin | apertium-tagger -g es-it.prob | apertium-retxt > es.tagged.txt &  

Après ça, supprimez les symboles '^' et '$' du fichier es-tagged.txt . Ça donnera des lignes qui ressemblent à quelque-chose comme :

Reconocer<vblex><ger> que<cnjsub> ,<cm> en<pr> particular<adj><mf><sg>
,<cm> ser<vbser><cni><p3><sg> mutuamente<adv> beneficioso<adj><m><sg>
*cooperar mediante<pr> el<det><def><m><sg> establecimiento<n><m><sg>
de<pr> uno<det><ind><m><sg> programa<n><m><sg> común<adj><mf><sg> de<pr>
investigación<n><f><pl> y<cnjcoo> de<pr> desarrollo<n><m><sg> ;<sent>

ReTraTos est très délicat au sujet du formatage, donc avant d'enlever les '^' et '$' vous pourriez vouloir juste enlever quelque-chose qui n'est pas encadré par '^' et '$', par exemple quelque-chose comme

# ^foo$-^bar$ => ^foo$ ^bar$     -^foo$ => ^foo$           ^bar$- => ^bar$
sed 's%\$[^^]*\^%\$ \^%g'    | sed  's%^[^^]*\^%\^%g' | sed 's%\$[^^]*$%\$%g' |\
# supprimer '^' et '$'
sed 's%[$^]% %g'

Ça vous fera gagner beaucoup de temps plus tard... oh, et vous pourriez aussi supprimer toutes les lignes qui ne contiennent pas au moins une séquence ^foo<bar>$ (par exemple un simple alignement de '%' à '%', ou autre).

Aligner le corpus

Voir aussi Utiliser GIZA++ et Comment démarrer avec les outils d'induction

Utilisez GIZA++ pour aligner les deux fichiers, les instructions peuvent être trouvées dans la page Utiliser GIZA++. Une fois que l'alignement a été fait, vous terminerez avec un fichier qui finit par .A3.final, c'est votre fichier d'alignement. Ensuite, vous aurez besoin de convertir l'alignement au format LIHLA qu'utilise ReTraTos. Le script dans la page de discussion anglaise sert ce propos. Pour la paire Espagnol--Italien, il sera appelé ainsi :

$ perl giza_to_lihla.pl es_it.aligned.A3.final ./es/ ./it/

Cela va écrire deux fichiers dans les répertoires ./es/ et ./it/ qui correspondent aux lignes en espagnol et italien respectivement. Ces fichiers d'alignement LIHLA se termineront par .al et ressembleront à ce qui suit :

<s snum=6>Reconocer<vblex><ger>:1 que<cnjsub>:0 ,<cm>:0 en<pr>:2
particular<adj><mf><sg>:3 ,<cm>:0 ser<vbser><cni><p3><sg>:5 mutuamente<adv>:7 
beneficioso<adj><m><sg>:8 *cooperar:9 mediante<pr>:10 el<det><def><m><sg>:11
establecimiento<n><m><sg>:12 de<pr>:0 uno<det><ind><m><sg>:13 programa<n><m><sg>:14
común<adj><mf><sg>:15 de<pr>:16 investigación<n><f><pl>:17 y<cnjcoo>:18 de<pr>:19
desarrollo<n><m><sg>:20 ;<sent>:0</s>

Afin d'utiliser ReTraTos, les formes de surface de chaque unité lexicale ont besoin d'être rajoutées donc l'exemple ci-dessus ressembleront à ce qui suit :

<s snum=6>Reconociendo/Reconocer<vblex><ger>:1 que/que<cnjsub>:0 ,/,<cm>:0 en/en<pr>:2
particular/particular<adj><mf><sg>:3 ,/,<cm>:0 sería/ser<vbser><cni><p3><sg>:5
mutuamente/mutuamente<adv>:7 beneficioso/beneficioso<adj><m><sg>:8 *cooperar/*cooperar:9
mediante/mediante<pr>:10 el/el<det><def><m><sg>:11 establecimiento/establecimiento<n><m><sg>:12
de/de<pr>:0 un/uno<det><ind><m><sg>:13 programa/programa<n><m><sg>:14 común/común<adj><mf><sg>:15
de/de<pr>:16 investigaciones/investigación<n><f><pl>:17 y/y<cnjcoo>:18 de/de<pr>:19
desarollo/desarrollo<n><m><sg>:20 ;<sent>:0</s>

Exécuter ReTraTos_lex

Vous aurez besoin d'avoir l'entête (header) et le bas (footer) d'un dictionnaire bilingue dans deux fichiers séparés, par exemple, dic_header.txt et dic_footer.txt (voir les exemples dans le paquet). Ensuite le programme pour générer le dictionnaire (ReTraTos_lex) peut être appelé comme ceci :

$ ReTraTos_lex -s ./es/es_it.aligned.A3.final.al -t ./it/es_it.aligned.A3.final.al -b dic_header.txt -e dic_footer.txt 

PRE-PROCESSAMENTO

        Reading the examples ...  100000 examples read
        Reading the examples ...  100000 examples read

GERANDO LEXICO

        Generating source-target dictionary ... OK
        Generating target-source dictionary ... OK
        Processing bilingual dictionary ... OK
        Generalising bilingual dictionary ... OK
        Cleaning equal attributes ... OK

IMPRIMINDO LEXICO

        Printing bilingual dictionary ... OK

Le fichier de sortie sera le fichier .dix .

Maintenance

Wrongly tagged

Si vous récupérez plusieurs messages comme ça, ou même un seul, ça signifier qu'il y a une erreur dans une de vos fichiers alignement.

WARNING: (Entrada::le_sentenca): String O<cnjcoo>.<sent>V<num><mf><pl> is wrongly tagged
WARNING: (Entrada::le_sentenca): String )<rpar>.<sent> is wrongly tagged
WARNING: (Entrada::le_sentenca): String a<pr>)<rpar> is wrongly tagged
WARNING: (Entrada::le_sentenca): String 1991<num>.<sent> is wrongly tagged

...

Les alignements dans les fichiers doivent être au format lemme<balises>:<alignement>, ex : 1991<num>:1 ou pero<cnjcoo>:2. Les alignements avec des chaînes aléatoires entre les balises sont interdits. Ex : O<cnjcoo>.<sent>V<num><mf><pl> est un ensemble de trois paires de lemmes/balises avec le même alignement. Probablement la ponctuation n'a pas été séparée correctement du texte avec des espaces.

Il est possible de corriger ça à la main, en enlevant la ponctuation, ou en insérant des espaces et des alignements nuls (?), mais ça pourrait être mieux s'il y a plusieurs messages d'avertissement de re-traiter le corpus.

Voir aussi

Liens externes

Lectures complémentaires

  • Helena M. Caseli, Maria das Graças V. Nunes, Mikel L. Forcada. (2008) "From free shallow monolingual resources to machine translation systems: easing the task", in Mixing Approaches To Machine Translation, MATMT2008, proceedings (Donostia, Spain, Feb. 14, 2008), pp. 41--48
  • Helena M. Caseli, Maria das Graças V. Nunes, Mikel L. Forcada. (2008) "Automatic induction of bilingual resources from aligned parallel corpora: application to shallow-transfer machine translation". Machine Translation (to appear)