We hebben elke machinevertaling gecontroleerd. De controles waren het deel dat fout was.
Talen
Voordat we onze vertaalkit uitbrachten, hebben we hem getest op een kleine voorbeeldapp: 70 strings in zes formaten (JSON, Flutter ARB, Android, Apple .strings, gettext en Markdown) naar Duits, Russisch, Japans, Arabisch en Spaans, met een open model van 27 miljard parameters op onze eigen machine. Elke vertaalde string gaat door controles voordat hij wordt weggeschreven. Vier van de 350 werden afgekeurd. Alle vier de afkeuringen waren onterecht.
Waar de controles op letten
Een vertaling die een app breekt is erger dan geen, dus elke string moet zijn placeholders (%1$s, {name}, {{count}}), zijn tags, regeleinden en URL's behouden; hij moet in het schrift van de doeltaal staan; hij mag niet leeg, uit de hand gelopen of in het Engels zijn; en meervoudsvormen moeten precies de categorieën dekken die de taal heeft. Een string die faalt wordt opnieuw opgevraagd met de naam van het probleem, en een die opnieuw faalt wordt weggelaten, zodat de app voor die ene string Engels toont.
De vier afkeuringen
- "Backups" in het Duits was "Backups". De controle noemde het onvertaald. Duits gebruikt het Engelse woord. Eén identiek woord is vaak goed; twee of meer identieke woorden niet, dus dat is nu de regel.
- Een Russische en een Japanse regel met een e-mailadres faalden de schriftcontrole: minder dan 60% van de letters was Cyrillisch of Japans, omdat
[email protected]in Latijnse letters is geschreven. Adressen worden nu behandeld als placeholders: ze moeten onveranderd terugkomen, en tellen niet mee als letters. - Een Japanse meervoudsmelding kwam terug als
{count, plural, =0{連続記録なし} other{{count}日連続}}. De tak{連続記録なし}heeft geen spaties, dus het placeholderpatroon zag het als een variabele genaamd 連続記録なし. Takhaakjes in meervoudsmeldingen zijn nu structuur, en placeholder-namen moeten ASCII zijn.
Nadat de controles waren gecorrigeerd, vroeg een tweede run het model alleen om die vier strings, omdat de rest in het vertaalgeheugen zat, en schreef alle 350 in 45 seconden weg.
Het deel waarvan we verwachtten dat het zou falen en dat niet deed
Meervoudsvormen zijn waar naïeve vertalingen falen: Engels heeft one en other, Russisch one, few, many en other, Arabisch zes categorieën, Japans één vorm. We vroegen om precies de doelcategorien en controleerden de placeholders van elke vorm. Het model schreef "1 день, 2 дня, 5 дней" voor Russisch en alle zes Arabische vormen. Elke Android-meervoudsvorm slaagde bij de eerste poging in alle vijf talen, en dat gold ook voor elk meervoudsbericht behalve het Japanse, dat onze controle verkeerd las.
Wat geen enkele controle kan vangen
Vervolgens vertaalden we de 22 webstrings van het voorbeeld naar alle 42 talen die Polyglot kent: 924 van de 924 strings slaagden. Bij het doorlezen viel er één op. In het Khmer was "You are offline" teruggekomen als een zin die "you are online" betekent. Het is correct Khmer in het juiste schrift met niets ontbrekend, dus elke controle liet het door. Controles vangen wat een app breekt; een verkeerde betekenis vereist iemand die de taal leest.
De conclusie
Automatische controles op machine-uitvoer hebben echte uitvoering nodig om tegen te testen. Unittests met verzonnen vertalingen slaagden; een echt model dat echt Japans schreef, vond de gaten in minuten. Polyglot wordt geleverd met deze controles, gerepareerd, en met de tests voor elk van de vier gevallen.