Wir haben jede maschinelle Übersetzung geprüft. Die Prüfungen waren der Teil, der falsch war.
Sprachen
Bevor wir unser Übersetzungs-Kit veröffentlichten, haben wir es mit einer kleinen Beispiel-App getestet: 70 Strings in sechs Formaten (JSON, Flutter ARB, Android, Apple .strings, gettext und Markdown) ins Deutsche, Russische, Japanische, Arabische und Spanische, mit einem offenen Qwen-Modell (Qwen3.8-Flash-Next, quantisiert auf 4 Bit), bereitgestellt von vLLM auf unserem eigenen Rechner. Jeder übersetzte String durchläuft vor dem Schreiben Prüfungen. Vier der 350 wurden verworfen. Alle vier Verwerfungen waren falsch.
Worauf die Prüfungen achten
Eine Übersetzung, die eine App zerstört, ist schlimmer als keine, daher muss jeder String seine Platzhalter (%1$s, {name}, {{count}}), seine Tags, Zeilenumbrüche und URLs beibehalten; er muss im Schriftsystem der Zielsprache vorliegen; er darf nicht leer, ausufernd oder auf Englisch sein; und die Pluralformen müssen genau die Kategorien abdecken, die die Sprache hat. Ein String, der durchfällt, wird mit Angabe des Problems erneut angefordert, und einer, der erneut durchfällt, wird weggelassen, sodass die App für diesen einen String Englisch anzeigt.
Die vier Verwerfungen
- „Backups“ auf Deutsch war „Backups“. Die Prüfung meldete es als unübersetzt. Deutsch verwendet das englische Wort. Ein identisches Wort ist oft richtig; zwei oder mehr identische Wörter sind es nicht, daher ist das nun die Regel.
- Eine russische und eine japanische Zeile mit einer E-Mail-Adresse fielen durch die Schriftprüfung: Weniger als 60 % der Buchstaben waren kyrillisch oder japanisch, weil
[email protected]in lateinischen Buchstaben geschrieben ist. Adressen werden nun wie Platzhalter behandelt: Sie müssen unverändert zurückkommen und zählen nicht als Buchstaben. - Eine japanische Plural-Nachricht kam als
{count, plural, =0{連続記録なし} other{{count}日連続}}zurück. Der Zweig{連続記録なし}hat keine Leerzeichen, daher hielt das Platzhalter-Muster ihn für eine Variable namens 連続記録なし. Zweig-Klammern in Plural-Nachrichten sind nun Struktur, und Platzhalternamen müssen ASCII sein.
Nachdem die Prüfungen korrigiert waren, forderte ein zweiter Durchlauf das Modell nur für diese vier Strings auf, da alles andere im Translation Memory lag, und schrieb alle 350 in 45 Sekunden.
Der Teil, von dem wir erwarteten, dass er scheitern würde, und der es nicht tat
Pluralformen sind die Stelle, an der naive Übersetzungen scheitern: Englisch hat one und other, Russisch one, few, many und other, Arabisch sechs Kategorien, Japanisch eine einzige Form. Wir forderten genau die Kategorien der Zielsprache an und prüften die Platzhalter jeder Form. Das Modell schrieb für Russisch "1 день, 2 дня, 5 дней" und alle sechs arabischen Formen. Jede Android-Pluralform bestand beim ersten Versuch in allen fünf Sprachen, ebenso jede Pluralnachricht außer der japanischen, die unsere Prüfung falsch interpretierte.
Was keine Prüfung erfasst
Anschließend übersetzten wir die 22 Web-Strings des Beispiels in alle 42 Sprachen, die Polyglot kennt: 924 von 924 Strings bestanden. Beim Durchlesen fiel einer auf. Auf Khmer war "You are offline" als Satz zurückgekommen, der "you are online" bedeutet. Es ist wohlgeformtes Khmer in der richtigen Schrift ohne fehlende Elemente, daher bestand es jede Prüfung. Prüfungen erfassen, was die App bricht; eine falsche Bedeutung braucht jemanden, der die Sprache liest.
Das Fazit
Automatische Prüfungen der maschinellen Ausgabe benötigen echte Ausgaben als Testgrundlage. Unit-Tests mit erfundenen Übersetzungen bestanden; ein echtes Modell, das echtes Japanisch schrieb, fand die Lücken in Minuten. Polyglot wird mit diesen Prüfungen, behoben, und mit den Tests für jeden der vier Fälle ausgeliefert. Die Prüfungen allein sind kostenlos und Open Source: translation-checks auf GitHub.