Multivocab bringt 15 Sprachen nebeneinander, und KI hat den gesamten Inhalt erstellt. So validiere ich 36.000 Spracheinträge, ohne jeden einzelnen von Hand zu prüfen.
Ich habe Multivocab gebaut, weil ich Sprachen nebeneinander lernen wollte statt nacheinander. Jede Karte enthält denselben Begriff in jeder Sprache: Englisch, Deutsch, Spanisch, Französisch, Italienisch, Portugiesisch, Russisch, Persisch, Urdu, Hebräisch, Türkisch, Niederländisch, Schwedisch, Japanisch und Koreanisch. Öffnet man dieselbe Karte in zwei Sprachen, stehen die beiden Fassungen direkt nebeneinander.
Das ist das ganze Produkt und gleichzeitig der schwierige Teil. Wenn die deutsche Fassung einer Karte eine leicht andere Bedeutung hat als die englische, lernt man beim Nebeneinandervergleichen das Falsche statt des Richtigen.
In diesem Beitrag schreibe ich darüber, warum KI-Übersetzungen so unauffällig scheitern, wie ich aus einer Karte zwölf kleine typisierte Fragen gemacht habe, was mein erster Lauf falsch gemacht hat und wie aus der Ausgabe eine Liste zum Reparieren wurde.
Warum KI-Übersetzungen still scheitern
Der Inhalt wurde generiert, also habe ich mit etwas Rauschen gerechnet. Was ich nicht erwartet habe, war, wie gewöhnlich die Fehler aussahen.
- Wort-für-Wort-Übersetzung. „Good morning“ wird im Französischen zu bon matin statt zu bonjour. Grammatisch, verständlich und etwas, das niemand sagt.
- Die falsche Bedeutung. Englische Wörter sind oft mehrdeutig, und eine Übersetzung kann ein echtes Wort für eine völlig andere Bedeutung des englischen Begriffs sein.
- Abweichung zwischen den Sprachen. Wenn eine Sprache „my brother“ sagt und eine andere „my sister“, lernt man beim Vergleichen das Falsche.
- Irreführende Antwortoptionen. Eine Ablenkoption, die ebenfalls richtig ist, bestraft dafür, dass man recht hat.
- Falsche Hinweise und Grammatik. Ein falscher Artikel, ein falsches Genus oder eine falsche Erklärung wird auswendig gelernt, denn genau dafür ist ein Hinweis da.
Keiner dieser Fehler ist ein Schema-Fehler. Ein JSON-Schema sieht sie nicht, und 36.000 Einträge von Hand zu lesen ist nicht realistisch.
Warum nicht einfach ein Chatmodell fragen
Der naheliegende Ansatz ist, ein Chatmodell zu fragen, ob eine Übersetzung gut ist. Das liefert Prosa. Die Formulierung ändert sich zwischen den Läufen, es gibt keinen stabilen Wert, und es gibt nichts, was man sortieren oder filtern könnte.
Ich wollte, dass jede Prüfung in einer Zahl endet. Dann kann ich danach sortieren, filtern und zwischen zwei Läufen vergleichen.
Ich habe Jev verwendet, das Entscheidungsmodell von TypeSafe. Es erzeugt keinen Text. Man schickt ihm Zustand und typisierte Fragen, und es liefert typisierte Antworten. Zwei der drei Fragetypen haben für diese Arbeit gereicht:
- Noul ist eine Ja-oder-Nein-Frage. Die Antwort ist die Wahrscheinlichkeit, dass die Antwort Ja ist, von 0 bis 1.
- Choice wählt eine Option aus einer festen Liste. Die Antwort ist die gewählte Option und die Wahrscheinlichkeit für jede Option.
So wird aus der Prüfung einer Karte zwölf kleine Bewertungen statt einer langen Meinung.
Aus einer Karte werden zwölf Fragen
Für jede Karte und jede Sprache schicke ich eine Anfrage. Der Zustand enthält die englische Karte als Referenz für die Bedeutung, die Karte, die ich prüfe, und denselben Begriff in den anderen 14 Sprachen. Jede Frage wird parallel gegen denselben Zustand ausgewertet.
{
"model": "jev-latest",
"state": "Referenz (Englisch): Begriff „good morning“, Beispiel „Good morning!“, Hinweis „Eine Begrüßung vor dem Unterricht.“ | Geprüft (de): Begriff „Guten Morgen“, Beispiel „Guten Morgen!“, Hinweis „Eine Begrüßung vor dem Unterricht.“ | Andere Sprachen für „good morning“: ...",
"questions": {
"term_relation": {
"type": "choice",
"instructions": "Wie verhält sich der deutsche Begriff zum englischen Begriff in dieser Bedeutung?",
"criteria": {
"equivalent": "Dieselbe Bedeutung wie der englische Begriff in dieser Bedeutung.",
"near": "Eine gängige Alternative, die Lernende ebenfalls akzeptieren würden.",
"literal": "Eine wörtliche Wiedergabe, die niemand sagen würde.",
"other_sense": "Ein echtes Wort, aber eine andere Bedeutung des englischen Begriffs.",
"wrong": "Überhaupt nicht mit dem englischen Begriff verwandt."
}
},
"example_relation": {
"type": "choice",
"instructions": "Bedeutet das deutsche Beispiel dasselbe wie das englische Beispiel?",
"criteria": {
"same": "Lernende sehen in beiden Sprachen dieselbe Bedeutung.",
"shifted": "Die Bedeutung ist verrutscht, zum Beispiel eine andere Zeit, Person oder Sache.",
"different": "Das Beispiel sagt etwas anderes."
}
},
"example_natural": {
"type": "noul",
"instructions": "Würde eine deutsche Muttersprachlerin oder ein deutscher Muttersprachler diesen Beispielsatz als unnatürlich empfinden?"
},
"term_used_correctly": {
"type": "noul",
"instructions": "Wird der Begriff im Beispiel in der gemeinten Bedeutung verwendet?"
},
"note_error": {
"type": "noul",
"instructions": "Enthält der Hinweis zu dieser Karte einen Fehler?"
},
"article_gender": {
"type": "noul",
"instructions": "Ist der Artikel oder das Genus für diesen Begriff falsch?"
}
}
}
Verwandte Wörter werden genauso geprüft, aber mit einer Noul-Frage pro Wort, weil jedes Wort eine eigene Antwort braucht. Eine Karte hat bis zu sechs davon.
| Prüfung | Typ | Was sie findet |
|---|---|---|
| Wie verhält sich der Begriff zum englischen Begriff in dieser Bedeutung? | Choice | Falsches Wort, falsche Bedeutung, Wort-für-Wort-Übersetzung |
| Bedeutet das Beispiel dasselbe wie das englische Beispiel? | Choice | Abweichung zwischen den Sprachen |
| Würde ein Muttersprachler oder eine Muttersprachlerin das Beispiel als unnatürlich empfinden? | Noul | Wort-für-Wort-Sätze |
| Wird der Begriff im Beispiel in der gemeinten Bedeutung verwendet? | Noul | Irreführende Beispiele |
| Enthält der Hinweis einen Fehler? | Noul | Falsche Hinweise |
| Ist das verwandte Wort wirklich verwandt, natürlich und nicht der Begriff selbst? | Noul × 6 | Schlechte verwandte Wörter |
| Ist der Artikel oder das Genus falsch? | Noul | Grammatikfehler |
Bei Testfragen sind es vier Fragen: Erfüllt die Antwort die Aufgabenstellung, ist sie natürlich, passt die Aufgabenstellung zur englischen, und könnte eine der Ablenkoptionen ebenfalls eine korrekte Antwort ergeben.
Die englische Karte ist der Anker. Jede Sprache wird gegen dieselbe englische Bedeutung und dasselbe englische Beispiel geprüft. Genau das zählt, wenn jemand zwei Sprachen gleichzeitig lernt.
Der Umfang
- 2.170 Begriffe in 60 Decks, dazu 240 Testfragen in 12 Testdecks.
- 32.550 Kartenanfragen und 3.600 Anfragen für Testfragen.
- Rund 405.000 einzelne Bewertungen, zwölf pro Karte und vier pro Testfrage.
- Ein paar Dollar insgesamt, weil Jev nur für Input-Token abrechnet.
- Rund eine halbe Stunde Laufzeit, und das liegt ungefähr am Limit: 1.200 Anfragen pro Minute.
Die Ergebnisse werden nach einem Hash des Inhalts zwischengespeichert. Ein erneuter Lauf prüft deshalb nur das, was sich tatsächlich geändert hat.
Ausgabe, die sich direkt reparieren lässt
Jedes gefundene Problem wird als eine eigenständige JSON-Zeile geschrieben. Die Zeile enthält die Quelldatei, das Deck, den Begriff, die Sprache, das Feld, eine Beschreibung des Problems, die Wahrscheinlichkeit, die aktuelle Karte und die englische Referenz.
{"file":"decks/first-communication/concepts.json","deck":"First Communication","concept":"good morning","language":"ja","field":"relatedWords","issue":"Wörtliche Wiedergabe des englischen Ausdrucks. Eine japanische Lernende würde ihr so nicht begegnen.","probability":0.94,"card":{"term":"よい朝を","example":"先生、よい朝を!"},"reference":{"term":"good morning","example":"Good morning!"}}
Nach Wahrscheinlichkeit sortiert geht diese Datei direkt in ein anderes LLM, das eine Korrektur vorschlägt und anwendet. Ein Problem nach dem anderen, mit allem, was es dafür braucht, in derselben Zeile. Ich muss den Kontext eines Flags nicht von Hand zusammensuchen, und das Modell muss nicht raten, welche Karte es gerade sieht.
Der erste Lauf brachte 101 Flags wegen einer falschen Frage
Diesen Teil würde ich aus dem ganzen Projekt behalten.
Meine erste Stichprobe umfasste 50 Datensätze. Sie brachte 101 Flags. Das ist mehr als zwei Flags pro Datensatz, und ich habe nicht absichtlich zwei Fehler in jede Karte geschrieben.
94 dieser Flags kamen von einer einzigen Prüfung. Ich hatte gefragt, ob jedes verwandte Wort auch eine korrekte Antwort auf den englischen Begriff sei. Die Anwendung zeigt diese Wörter aber als verwandte Wörter, und dort ist ein Synonym genau das, was ich will. Die Prüfung war präzise in Bezug auf die falsche Sache, und ihre Antwort war eindeutig.
Nachdem ich die Frage umgeschrieben hatte, um zu fragen, ob jedes verwandte Wort wirklich verwandt, natürlich und nicht eine Wiederholung des Begriffs selbst ist, sank dieselbe Stichprobe von 50 Datensätzen auf 7 Flags. Alle 7 waren echt.
Eine Prüfung muss dazu passen, wie das Produkt den Inhalt tatsächlich verwendet. Das ist die Erkenntnis, und sie hat mich einen vollständigen Stichprobenlauf gekostet.
Ergebnisse für das erste Deck
Deck 1 heißt First Communication. Es hat 45 Begriffe in 15 Sprachen, das sind 675 Datensätze.
- Das ganze Deck brachte 50 Flags. 36 waren echt, und ich habe sie korrigiert. Die Beispiele wichen von der englischen Bedeutung ab, etwa „Wähle Deutsch“ statt „Wähle die erste Lektion“. Ein spanischer Satz war grammatikalisch falsch. Einige verwandte Wörter waren unnatürlich, etwa die wörtliche japanische Angabe よい朝を für einen guten Morgen.
- 14 Flags habe ich geprüft und behalten. Einige waren absichtliche Lokalisierungen, wie das englische Beispiel „Wie sagt man das auf Spanisch?“. Andere waren umgangssprachliche Formulierungen, die dem Modell schlicht nicht gefallen. Eine war eine echte Lücke in meinem Inhalt: Im Koreanischen gibt es keine alltägliche Formulierung für „Guten Nachmittag“.
- Der erneute Lauf nach den Korrekturen war günstig. Nur 33 der 675 Datensätze hatten sich geändert, also mussten nur diese neu angefragt werden. Alles andere kam aus dem Zwischenspeicher.
Jeder Lauf hängt seine Zahlen an stats.jsonl an, und summary.json hält Abdeckung und Gesamtsummen fest. Zusammen sehe ich jederzeit, wie viele der 36.000 Datensätze tatsächlich geprüft sind, wie viele Prüfungen zurückgekommen sind und was der Lauf gekostet hat.
Einschränkungen
- Jev ist am stärksten in Englisch. Andere Sprachen werden unterstützt, aber nicht gleich gut. Deshalb validiere ich Deck für Deck und lese jedes Flag, bevor ich Inhalte ändere.
- Eine Wahrscheinlichkeit ist eine Beurteilung, kein Beweis. Ich sortiere nach Konfidenz und prüfe jedes Flag nach einer Korrektur erneut, weil eine Korrektur an anderer Stelle der Karte ein neues Problem einführen kann.
Abschließende Gedanken
KI-generierter Inhalt braucht Validierung in KI-Größenordnung, aber ein Chatbot ist kein Test.
Den Inhalt in kleine typisierte Fragen zu zerlegen hat mir etwas gegeben, das sich wie eine Testsuite verhält. Jeder Eintrag wird geprüft, jedes Ergebnis ist eine Zahl, und die Ausgabe ist eine saubere Liste dessen, was zu reparieren ist.
Was ich nicht erwartet habe, war die erste Stichprobe. 101 Flags bei 50 Datensätzen klangen nach einem kaputten Modell, aber das Modell war in Ordnung und meine Frage war falsch. Das ist der Fehlermodus, auf dem ich bei jeder nächsten KI-Prüfung achten werde: eine selbstsichere, präzise Antwort auf etwas, wonach das Produkt nie gefragt hat.