Content translation/Developers/Markup/fr

Dans la les traducteurs traduisent le contenu Html. Le Html contient toutes les balises possibles qu'un article typique Wikipedia peut contenir. Cela signifie que la traduction automatique se fait sur le contenu Html. Mais tous les moteurs de traduction automatique ne supportent pas le contenu Html.

Certains moteurs de traduction automatique tels que Moses, génèrent directement l'information d'alignement des sous-phrases montrant les mots source et les mots cible qui leur correspondent.

$ echo 'das ist ein kleines haus' | moses -f phrase-model/moses.ini -t this is |0-1| a |2-2| small |3-3| house |4-4|

Le moteur de traduction automatique Apertium ne traduit pas fidèlement le texte formaté. Le balisage tel que celui du Html est traité sous la forme d'un espace vide. Ce qui peut produire des modifications dans la sémantique (si les mots sont réorganisés), ou des erreurs de sémantique (si la correspondance un à un n'est pas respectée).

$ echo 'legal persons ' | apertium en-es -f html Personas legales 

$ echo 'I am David' | apertium en-es -f html Soy  David

Les autres moteurs de traduction automatique montrent des problèmes similaires. C'est ce qui rend difficile de fournir la traduction automatique d'un texte formaté. Ce document explique la manière dont ce conflit est géré dans la Traduction de contenu.

Comme montré dans les exemples ci-dessus, un moteur de traduction automatique peut provoquer les erreurs suivantes dans le Html traduit. Les erreurs sont listées par ordre de sévérité décroissante.
 * 1) Corrupt markup - (balisage corrompu). Si le moteur de traduction automatique ne sait pas gérer le Html, il peut éventuellement déplacer les balises Html, et provoquer ainsi un marquage incohérent dans le résultat traduit automatiquement
 * 2) Wrongly placed annotations - (annotations mal placées). Les deux exemples ci-dessus illustrent la situation. C'est plus grave si le contenu comprend des liens et que leurs cibles sont interverties ou distribuées aléatoirement dans la sortie traduite automatiquement.
 * 3) Missing annotations - (annotations absentes). Quelques fois le moteur de traduction automatique peut manger certaines balises dans le processus de traduction.
 * 4) Split annotations - (annotations fragmentées). Pendant la traduction, un mot peut être traduit en un ou plusieurs mots. Si le mot source est balisé par exemple avec, le moteur de traduction automatique doit-il baliser l'ensemble des mots avec  ou baliser chaque mot séparément ?

Tous ces problèmes peuvent conduire à ce que les traducteurs en tirent une mauvaise expérience.

A part les problèmes potentiels liés au transfert du balisage, il existe un autre aspect de l'envoi d'un contenu Html aux moteurs de traduction automatique. En comparaison avec la version texte simple d'un paragraphe, la version Html est plus grande au niveau de la taille en octets. Ces ajouts sont en partie dûs aux balises et aux attributs qui doivent rester transparents lors de la traduction. Ceci est une utilisation inutile de la largeur de bande. Si le moteur de traduction automatique est bridé (par exemple non gratuit, avec un accès contrôlé et limité à l'API), nous n'avons pas gagné grand chose.

Aperçu

 * Le contenu du Html d'entrée est traduit sous forme de LinearDoc, avec son balisage en ligne (la mise en gras, liens) stocké dans les attributs d'un tableau linéaire de morceaux textuels. Ce format linéarisé est pratique pour les grosses opérations de manipulation de texte telles que la restructuration ou la segmentation, qui sont un défi à réaliser avec une chaîne Html ou une arborescence DOM.
 * Les phrases de texte à plat (où on a supprimé tous les éléments de balisage) sont envoyées au moteur de traduction automatique pour la traduction.
 * Le moteur de traduction automatique renvoie une traduction qui est aussi un texte à plat, en même temps que les informations d'alignement des sous-phrases (indiquant quelles parties du texte source correspondent à quelles parties du texte traduit).
 * L'information d'alignement est utilisée pour réappliquer le balisage au texte traduit.

Ceci nous assure que les moteurs de traduction automatique ne traduisent que le texte à plat et que le balisage est appliqué par un post-traitement à la traduction automatique.

Pour transférer le balisage, nous avons initialement essayé un algorithme basé sur l'observation du changement de casse. Pour deviner la place de la traduction d'un mot qui va être potentiellement à un autre endroit dans le texte traduit, une phrase est traduite telle quelle mais le mot est mis en majuscules. En comparant la sortie des deux, le diff indiquera l'endroit où le mot traduit apparaît dans la traduction. Cette approche et ses limites sont listées ci-dessous. Plus tard nous verrons un algorithme plus avancé.



Correspondance des annotations utilisant l'approximation de subséquence de la traduction
C'est l'algorithme actuellement utilisé dans la traduction de contenu. Cet algorithme essaie de supplanter les limitations de mise en majuscules de l'algorithme précédent. L'algorithme réalise principalement une correspondance sauvage pour trouver les emplacements cible dans le texte traduit et y appliquer les annotations. Ici aussi le contenu passé aux moteurs de traduction automatique est du texte simple uniquement.

