L'outil ReTraTos
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.
Contents
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 Generalizing 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)