Traduction de contenu/Developpeurs/Balisage

This page is a translated version of the page Content translation/Developers/Markup and the translation is 100% complete.

Dans la Traduction de contenu 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 <b>persons</b>' | apertium en-es -f html
Personas <b>legales</b>
$ echo 'I <b>am</b> David' | apertium en-es -f html
Soy</b> 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 ‎<a>, le moteur de traduction automatique doit-il baliser l'ensemble des mots avec ‎<a> 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 ngramsn 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 <p>Es <s>además</s> de Valencia</p> en catalan; ce qui donne Es además de Valencia comme version du texte à plat. Et la sous-séquence avec les annotations est además . Nous passons à la fois le texte complet et la sous-séquence à la traduction automatique. La traduction complète est A més de València et le mot además est traduit par a més. Nous cherchons a més dans la traduction globale du texte. La recherche est trouvée et la balise ‎<s> est appliquée, ce qui donne <p>És <s>a més</s> de València</p>. 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 <p>A <b>Japanese</b> <i>BBC</i> article</p> en espagnol. La traduction globale du texte nous donne Un artículo de BBC japonés.  Une des sous-séquences Japanese sera traduite en Japonés. Le cas de J est différent et la recherche doit être suffisamment fine pour indiquer que japonés correspond à Japonés. 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 <p>A <b>modern</b> Britain.</p> en espagnol. La version à plat du texte est traduite en Una Gran Bretaña moderna.  et le mot en annotation modern est traduit en Moderno. Il faut trouver une correspondance pour moderna et Moderno. Nous obtenons <p>Una Gran Bretaña <b>moderna</b>.</p>. 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 <p>The <b>big <i>red</i></b> dog</p> en espagnol. Ici, la sous-séquence Big red est en gras, et à l'intérieur le red est en italiques. Dans ce cas nous devons traduire le texte complet, la sous-séquence big red et red. 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 Rojo grande et lui appliquer la mise en gras. Cherchons ensuite Rojo pour appliquer les italiques. Nous obtenons ensuite <p>El perro <b><i>rojo</i> grande</b></p>.
  5. Comment ça marche pour les langues qui utilisent beaucoup les inflexions (comme le kerala) ? Supposons que l'on ait à traduire <p>I am from <a href="x">Kerala<a></p> en kerala. La traduction du texte à plat est ഞാന്‍ കേരളത്തില്‍ നിന്നാണു്. Et la sous-séquence kerala 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 <p>Los Budistas no <b>comer</b> carne</p>. La traduction du texte simple est The Buddhists not eating meat. Comer est traduit en eat. En utilisant l'approche de la distance d'édition, eat sera plus près de meat que de eating. 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 <p>Bees <b>cannot</b> swim</p>. La traduction du texte simple en espagnol est Las Abejas no pueden nadar et la phrase ne peut pas être traduite en Puede no. Ici nous devons faire correspondre Puede no à no pueden 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-gramn 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 Puede doit être directement associé à no et pueden, et no directement associé à no et pueden- 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.