Préparation de données pour Moses

From Apertium
Revision as of 21:36, 4 July 2014 by Bech (talk | contribs) (Correction accès svn)
Jump to navigation Jump to search

Cette page donne une description sur la manière de pré-traiter un corpus en utilisant Apertium afin qu'il puisse être utilisé pour entraîner Moses "factoredly" (???).

Exigences

Étapes

Télécharger et compiler les données

Pour le corpus parallèle, on va utiliser Europarl, la page corpora (seulement en anglais) en liste d'autres :

$ wget http://www.statmt.org/europarl/v5/da-en.tgz
$ tar -xzf da-en.tgz

Et pour l'analyseur morphologique et le tagger, on va utiliser apertium-sv-da et apertium-is-en. Vous pouvez en trouver d'autres dans : Liste des paires de langues et list of dictionaries.

$ wget https://svn.code.sf.net/p/apertium/svn/trunk/apertium-sv-da/apertium-sv-da.da.dix
$ wget https://svn.code.sf.net/p/apertium/svn/trunk/apertium-sv-da/da-sv.prob

$ wget https://svn.code.sf.net/p/apertium/svn/trunk/apertium-is-en/apertium-is-en.en.dix
$ wget https://svn.code.sf.net/p/apertium/svn/trunk/apertium-is-en/en-is.prob

$ lt-comp lr apertium-sv-da.da.dix da-sv.automorf.bin
final@inconditional 20 105
main@standard 9121 18055
unchecked@standard 4411 8130

$ lt-comp lr apertium-is-en.en.dix en-is.automorf.bin
final@inconditional 97 2809
main@standard 22284 47423

The

Nettoyer et baliser chaque coté du corpus

Supprimer chaque ligne qui commence par des balises :


$ cat da-en/da/*  | grep -v '^<' > europarl.da
$ cat da-en/en/*  | grep -v '^<' > europarl.en

Vérifier que les fichiers ont la même longueur.

$ wc -l europarl.*
  1687533 europarl.da
  1687533 europarl.en

Analyser et baliser le corpus :

$ cat europarl.da | apertium-destxt | lt-proc -w da-sv.automorf.bin | \
  apertium-tagger -g -p da-sv.prob | apertium-retxt > tagged.da

$ cat europarl.en | apertium-destxt | lt-proc -w en-is.automorf.bin | \
  apertium-tagger -g -p en-is.prob | apertium-retxt > tagged.en

Notez que l'option -w supporte la mise en minuscules du dictionnaire, c'est à dire, que le lemme est envoyé avec la casse qu'il a dans le dictionnaire, pas celle de la forme de surface.

Convertir dans le format "factored" pour Moses

Télécharger le tagger pour le script factored (???) :

$ wget https://svn.code.sf.net/p/apertium/svn/trunk/apertium-tools/tagger-to-factored.py

Alors convertir dans le format "factored" pour Moses :

$ cat tagged.da | python tagger-to-factored.py 2 > factored.da
$ cat tagged.en | python tagger-to-factored.py 2 > factored.en

Note: Le nombre en option de tagger-to-factored.py spécifie combien de balises vous voulez envoyer. En mettant 0 ça va seulement envoyer la forme de surface et le lemme. En mettant 1 ça va envoyer la forme de surface, le lemme et la première balise (qui est presque toujours la balise POS). Tout ce qui précède sera envoyé comme avant, mais un facteur supplémentaire sera envoyé comme le reste de l'information morphologique.

Par exemple:

$ echo "^der/der<adv>$ ^blev/blive<vblex><past><actv>$ ^ramt/ramme<vblex><pp>$^./.<sent>$" | python tagger-to-factored.py 0
der|der blev|blive ramt|ramme .|. 

$ echo "^der/der<adv>$ ^blev/blive<vblex><past><actv>$ ^ramt/ramme<vblex><pp>$^./.<sent>$" | python tagger-to-factored.py 1
der|der|adv blev|blive|vblex ramt|ramme|vblex .|.|sent 

$ echo "^der/der<adv>$ ^blev/blive<vblex><past><actv>$ ^ramt/ramme<vblex><pp>$^./.<sent>$" | python tagger-to-factored.py 2
der|der|adv|adv blev|blive|vblex|vblex.past ramt|ramme|vblex|vblex.pp .|.|sent|sent 

$ echo "^der/der<adv>$ ^blev/blive<vblex><past><actv>$ ^ramt/ramme<vblex><pp>$^./.<sent>$" | python tagger-to-factored.py 
der|der|adv|adv blev|blive|vblex|vblex.past.actv ramt|ramme|vblex|vblex.pp .|.|sent|sent 

Après ça, vérifiez de nouveau que les fichiers ont la même longueur :

$ wc -l factored.*

Entraîner un modèle "factored" basé sur des phrases

Maintenant vous avez les données, vous pouvez entraîner un modèle "factored" basé sur des phrases avec Moses !

Voir aussi

Liens externes