Les étapes sont données ci-dessous.


 * 1) Dans le texte à traduire, rechercher le texte correspondant aux annotations en ligne tel que gras, italique, les liens, etc. Appelons cela des sous-séquences.
 * 2) Passez le texte complet et les sous-séquences au moteur de traduction automatique du texte à plat. Utilisez un délimiteur pour pouvoir faire le tableau de correspondance entre les éléments source (texte complet et sous-séquences) et les éléments traduits.
 * 3) Le texte traduit complètement aura les sous-séquences quelque part dans le texte. Pour localiser la traduction des sous-séquences dans la traduction complète utilisons un algorithme de recherche approximative.
 * 4) La recherche approximative renvoie la position du début de chaîne ainsi que la longueur de couverture. Jusques là nous appliquons le balisage Html de la source.
 * 5) La correspondance approximative implique de calculer la distance d'édition entre les mots dans le texte traduit complètement et la sous-séquence traduite. On ne cherche pas des sous-chaînes, mais des ngrams où n est le nombre de mots dans la sous-séquence. Chaque mot du ngram sera atteint indépendamment.

Pour comprendre cela faisons tourner l'algorithme sur quelques phrases d'exemple.


 * 1) Traduisons la phrase espagnole   en catalan; ce qui donne   comme version du texte à plat. Et la sous-séquence avec les annotations est   . Nous passons à la fois le texte complet et la sous-séquence à la traduction automatique. La traduction complète est   et le mot   est traduit par  . Nous cherchons   dans la traduction globale du texte. La recherche est trouvée et la balise  est appliquée, ce qui donne  . La recherche réalisée dans cet exemple est une recherche stricte dans le texte à plat. Mais l'exemple suivant montre pourquoi on ne peut pas faire de recherche exacte.
 * 2) Traduisons la phrase anglaise   en espagnol. La traduction globale du texte nous donne  .  Une des sous-séquences   sera traduite en  . Le cas de   est différent et la recherche doit être suffisamment fine pour indiquer que   correspond à  . L'ordre des mots du source à la traduction est déjà pris en compte par l'algorithme. L'exemple suivant montre qu'il ne se résume pas qu'à un changement de casse.
 * 3) Traduisons   en espagnol. La version à plat du texte est traduite en  .  et le mot en annotation moderne est traduit en  . Il faut trouver une correspondance pour   et  . Nous obtenons  . C'est un exemple d'inflexion de mot. Seule une lettre change à la fin du mot.
 * 4) Voyons maintenant un exemple où la sous-séquence est représentée par plusieurs mots au lieu d'un seul, et le cas des sous-séquences imbriquées. Traduisons la phrase anglaise   en espagnol. Ici, la sous-séquence   est en gras, et à l'intérieur le rouge est en italiques. Dans ce cas nous devons traduire le texte complet, la sous-séquence   et  . Nous obtenons alors El perro rojo grande pour la traduction complète, Rojo grande et Rojo pour la traduction des sous-séquences. Il faut d'abord trouver où est   et lui appliquer la mise en gras. Cherchons ensuite   pour appliquer les italiques. Nous obtenons ensuite.
 * 5) Comment ça marche pour les langues qui utilisent beaucoup les inflexions (comme le malais) ? Supposons que l'on ait à traduire  I am from Kerala  en malais. La traduction du texte à plat est ഞാന്‍ കേരളത്തില്‍ നിന്നാണു്. Et la sous-séquence kérala est traduite en കേരളം. Il faut trouver une correspondance pour കേരളം et കേരളത്തില്‍. La distance d'édition est de 7 entre les deux et les modifications apparaissent à la fin du mot. Ceci montre que des réajustements spécifiques à la langue sont nécessaires pour obtenir une traduction acceptable.

L'algorithme appliqué pour réaliser une correspondance approximative de chaîne peut être la distance simple de Levenshtein, mais quelle serait la valeur acceptable de cette distance d'édition ? Cela doit être configurable en fonction des modules de langue. Et l'exemple suivant montre que si on fait une correspondance basée uniquement sur la distance d'édition, eh bien ça ne fonctionne pas.

En traduisant en anglais. La traduction du texte simple est    est traduit en. En utilisant l'approche de la distance d'édition,  sera plus près de   que de. Pour régler ces cas, nous ajoutons un second critère qui est que les mots doivent commencer par la même lettre. Ceci indique aussi que l'algorithme doit avoir ses modules propres à la langue.

Il existe encore des cas qui ne peuvent pas être résolus par l'algorithme mentionné ci-dessus. Voyons l'exemple suivant

Traduire. La traduction du texte simple en espagnol est  et la phrase ne peut pas être traduite en. Ici nous devons faire correspondre  à   ce qui n'est bien sûr pas cohérent avec l'approche que nous avons décrite jusqu'à présent.

Pour répondre à ce cas, nous ne considérons pas les sous-séquences comme une chaîne mais comme un n-gram où n est le nombre de mots dans la séquence. La correspondance directe doit se faire avec chaque mot du n-gram et non pas sur la chaîne entière c'est à dire que  doit être directement associé à   et , et   directement associé à   et  - de gauche à droite, jusqu'à ce qu'une correspondance soit trouvée. Ceci respecte la modification de l'ordre des mots ainsi que les inflexions.

En corrigeant les quatre types d'erreurs apparaissant avec le transfert des annotations, pour l'algorithme expliqué ici nous voyons que, dans le pire des cas, nous allons rater des annotations. Il n'y a pas de cas où les balises sont corrompues.

Quand et où la traduction de contenu ajoute la prise en charge de langues supplémentaires, l'adaptation de l'approche décrite ci-dessus et particulière à la langue sera nécessaire.