Halluzination
Wenn ein Sprachmodell etwas Plausibles, aber Falsches erzeugt – kein Programmfehler, sondern eine direkte Folge seines Prinzips.
Eine Halluzination ist eine Ausgabe, die überzeugend klingt, aber nicht stimmt: ein erfundenes Zitat, eine falsche Zahl, eine Java-Methode, die es nicht gibt.
Sie entsteht, weil ein Sprachmodell darauf trainiert ist, plausiblen Text zu erzeugen – nicht wahren. Fehlt ihm das Wissen, liefert es trotzdem die plausibelste Fortsetzung. Das Modell lügt dabei nicht; es hat schlicht keinen eingebauten Unterschied zwischen „wissen“ und „raten“.
Wie sie entsteht
Ein Sprachmodell sagt bei jedem Schritt eine Wahrscheinlichkeitsverteilung für das nächste Token voraus. Bei einer Frage, deren Antwort es tausendfach im Training gesehen hat, ist diese Verteilung spitz: Ein Kandidat dominiert, und der ist richtig. Bei einer Frage, zu der es wenig oder nichts weiß, ist sie flach: viele Kandidaten, keiner überzeugend.
Der entscheidende Punkt: In beiden Fällen wird am Ende ein Token gezogen und als Text ausgegeben. Die flache Verteilung, also die Unsicherheit, ist im fertigen Satz nicht mehr zu sehen. Er klingt genauso selbstsicher.
Selbst ausprobieren
Stell dem Spielzeug-Modell eine Frage und lass es antworten. Grün markiert ist die richtige Antwort, die Leiste darunter zeigt, wie unsicher das Modell innerlich ist:
Typische Formen
Halluzinationen treten dort auf, wo das Modell wenig verlässliche Muster gelernt hat, aber die Form der Antwort sehr gut kennt:
Erfundene Quellen
Literaturangaben, URLs, Gerichtsurteile. Das Modell kennt das Format perfekt – Autor, Jahr, Titel, Seitenzahl – und füllt es plausibel aus.Nicht existierende APIs
Für Entwickler der Klassiker: Methoden, die es geben könnte, weil sie zum Namensschema passen.list.stream().filterNotNull().toList();gibt es in Kotlin, nicht in Java
Falsche Details
Exakte Zahlen, Daten, Versionsnummern, Namen von Nebenfiguren. Die Größenordnung stimmt oft, das Detail nicht.Zusammengewürfelte Personen
Bei wenig bekannten Menschen verschmelzen Fakten mehrerer Personen gleichen Namens zu einer.Je bekannter und häufiger ein Fakt im Trainingstext vorkommt, desto zuverlässiger. Je seltener, spezieller und genauer, desto riskanter. Ereignisse nach dem Wissensstichtag des Trainings kennt das Modell gar nicht.
Der Lawineneffekt
Ein Sprachmodell schreibt Token für Token und kann nicht zurück. Ist einmal ein falsches Token gewählt, wird alles Folgende dazu passend fortgesetzt – denn das ist ja seine Aufgabe. Ein kleiner Fehler am Anfang erzeugt so eine ganze, in sich stimmige Fehlgeschichte.
Modelle, die vor der Antwort „nachdenken“ dürfen, können solche Fehler teilweise selbst bemerken und korrigieren – weil sie ihre Zwischenergebnisse noch einmal lesen, bevor die eigentliche Antwort kommt.
Falsche Voraussetzungen
Eine besonders tückische Quelle ist die Frage selbst. Enthält sie eine falsche Annahme, ist die plausibelste Fortsetzung oft, darauf einzugehen – denn in Trainingstexten werden Fragen meist beantwortet, nicht korrigiert.
Optional in Java 6 eingeführt?Optional in Java 6 eingeführt?Optional kam erst mit Java 8 (2014). Eingeführt wurde es, um …Was hilft
Ganz abschalten lässt sich das Halluzinieren nicht, es gehört zum Prinzip. Aber man kann es stark eindämmen:
Die Anbieter arbeiten ebenfalls daran: Modelle werden gezielt darauf trainiert, Wissenslücken zuzugeben, statt zu raten. Neuere Modelle halluzinieren deutlich seltener als frühere – aber nie gar nicht.
Für Entwickler übersetzt
| Begriff | Entspricht ungefähr |
|---|---|
| Halluzination | ein get(), das nie null liefert und nie eine Exception wirft, sondern bei fehlendem Schlüssel einen plausiblen Wert erfindet |
| Wissen im Modell | ein verlustbehaft komprimierter Cache – Häufiges ist gut erhalten, Seltenes verwaschen |
| Material im Kontext | die Daten als Parameter übergeben statt aus dem Cache zu lesen |
| Lawineneffekt | ein früher falscher Zustand, mit dem alle folgenden Methoden konsistent weiterrechnen |
// So verhält sich ein Datenspeicher, den man erwartet:
String einwohner = lexikon.get("Kleinkleckersdorf"); // null → klar: unbekannt
// So verhält sich ein Sprachmodell ohne Hilfsmittel:
String einwohner = modell.ergaenze("Kleinkleckersdorf hat ");
// → "1 247 Einwohner" – immer ein Wert, nie null, kein Hinweis aufs Raten