Retour au blog de développement Ingénierie de la traduction

Des chiffres qui survivent à la traduction : apprendre à un interprète que 七折 veut dire 30 % de remise

Lire cet article en : English · 中文 · 日本語 · Español · Français · 한국어 · Українська

SyncTrans traduit la parole en direct, et la parole en direct qui parle d'argent a tendance à être exacte : un prix, une quantité, une remise. Cet article traite d'une catégorie de bug où la traduction est fluide, assurée, et fausse sur le chiffre qui compte — et du correctif sans gloire que nous avons livré pour cela dans la 1.0.0.

La remise qui inverse son propre signe

Le chinois et le japonais ont chacun une façon idiomatique d'exprimer une remise, et elles comptent en sens opposés. Le chinois compte ce que l'on paie : 七折 signifie que l'on paie 70 % du prix affiché, soit 30 % de remise. Le japonais compte ce qui est déduit : la même offre s'écrit 3割引, trois dixièmes retirés. Chaque locuteur chinois et chaque locuteur japonais apprend sa propre convention très tôt et n'y pense plus jamais.

Un modèle de traduction, lui, voit tout autre chose : 七折 et 割引 cooccurrent en permanence dans les contextes de remise, et le chiffre 七 correspond à 7. Lors de nos premiers tests, les modèles rendaient allègrement 七折 par 7割引 — ce qu'un auditeur japonais entend comme 70 % de remise. Un fournisseur qui dit « je peux vous faire 30 % de remise » ressort de l'autre côté en « je peux vous faire 70 % de remise ». Dans une conversation de prix, c'est la différence entre un accord et un malentendu très coûteux, et les deux parties repartent persuadées d'avoir entendu le même chiffre.

Le même piège, un ordre de grandeur plus haut

Les remises sont le cas le plus tranchant, mais la même forme de problème apparaît aussi dans les nombres ordinaires. Le français compte les grands nombres en milliers et en millions ; le chinois les compte en 万 (dix mille) et en 億 (cent millions). 12万 vaut 120 000. 1,2億 vaut 120 000 000. Un modèle qui transporte les chiffres sans réancrer l'unité produit « 12 000 » pour 12万 — fluide, grammatical, et faux d'un facteur dix. Les nombres parlés aggravent encore les choses, parce que la reconnaissance transmet au traducteur un flux de mots, et l'unité qui lève l'ambiguïté sur l'ordre de grandeur peut arriver un souffle entier après les chiffres.

Pourquoi le modèle tombe dans le panneau

Il nous a fallu du temps pour intégrer pourquoi cela se reproduisait d'un modèle à l'autre. Une remise est un nombre doté d'une direction, et cette direction vit dans la convention numérique, pas dans un mot que le modèle pourrait transporter. Il n'existe aucune entrée de vocabulaire qui fasse correspondre correctement 折 à « de remise », parce que 折 n'a jamais parlé de ce qui est déduit — il a toujours parlé de ce qui reste. Le modèle reproduit le motif de surface qu'il a vu des milliers de fois, et il n'a aucun registre interne qui remarquerait que la valeur a basculé.

Point capital : c'est un problème de convention, et nous avons vérifié que ce n'est pas un problème de capacité. Nous avons constitué un petit corpus de régression de formules de remise et de grands nombres dans les deux sens, et nous l'avons fait passer sur chaque niveau de modèle livré par SyncTrans, sur les deux piles sur appareil comme via le moteur cloud. L'inversion est apparue à toutes les tailles, sur toutes les piles. Les modèles plus gros formulaient le mauvais chiffre avec plus d'aisance. Une fois les mesures sous cet aspect, la conclusion s'écrivait d'elle-même : attendre un meilleur modèle ne résoudrait rien, le correctif devait donc vivre en dehors du modèle.

Une couche de règles derrière le modèle

Le correctif de la 1.0.0 est une couche de post-traitement déterministe qui se place derrière le traducteur et guette les expressions numériques assorties d'une convention. Quand une formule de remise s'analyse sans ambiguïté, la couche cesse de la traiter comme de la langue et la traite comme de l'arithmétique : 七折 est converti en sa valeur explicite — payer 70 %, soit 30 % de remise — puis réexprimé dans la convention propre à la langue cible. Le 折 est de l'arithmétique, alors nous le traitons par l'arithmétique. Les nombres groupés en myriades reçoivent le même traitement : l'ordre de grandeur est calculé à partir de l'unité, puis rendu dans le groupement de la langue cible.

L'attrait de cette couche, c'est qu'elle est ennuyeuse. Chaque règle est une petite fonction testable unitairement, avec une réponse fixe, verrouillée par le même corpus qui a prouvé le bug. Quand une règle se déclenche, nous pouvons dire exactement pourquoi ; quand un modèle improvise, nous ne le pouvons pas. Pour la seule catégorie de formules où une erreur fluide coûte de l'argent à quelqu'un, nous voulions un composant qui donne la même réponse à chaque fois et qui puisse être audité ligne par ligne.

Ce que l'hybride nous coûte

Nous sommes entrés dans cette voie en connaissant les compromis, et ils sont réels. Une couche de règles ne vaut que par sa couverture : la première discipline est donc la retenue. Une règle ne se déclenche que lorsque la formule s'analyse proprement, et tout ce qui est ambigu est laissé au modèle. Une règle qui devinerait corromprait des sorties que le modèle aurait rendues justes, ce qui est le seul résultat pire que le bug d'origine. Le second coût est la maintenance — les conventions sont propres à chaque paire de langues, le corpus doit grandir avec chaque paire que nous prenons au sérieux, et chaque règle exige des mesures des deux côtés. Et le modèle continue de faire tout le reste : la prose, le ton, le contexte. Les règles sont un garde-fou pour une classe étroite et mesurable d'échecs, maintenues délibérément trop petites pour devenir un second traducteur.

Où en est ce travail

Les règles numériques ont été livrées dans SyncTrans 1.0.0 et le corpus tourne dans notre suite de régression : toute future mise à niveau de modèle devra continuer à le passer. Le travail n'est pas terminé : le durcissement autour des frontières des grands nombres — unités mélangées, ordres de grandeur prononcés sous une forme relâchée du quotidien — est encore en cours, et nous nous attendons à ce que le corpus continue de grossir à mesure que de vraies conversations nous apprendront de nouvelles façons de nous tromper. Si un nombre sort un jour de SyncTrans en ayant l'air inversé ou rétréci, dites-le-nous — ce signalement ira directement dans le corpus.

Pour le tableau d'ensemble de ce que contient la version 1.0.0, voir La route vers SyncTrans 1.0.